⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parametershrinker.java

📁 proguard 3.5 java 混淆器 最新 免费 好用的 大家用用试一下吧 天行健-君子以自强不息 地势坤-君子以厚德载物
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    // Implementations for AttrInfoVisitor.    public void visitUnknownAttrInfo(ClassFile classFile, UnknownAttrInfo unknownAttrInfo) {}    public void visitInnerClassesAttrInfo(ClassFile classFile, InnerClassesAttrInfo innerClassesAttrInfo) {}    public void visitEnclosingMethodAttrInfo(ClassFile classFile, EnclosingMethodAttrInfo enclosingMethodAttrInfo) {}    public void visitConstantValueAttrInfo(ClassFile classFile, FieldInfo fieldInfo, ConstantValueAttrInfo constantValueAttrInfo) {}    public void visitExceptionsAttrInfo(ClassFile classFile, MethodInfo methodInfo, ExceptionsAttrInfo exceptionsAttrInfo) {}    public void visitCodeAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo) {}    public void visitLineNumberTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LineNumberTableAttrInfo lineNumberTableAttrInfo) {}    public void visitLocalVariableTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LocalVariableTableAttrInfo localVariableTableAttrInfo) {}    public void visitLocalVariableTypeTableAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, LocalVariableTypeTableAttrInfo localVariableTypeTableAttrInfo) {}    public void visitSourceFileAttrInfo(ClassFile classFile, SourceFileAttrInfo sourceFileAttrInfo) {}    public void visitSourceDirAttrInfo(ClassFile classFile, SourceDirAttrInfo sourceDirAttrInfo) {}    public void visitDeprecatedAttrInfo(ClassFile classFile, DeprecatedAttrInfo deprecatedAttrInfo) {}    public void visitSyntheticAttrInfo(ClassFile classFile, SyntheticAttrInfo syntheticAttrInfo) {}    public void visitSignatureAttrInfo(ClassFile classFile, SignatureAttrInfo signatureAttrInfo) {}    public void visitRuntimeVisibleAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleAnnotationsAttrInfo runtimeVisibleAnnotationsAttrInfo) {}    public void visitRuntimeInvisibleAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleAnnotationsAttrInfo runtimeInvisibleAnnotationsAttrInfo) {}    public void visitAnnotationDefaultAttrInfo(ClassFile classFile, AnnotationDefaultAttrInfo annotationDefaultAttrInfo) {}    public void visitRuntimeVisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleParameterAnnotationsAttrInfo runtimeVisibleParameterAnnotationsAttrInfo)    {        // Update the parameter annotations.        shrinkParameterAnnotations(classFile, runtimeVisibleParameterAnnotationsAttrInfo);    }    public void visitRuntimeInvisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleParameterAnnotationsAttrInfo runtimeInvisibleParameterAnnotationsAttrInfo)    {        // Update the parameter annotations.        shrinkParameterAnnotations(classFile, runtimeInvisibleParameterAnnotationsAttrInfo);    }    // Small utility methods.    /**     * Shrinks the given parameter annotations.     */    private void shrinkParameterAnnotations(ClassFile                           classFile,                                            RuntimeParameterAnnotationsAttrInfo runtimeParameterAnnotationsAttrInfo)    {        Annotation[][] annotations = runtimeParameterAnnotationsAttrInfo.parameterAnnotations;        // All parameters of non-static methods are shifted by one in the local        // variable frame.        int parameterIndex =            (methodInfo.getAccessFlags() & ClassConstants.INTERNAL_ACC_STATIC) != 0 ?                0 : 1;        int annotationIndex    = 0;        int newAnnotationIndex = 0;        // Go over the parameters.        String descriptor = methodInfo.getDescriptor(classFile);        InternalTypeEnumeration internalTypeEnumeration =            new InternalTypeEnumeration(descriptor);        while (internalTypeEnumeration.hasMoreTypes())        {            String type = internalTypeEnumeration.nextType();            if (VariableUsageMarker.isVariableUsed(methodInfo, parameterIndex))            {                annotations[newAnnotationIndex++] = annotations[annotationIndex];            }            annotationIndex++;            parameterIndex += ClassUtil.isInternalCategory2Type(type) ? 2 : 1;        }        runtimeParameterAnnotationsAttrInfo.u2numberOfParameters = newAnnotationIndex;        // Clear the unused entries.        while (newAnnotationIndex < annotationIndex)        {            annotations[newAnnotationIndex++] = null;        }    }    /**     * Returns a shrunk descriptor of the given method.     */    public static String shrinkDescriptor(ProgramClassFile  classFile,                                          ProgramMethodInfo methodInfo)    {        // All parameters of non-static methods are shifted by one in the local        // variable frame.        int parameterIndex =            (methodInfo.getAccessFlags() & ClassConstants.INTERNAL_ACC_STATIC) != 0 ?                0 : 1;        // Go over the parameters.        InternalTypeEnumeration internalTypeEnumeration =            new InternalTypeEnumeration(methodInfo.getDescriptor(classFile));        StringBuffer newDescriptorBuffer = new StringBuffer();        newDescriptorBuffer.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_OPEN);        while (internalTypeEnumeration.hasMoreTypes())        {            String type = internalTypeEnumeration.nextType();            if (VariableUsageMarker.isVariableUsed(methodInfo, parameterIndex))            {                newDescriptorBuffer.append(type);            }            parameterIndex += ClassUtil.isInternalCategory2Type(type) ? 2 : 1;        }        newDescriptorBuffer.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_CLOSE);        newDescriptorBuffer.append(internalTypeEnumeration.returnType());        return newDescriptorBuffer.toString();    }    /**     * Shrinks the array of referenced class files of the given method.     */    private static void shrinkReferencedClassFiles(ProgramClassFile  classFile,                                                   ProgramMethodInfo methodInfo)    {        ClassFile[] referencedClassFiles = methodInfo.referencedClassFiles;        if (referencedClassFiles != null)        {            // All parameters of non-static methods are shifted by one in the local            // variable frame.            int parameterIndex =                (methodInfo.getAccessFlags() & ClassConstants.INTERNAL_ACC_STATIC) != 0 ?                    0 : 1;            int referencedClassFileIndex    = 0;            int newReferencedClassFileIndex = 0;            // Go over the parameters.            String descriptor = methodInfo.getDescriptor(classFile);            InternalTypeEnumeration internalTypeEnumeration =                new InternalTypeEnumeration(descriptor);            while (internalTypeEnumeration.hasMoreTypes())            {                String type = internalTypeEnumeration.nextType();                if (ClassUtil.isInternalArrayType(type))                {                    type = ClassUtil.internalTypeFromArrayType(type);                }                if (ClassUtil.isInternalClassType(type))                {                    if (VariableUsageMarker.isVariableUsed(methodInfo, parameterIndex))                    {                        referencedClassFiles[newReferencedClassFileIndex++] =                            referencedClassFiles[referencedClassFileIndex];                    }                    referencedClassFileIndex++;                }                parameterIndex += ClassUtil.isInternalCategory2Type(type) ? 2 : 1;            }            // Also look at the return value.            String type = internalTypeEnumeration.returnType();            if (ClassUtil.isInternalArrayType(type))            {                type = ClassUtil.internalTypeFromArrayType(type);            }            if (ClassUtil.isInternalClassType(type))            {                referencedClassFiles[newReferencedClassFileIndex++] =                    referencedClassFiles[referencedClassFileIndex];                referencedClassFileIndex++;            }            // Clear the unused entries.            while (newReferencedClassFileIndex < referencedClassFileIndex)            {                referencedClassFiles[newReferencedClassFileIndex++] = null;            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -