类 MethodInliner

  • 所有已实现的接口:
    proguard.classfile.attribute.visitor.AttributeVisitor, proguard.classfile.attribute.visitor.ExceptionInfoVisitor, proguard.classfile.attribute.visitor.LineNumberInfoVisitor, proguard.classfile.constant.visitor.ConstantVisitor, proguard.classfile.instruction.visitor.InstructionVisitor, proguard.classfile.visitor.MemberVisitor
    直接已知子类:
    ShortMethodInliner, SingleInvocationMethodInliner

    public abstract class MethodInliner
    extends java.lang.Object
    implements proguard.classfile.attribute.visitor.AttributeVisitor, proguard.classfile.instruction.visitor.InstructionVisitor, proguard.classfile.constant.visitor.ConstantVisitor, proguard.classfile.visitor.MemberVisitor, proguard.classfile.attribute.visitor.ExceptionInfoVisitor, proguard.classfile.attribute.visitor.LineNumberInfoVisitor
    This AttributeVisitor is an abstract class representing a visitor considering to inline each method that it visits in its usage sites. The behavior of whether a class is considered for inlining is controlled by overriding the shouldInline method. There are some additional technical constraints imposed on whether the method is actually inlined (see visitProgramMethod).
    另请参阅:
    SuperInvocationMarker, BackwardBranchMarker, AccessMethodMarker, SideEffectClassMarker
    • 构造器概要

      构造器 
      构造器 说明
      MethodInliner​(boolean microEdition, boolean android, boolean allowAccessModification)
      Creates a new MethodInliner.
      MethodInliner​(boolean microEdition, boolean android, boolean allowAccessModification, proguard.classfile.instruction.visitor.InstructionVisitor extraInlinedInvocationVisitor)
      Creates a new MethodInliner.
      MethodInliner​(boolean microEdition, boolean android, int maxResultingCodeLength, boolean allowAccessModification, boolean usesOptimizationInfo, proguard.classfile.instruction.visitor.InstructionVisitor extraInlinedInvocationVisitor)
      Creates a new MethodInliner.
    • 方法概要

      所有方法 实例方法 抽象方法 具体方法 
      修饰符和类型 方法 说明
      protected abstract boolean shouldInline​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute)
      Indicates whether this method should be inlined.
      void visitAnyAttribute​(proguard.classfile.Clazz clazz, proguard.classfile.attribute.Attribute attribute)  
      void visitAnyInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.Instruction instruction)  
      void visitAnyMember​(proguard.classfile.Clazz Clazz, proguard.classfile.Member member)  
      void visitAnyMethodrefConstant​(proguard.classfile.Clazz clazz, proguard.classfile.constant.AnyMethodrefConstant anyMethodrefConstant)  
      void visitCodeAttribute​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute)  
      void visitCodeAttribute0​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute)  
      void visitConstantInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.ConstantInstruction constantInstruction)  
      void visitExceptionInfo​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, proguard.classfile.attribute.ExceptionInfo exceptionInfo)  
      void visitLibraryMethod​(proguard.classfile.LibraryClass libraryClass, proguard.classfile.LibraryMethod libraryMethod)  
      void visitLineNumberInfo​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, proguard.classfile.attribute.LineNumberInfo lineNumberInfo)  
      void visitLineNumberTableAttribute​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, proguard.classfile.attribute.LineNumberTableAttribute lineNumberTableAttribute)  
      void visitProgramMethod​(proguard.classfile.ProgramClass programClass, proguard.classfile.ProgramMethod programMethod)  
      void visitSimpleInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.SimpleInstruction simpleInstruction)  
      void visitVariableInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.VariableInstruction variableInstruction)  
      • 从类继承的方法 java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • 从接口继承的方法 proguard.classfile.attribute.visitor.AttributeVisitor

        visitAnnotationDefaultAttribute, visitAnyAnnotationsAttribute, visitAnyParameterAnnotationsAttribute, visitAnyTypeAnnotationsAttribute, visitBootstrapMethodsAttribute, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitEnclosingMethodAttribute, visitExceptionsAttribute, visitInnerClassesAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitMethodParametersAttribute, visitModuleAttribute, visitModuleMainClassAttribute, visitModulePackagesAttribute, visitNestHostAttribute, visitNestMembersAttribute, visitPermittedSubclassesAttribute, visitRecordAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeInvisibleTypeAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitRuntimeVisibleTypeAnnotationsAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSourceDebugExtensionAttribute, visitSourceDirAttribute, visitSourceFileAttribute, visitStackMapAttribute, visitStackMapTableAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitUnknownAttribute
      • 从接口继承的方法 proguard.classfile.constant.visitor.ConstantVisitor

        visitAnyConstant, visitAnyRefConstant, visitClassConstant, visitDoubleConstant, visitDynamicConstant, visitFieldrefConstant, visitFloatConstant, visitIntegerConstant, visitInterfaceMethodrefConstant, visitInvokeDynamicConstant, visitLongConstant, visitMethodHandleConstant, visitMethodrefConstant, visitMethodTypeConstant, visitModuleConstant, visitNameAndTypeConstant, visitPackageConstant, visitPrimitiveArrayConstant, visitStringConstant, visitUtf8Constant
      • 从接口继承的方法 proguard.classfile.instruction.visitor.InstructionVisitor

        visitAnySwitchInstruction, visitBranchInstruction, visitLookUpSwitchInstruction, visitTableSwitchInstruction
      • 从接口继承的方法 proguard.classfile.visitor.MemberVisitor

        visitLibraryField, visitLibraryMember, visitProgramField, visitProgramMember
    • 字段详细资料

      • MAXIMUM_INLINED_CODE_LENGTH_JVM

        protected static final int MAXIMUM_INLINED_CODE_LENGTH_JVM
      • MAXIMUM_INLINED_CODE_LENGTH_android

        protected static final int MAXIMUM_INLINED_CODE_LENGTH_android
      • MAXIMUM_RESULTING_CODE_LENGTH_JSE

        protected static final int MAXIMUM_RESULTING_CODE_LENGTH_JSE
      • MAXIMUM_RESULTING_CODE_LENGTH_JME

        protected static final int MAXIMUM_RESULTING_CODE_LENGTH_JME
      • MAXIMUM_RESULTING_CODE_LENGTH_JVM

        protected static final int MAXIMUM_RESULTING_CODE_LENGTH_JVM
        另请参阅:
        常量字段值
      • INLINED_METHOD_END_LINE_NUMBER

        public static final int INLINED_METHOD_END_LINE_NUMBER
        另请参阅:
        常量字段值
      • INLINED_METHOD_START_LINE_NUMBER

        public static final int INLINED_METHOD_START_LINE_NUMBER
        另请参阅:
        常量字段值
      • microEdition

        protected final boolean microEdition
      • android

        protected final boolean android
      • maxResultingCodeLength

        protected final int maxResultingCodeLength
      • allowAccessModification

        protected final boolean allowAccessModification
      • usesOptimizationInfo

        protected final boolean usesOptimizationInfo
      • extraInlinedInvocationVisitor

        protected final proguard.classfile.instruction.visitor.InstructionVisitor extraInlinedInvocationVisitor
    • 构造器详细资料

      • MethodInliner

        public MethodInliner​(boolean microEdition,
                             boolean android,
                             boolean allowAccessModification)
        Creates a new MethodInliner.
        参数:
        microEdition - Indicates whether the resulting code is targeted at Java Micro Edition.
        android - Indicates whether the resulting code is targeted at the Dalvik VM.
        allowAccessModification - Indicates whether the access modifiers of classes and class members can be changed in order to inline methods.
      • MethodInliner

        public MethodInliner​(boolean microEdition,
                             boolean android,
                             boolean allowAccessModification,
                             proguard.classfile.instruction.visitor.InstructionVisitor extraInlinedInvocationVisitor)
        Creates a new MethodInliner.
        参数:
        microEdition - Indicates whether the resulting code is targeted at Java Micro Edition.
        android - Indicates whether the resulting code is targeted at the Dalvik VM.
        allowAccessModification - Indicates whether the access modifiers of classes and class members can be changed in order to inline methods.
        extraInlinedInvocationVisitor - An optional extra visitor for all inlined invocation instructions.
      • MethodInliner

        public MethodInliner​(boolean microEdition,
                             boolean android,
                             int maxResultingCodeLength,
                             boolean allowAccessModification,
                             boolean usesOptimizationInfo,
                             proguard.classfile.instruction.visitor.InstructionVisitor extraInlinedInvocationVisitor)
        Creates a new MethodInliner.
        参数:
        microEdition - Indicates whether the resulting code is targeted at Java Micro Edition.
        android - Indicates whether the resulting code is targeted at the Dalvik VM.
        maxResultingCodeLength - Configures the inliner with a max resulting code length.
        allowAccessModification - Indicates whether the access modifiers of classes and class members can be changed in order to inline methods.
        usesOptimizationInfo - Indicates whether this inliner needs to perform checks that require optimization info.
        extraInlinedInvocationVisitor - An optional extra visitor for all inlined invocation instructions.
    • 方法详细资料

      • visitAnyAttribute

        public void visitAnyAttribute​(proguard.classfile.Clazz clazz,
                                      proguard.classfile.attribute.Attribute attribute)
        指定者:
        visitAnyAttribute 在接口中 proguard.classfile.attribute.visitor.AttributeVisitor
      • visitCodeAttribute

        public void visitCodeAttribute​(proguard.classfile.Clazz clazz,
                                       proguard.classfile.Method method,
                                       proguard.classfile.attribute.CodeAttribute codeAttribute)
        指定者:
        visitCodeAttribute 在接口中 proguard.classfile.attribute.visitor.AttributeVisitor
      • visitCodeAttribute0

        public void visitCodeAttribute0​(proguard.classfile.Clazz clazz,
                                        proguard.classfile.Method method,
                                        proguard.classfile.attribute.CodeAttribute codeAttribute)
      • visitLineNumberTableAttribute

        public void visitLineNumberTableAttribute​(proguard.classfile.Clazz clazz,
                                                  proguard.classfile.Method method,
                                                  proguard.classfile.attribute.CodeAttribute codeAttribute,
                                                  proguard.classfile.attribute.LineNumberTableAttribute lineNumberTableAttribute)
        指定者:
        visitLineNumberTableAttribute 在接口中 proguard.classfile.attribute.visitor.AttributeVisitor
      • visitAnyInstruction

        public void visitAnyInstruction​(proguard.classfile.Clazz clazz,
                                        proguard.classfile.Method method,
                                        proguard.classfile.attribute.CodeAttribute codeAttribute,
                                        int offset,
                                        proguard.classfile.instruction.Instruction instruction)
        指定者:
        visitAnyInstruction 在接口中 proguard.classfile.instruction.visitor.InstructionVisitor
      • visitSimpleInstruction

        public void visitSimpleInstruction​(proguard.classfile.Clazz clazz,
                                           proguard.classfile.Method method,
                                           proguard.classfile.attribute.CodeAttribute codeAttribute,
                                           int offset,
                                           proguard.classfile.instruction.SimpleInstruction simpleInstruction)
        指定者:
        visitSimpleInstruction 在接口中 proguard.classfile.instruction.visitor.InstructionVisitor
      • visitVariableInstruction

        public void visitVariableInstruction​(proguard.classfile.Clazz clazz,
                                             proguard.classfile.Method method,
                                             proguard.classfile.attribute.CodeAttribute codeAttribute,
                                             int offset,
                                             proguard.classfile.instruction.VariableInstruction variableInstruction)
        指定者:
        visitVariableInstruction 在接口中 proguard.classfile.instruction.visitor.InstructionVisitor
      • visitConstantInstruction

        public void visitConstantInstruction​(proguard.classfile.Clazz clazz,
                                             proguard.classfile.Method method,
                                             proguard.classfile.attribute.CodeAttribute codeAttribute,
                                             int offset,
                                             proguard.classfile.instruction.ConstantInstruction constantInstruction)
        指定者:
        visitConstantInstruction 在接口中 proguard.classfile.instruction.visitor.InstructionVisitor
      • visitAnyMethodrefConstant

        public void visitAnyMethodrefConstant​(proguard.classfile.Clazz clazz,
                                              proguard.classfile.constant.AnyMethodrefConstant anyMethodrefConstant)
        指定者:
        visitAnyMethodrefConstant 在接口中 proguard.classfile.constant.visitor.ConstantVisitor
      • visitAnyMember

        public void visitAnyMember​(proguard.classfile.Clazz Clazz,
                                   proguard.classfile.Member member)
        指定者:
        visitAnyMember 在接口中 proguard.classfile.visitor.MemberVisitor
      • visitProgramMethod

        public void visitProgramMethod​(proguard.classfile.ProgramClass programClass,
                                       proguard.classfile.ProgramMethod programMethod)
        指定者:
        visitProgramMethod 在接口中 proguard.classfile.visitor.MemberVisitor
      • visitLibraryMethod

        public void visitLibraryMethod​(proguard.classfile.LibraryClass libraryClass,
                                       proguard.classfile.LibraryMethod libraryMethod)
        指定者:
        visitLibraryMethod 在接口中 proguard.classfile.visitor.MemberVisitor
      • visitLineNumberInfo

        public void visitLineNumberInfo​(proguard.classfile.Clazz clazz,
                                        proguard.classfile.Method method,
                                        proguard.classfile.attribute.CodeAttribute codeAttribute,
                                        proguard.classfile.attribute.LineNumberInfo lineNumberInfo)
        指定者:
        visitLineNumberInfo 在接口中 proguard.classfile.attribute.visitor.LineNumberInfoVisitor
      • visitExceptionInfo

        public void visitExceptionInfo​(proguard.classfile.Clazz clazz,
                                       proguard.classfile.Method method,
                                       proguard.classfile.attribute.CodeAttribute codeAttribute,
                                       proguard.classfile.attribute.ExceptionInfo exceptionInfo)
        指定者:
        visitExceptionInfo 在接口中 proguard.classfile.attribute.visitor.ExceptionInfoVisitor
      • shouldInline

        protected abstract boolean shouldInline​(proguard.classfile.Clazz clazz,
                                                proguard.classfile.Method method,
                                                proguard.classfile.attribute.CodeAttribute codeAttribute)
        Indicates whether this method should be inlined. Subclasses can overwrite this method to change which methods are inlined. Note that the method will always still first be tested on whether they can technically be inlined (see `visitProgramMethod`) and only then will this method be called to decide whether to actually inline or not.
        参数:
        method - The method that is eligible for inlining.