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

📄 memberreferencefixer.java

📁 proguard 3.5 java 混淆器 最新 免费 好用的 大家用用试一下吧 天行健-君子以自强不息 地势坤-君子以厚德载物
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            {                if (DEBUG)                {                    System.out.println("MemberReferenceFixer:");                    System.out.println("  Class file     = "+classFile.getName());                    System.out.println("  Ref class file = "+referencedClassFile.getName());                    System.out.println("  Ref method     = "+methodrefCpInfo.getName(classFile)+methodrefCpInfo.getType(classFile));                    System.out.println("    -> interface method");                }                // Replace the method reference by an interface method reference.                ((ProgramClassFile)classFile).constantPool[this.cpIndex] =                    new InterfaceMethodrefCpInfo(methodrefCpInfo.u2classIndex,                                                 methodrefCpInfo.u2nameAndTypeIndex,                                                 referencedClassFile,                                                 referencedMemberInfo);            }        }    }    public void visitClassCpInfo(ClassFile classFile, ClassCpInfo classCpInfo)    {        // Check if this class entry refers to an interface class.        ClassFile referencedClassFile = classCpInfo.referencedClassFile;        if (referencedClassFile != null)        {            isInterfaceMethod = (referencedClassFile.getAccessFlags() & ClassConstants.INTERNAL_ACC_INTERFACE) != 0;        }    }    // Implementations for MemberInfoVisitor.    public void visitProgramFieldInfo(ProgramClassFile programClassFile, ProgramFieldInfo programFieldInfo)    {        // Fix the attributes.        programFieldInfo.attributesAccept(programClassFile, this);    }    public void visitProgramMethodInfo(ProgramClassFile programClassFile, ProgramMethodInfo programMethodInfo)    {        // Fix the attributes.        programMethodInfo.attributesAccept(programClassFile, this);    }    public void visitLibraryFieldInfo(LibraryClassFile libraryClassFile, LibraryFieldInfo libraryFieldInfo) {}    public void visitLibraryMethodInfo(LibraryClassFile libraryClassFile, LibraryMethodInfo libraryMethodInfo) {}    // Implementations for AttrInfoVisitor.    public void visitUnknownAttrInfo(ClassFile classFile, UnknownAttrInfo unknownAttrInfo) {}    public void visitInnerClassesAttrInfo(ClassFile classFile, InnerClassesAttrInfo innerClassesAttrInfo) {}    public void visitConstantValueAttrInfo(ClassFile classFile, FieldInfo fieldInfo, ConstantValueAttrInfo constantValueAttrInfo) {}    public void visitExceptionsAttrInfo(ClassFile classFile, MethodInfo methodInfo, ExceptionsAttrInfo exceptionsAttrInfo) {}    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 visitEnclosingMethodAttrInfo(ClassFile classFile, EnclosingMethodAttrInfo enclosingMethodAttrInfo)    {        MemberInfo referencedMemberInfo = enclosingMethodAttrInfo.referencedMethodInfo;        if (referencedMemberInfo != null)        {            ClassFile referencedClassFile = enclosingMethodAttrInfo.referencedClassFile;            // Does it have a new class?            if (!enclosingMethodAttrInfo.getClassName(classFile).equals(referencedClassFile.getName()))            {                // Update the class index.                enclosingMethodAttrInfo.u2classIndex =                    constantPoolEditor.addClassCpInfo((ProgramClassFile)classFile,                                                      referencedClassFile);            }            // Does it have a new name or type?            if (!enclosingMethodAttrInfo.getName(classFile).equals(referencedMemberInfo.getName(referencedClassFile)) ||                !enclosingMethodAttrInfo.getType(classFile).equals(referencedMemberInfo.getDescriptor(referencedClassFile)))            {                // Update the name and type index.                enclosingMethodAttrInfo.u2nameAndTypeIndex =                    constantPoolEditor.addNameAndTypeCpInfo((ProgramClassFile)classFile,                                                            referencedMemberInfo.getName(referencedClassFile),                                                            referencedMemberInfo.getDescriptor(referencedClassFile));            }        }    }    public void visitCodeAttrInfo(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo)    {        // Recompute the maximum stack size if necessary.        if (stackSizesMayHaveChanged)        {            stackSizeUpdater.visitCodeAttrInfo(classFile, methodInfo, codeAttrInfo);        }        // Fix the nested attributes.        codeAttrInfo.attributesAccept(classFile, methodInfo, this);    }    public void visitRuntimeVisibleAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleAnnotationsAttrInfo runtimeVisibleAnnotationsAttrInfo)    {        // Fix the annotations.        runtimeVisibleAnnotationsAttrInfo.annotationsAccept(classFile, this);    }    public void visitRuntimeInvisibleAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleAnnotationsAttrInfo runtimeInvisibleAnnotationsAttrInfo)    {        // Fix the annotations.        runtimeInvisibleAnnotationsAttrInfo.annotationsAccept(classFile, this);    }    public void visitRuntimeVisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeVisibleParameterAnnotationsAttrInfo runtimeVisibleParameterAnnotationsAttrInfo)    {        // Fix the annotations.        runtimeVisibleParameterAnnotationsAttrInfo.annotationsAccept(classFile, this);    }    public void visitRuntimeInvisibleParameterAnnotationAttrInfo(ClassFile classFile, RuntimeInvisibleParameterAnnotationsAttrInfo runtimeInvisibleParameterAnnotationsAttrInfo)    {        // Fix the annotations.        runtimeInvisibleParameterAnnotationsAttrInfo.annotationsAccept(classFile, this);    }    public void visitAnnotationDefaultAttrInfo(ClassFile classFile, AnnotationDefaultAttrInfo annotationDefaultAttrInfo)    {        // Fix the annotation.        annotationDefaultAttrInfo.defaultValueAccept(classFile, this);    }    // Implementations for AnnotationVisitor.    public void visitAnnotation(ClassFile classFile, Annotation annotation)    {        // Fix the element values.        annotation.elementValuesAccept(classFile, this);    }    // Implementations for ElementValueVisitor.    public void visitConstantElementValue(ClassFile classFile, Annotation annotation, ConstantElementValue constantElementValue)    {        fixElementValue(classFile, annotation, constantElementValue);    }    public void visitEnumConstantElementValue(ClassFile classFile, Annotation annotation, EnumConstantElementValue enumConstantElementValue)    {        fixElementValue(classFile, annotation, enumConstantElementValue);    }    public void visitClassElementValue(ClassFile classFile, Annotation annotation, ClassElementValue classElementValue)    {        fixElementValue(classFile, annotation, classElementValue);    }    public void visitAnnotationElementValue(ClassFile classFile, Annotation annotation, AnnotationElementValue annotationElementValue)    {        fixElementValue(classFile, annotation, annotationElementValue);        // Fix the annotation.        annotationElementValue.annotationAccept(classFile, this);    }    public void visitArrayElementValue(ClassFile classFile, Annotation annotation, ArrayElementValue arrayElementValue)    {        fixElementValue(classFile, annotation, arrayElementValue);        // Fix the element values.        arrayElementValue.elementValuesAccept(classFile, annotation, this);    }    // Small utility methods.    /**     * Fixs the method reference of the element value, if any.     */    private void fixElementValue(ClassFile    classFile,                                 Annotation   annotation,                                 ElementValue elementValue)    {        // Do we know the referenced method?        MemberInfo referencedMemberInfo = elementValue.referencedMethodInfo;        if (referencedMemberInfo != null)        {            // Does it have a new name or type?            String methodName    = elementValue.getMethodName(classFile);            String newMethodName = referencedMemberInfo.getName(annotation.referencedClassFiles[0]);            if (!methodName.equals(newMethodName))            {                // Update the element name index.                elementValue.u2elementName =                    constantPoolEditor.addUtf8CpInfo((ProgramClassFile)classFile,                                                     newMethodName);            }        }    }    private void debug(ClassFile  classFile,                       RefCpInfo  refCpInfo,                       ClassFile  referencedClassFile,                       MemberInfo referencedMemberInfo)    {        System.out.println("MemberReferenceFixer:");        System.out.println("  Class file      = "+classFile.getName());        System.out.println("  Ref class file  = "+referencedClassFile.getName());        System.out.println("  Ref member name = "+refCpInfo.getName(classFile));        System.out.println("                 -> "+referencedMemberInfo.getName(referencedClassFile));        System.out.println("  Ref descriptor  = "+refCpInfo.getType(classFile));        System.out.println("                 -> "+referencedMemberInfo.getDescriptor(referencedClassFile));    }}

⌨️ 快捷键说明

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