类 SideEffectInstructionChecker

  • 所有已实现的接口:
    proguard.classfile.constant.visitor.ConstantVisitor, proguard.classfile.instruction.visitor.InstructionVisitor, proguard.classfile.visitor.MemberVisitor

    public class SideEffectInstructionChecker
    extends java.lang.Object
    implements proguard.classfile.instruction.visitor.InstructionVisitor, proguard.classfile.constant.visitor.ConstantVisitor, proguard.classfile.visitor.MemberVisitor
    This class can tell whether an instruction has any side effects. This includes invoking methods that have side effects, writing to fields that are not write-only, and throwing exceptions. Return instructions and array store instructions can be included or not. With the environment setting "optimize.conservatively", it also accounts for all possible NullPointerExceptions, ArrayIndexOutOfBoundExceptions, etc., which are typically accidental, not intentional.
    另请参阅:
    ReadWriteFieldMarker, SideEffectClassMarker, NoSideEffectMethodMarker, SideEffectMethodMarker
    • 构造器概要

      构造器 
      构造器 说明
      SideEffectInstructionChecker​(boolean includeReturnInstructions, boolean includeArrayStoreInstructions, boolean includeBuiltInExceptions)
      Creates a new SideEffectInstructionChecker
    • 方法概要

      所有方法 实例方法 具体方法 
      修饰符和类型 方法 说明
      boolean hasSideEffects​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.Instruction instruction)  
      void visitAnyInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.Instruction instruction)  
      void visitAnyMethodrefConstant​(proguard.classfile.Clazz clazz, proguard.classfile.constant.AnyMethodrefConstant anyMethodrefConstant)  
      void visitBranchInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.BranchInstruction branchInstruction)  
      void visitConstantInstruction​(proguard.classfile.Clazz clazz, proguard.classfile.Method method, proguard.classfile.attribute.CodeAttribute codeAttribute, int offset, proguard.classfile.instruction.ConstantInstruction constantInstruction)  
      void visitFieldrefConstant​(proguard.classfile.Clazz clazz, proguard.classfile.constant.FieldrefConstant fieldrefConstant)  
      void visitInvokeDynamicConstant​(proguard.classfile.Clazz clazz, proguard.classfile.constant.InvokeDynamicConstant invokeDynamicConstant)  
      void visitLibraryField​(proguard.classfile.LibraryClass libraryClass, proguard.classfile.LibraryField libraryField)  
      void visitLibraryMethod​(proguard.classfile.LibraryClass libraryClass, proguard.classfile.LibraryMethod libraryMethod)  
      void visitProgramField​(proguard.classfile.ProgramClass programClass, proguard.classfile.ProgramField programField)  
      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.constant.visitor.ConstantVisitor

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

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

        visitAnyMember, visitLibraryMember, visitProgramMember
    • 构造器详细资料

      • SideEffectInstructionChecker

        public SideEffectInstructionChecker​(boolean includeReturnInstructions,
                                            boolean includeArrayStoreInstructions,
                                            boolean includeBuiltInExceptions)
        Creates a new SideEffectInstructionChecker
        参数:
        includeReturnInstructions - specifies whether return instructions count as side effects.
        includeArrayStoreInstructions - specifies whether storing values in arrays counts as side effects.
        includeBuiltInExceptions - specifies whether built-in exceptions count as side effects (e.g. calling getfield on null object reference)
    • 方法详细资料

      • hasSideEffects

        public boolean hasSideEffects​(proguard.classfile.Clazz clazz,
                                      proguard.classfile.Method method,
                                      proguard.classfile.attribute.CodeAttribute codeAttribute,
                                      int offset,
                                      proguard.classfile.instruction.Instruction instruction)
      • 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
      • visitBranchInstruction

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

        public void visitInvokeDynamicConstant​(proguard.classfile.Clazz clazz,
                                               proguard.classfile.constant.InvokeDynamicConstant invokeDynamicConstant)
        指定者:
        visitInvokeDynamicConstant 在接口中 proguard.classfile.constant.visitor.ConstantVisitor
      • visitFieldrefConstant

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

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

        public void visitProgramField​(proguard.classfile.ProgramClass programClass,
                                      proguard.classfile.ProgramField programField)
        指定者:
        visitProgramField 在接口中 proguard.classfile.visitor.MemberVisitor
      • visitProgramMethod

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

        public void visitLibraryField​(proguard.classfile.LibraryClass libraryClass,
                                      proguard.classfile.LibraryField libraryField)
        指定者:
        visitLibraryField 在接口中 proguard.classfile.visitor.MemberVisitor
      • visitLibraryMethod

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