ProGuard

proguard.optimize
Class SideEffectInstructionChecker

java.lang.Object
  extended byproguard.optimize.SideEffectInstructionChecker
All Implemented Interfaces:
CpInfoVisitor, InstructionVisitor, MemberInfoVisitor

public class SideEffectInstructionChecker
extends Object
implements InstructionVisitor, CpInfoVisitor, MemberInfoVisitor

This class can tell whether an instruction has any side effects. Return instructions can be included or not.

See Also:
WriteOnlyFieldMarker, NoSideEffectMethodMarker, SideEffectMethodMarker

Constructor Summary
SideEffectInstructionChecker(boolean includeReturnInstructions)
           
 
Method Summary
 boolean hasSideEffects(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, Instruction instruction)
           
 void visitBranchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, BranchInstruction branchInstruction)
           
 void visitClassCpInfo(ClassFile classFile, ClassCpInfo classCpInfo)
           
 void visitCpInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, CpInstruction cpInstruction)
           
 void visitDoubleCpInfo(ClassFile classFile, DoubleCpInfo doubleCpInfo)
           
 void visitFieldrefCpInfo(ClassFile classFile, FieldrefCpInfo fieldrefCpInfo)
           
 void visitFloatCpInfo(ClassFile classFile, FloatCpInfo floatCpInfo)
           
 void visitIntegerCpInfo(ClassFile classFile, IntegerCpInfo integerCpInfo)
           
 void visitInterfaceMethodrefCpInfo(ClassFile classFile, InterfaceMethodrefCpInfo interfaceMethodrefCpInfo)
           
 void visitLibraryFieldInfo(LibraryClassFile libraryClassFile, LibraryFieldInfo libraryFieldInfo)
           
 void visitLibraryMethodInfo(LibraryClassFile libraryClassFile, LibraryMethodInfo libraryMethodInfo)
           
 void visitLongCpInfo(ClassFile classFile, LongCpInfo longCpInfo)
           
 void visitLookUpSwitchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, LookUpSwitchInstruction lookUpSwitchInstruction)
           
 void visitMethodrefCpInfo(ClassFile classFile, MethodrefCpInfo methodrefCpInfo)
           
 void visitNameAndTypeCpInfo(ClassFile classFile, NameAndTypeCpInfo nameAndTypeCpInfo)
           
 void visitProgramFieldInfo(ProgramClassFile programClassFile, ProgramFieldInfo programFieldInfo)
           
 void visitProgramMethodInfo(ProgramClassFile programClassFile, ProgramMethodInfo programMethodInfo)
           
 void visitSimpleInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, SimpleInstruction simpleInstruction)
           
 void visitStringCpInfo(ClassFile classFile, StringCpInfo stringCpInfo)
           
 void visitTableSwitchInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, TableSwitchInstruction tableSwitchInstruction)
           
 void visitUtf8CpInfo(ClassFile classFile, Utf8CpInfo utf8CpInfo)
           
 void visitVariableInstruction(ClassFile classFile, MethodInfo methodInfo, CodeAttrInfo codeAttrInfo, int offset, VariableInstruction variableInstruction)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SideEffectInstructionChecker

public SideEffectInstructionChecker(boolean includeReturnInstructions)
Method Detail

hasSideEffects

public boolean hasSideEffects(ClassFile classFile,
                              MethodInfo methodInfo,
                              CodeAttrInfo codeAttrInfo,
                              int offset,
                              Instruction instruction)

visitBranchInstruction

public void visitBranchInstruction(ClassFile classFile,
                                   MethodInfo methodInfo,
                                   CodeAttrInfo codeAttrInfo,
                                   int offset,
                                   BranchInstruction branchInstruction)
Specified by:
visitBranchInstruction in interface InstructionVisitor

visitTableSwitchInstruction

public void visitTableSwitchInstruction(ClassFile classFile,
                                        MethodInfo methodInfo,
                                        CodeAttrInfo codeAttrInfo,
                                        int offset,
                                        TableSwitchInstruction tableSwitchInstruction)
Specified by:
visitTableSwitchInstruction in interface InstructionVisitor

visitLookUpSwitchInstruction

public void visitLookUpSwitchInstruction(ClassFile classFile,
                                         MethodInfo methodInfo,
                                         CodeAttrInfo codeAttrInfo,
                                         int offset,
                                         LookUpSwitchInstruction lookUpSwitchInstruction)
Specified by:
visitLookUpSwitchInstruction in interface InstructionVisitor

visitSimpleInstruction

public void visitSimpleInstruction(ClassFile classFile,
                                   MethodInfo methodInfo,
                                   CodeAttrInfo codeAttrInfo,
                                   int offset,
                                   SimpleInstruction simpleInstruction)
Specified by:
visitSimpleInstruction in interface InstructionVisitor

visitVariableInstruction

public void visitVariableInstruction(ClassFile classFile,
                                     MethodInfo methodInfo,
                                     CodeAttrInfo codeAttrInfo,
                                     int offset,
                                     VariableInstruction variableInstruction)
Specified by:
visitVariableInstruction in interface InstructionVisitor

visitCpInstruction

public void visitCpInstruction(ClassFile classFile,
                               MethodInfo methodInfo,
                               CodeAttrInfo codeAttrInfo,
                               int offset,
                               CpInstruction cpInstruction)
Specified by:
visitCpInstruction in interface InstructionVisitor

visitIntegerCpInfo

public void visitIntegerCpInfo(ClassFile classFile,
                               IntegerCpInfo integerCpInfo)
Specified by:
visitIntegerCpInfo in interface CpInfoVisitor

visitLongCpInfo

public void visitLongCpInfo(ClassFile classFile,
                            LongCpInfo longCpInfo)
Specified by:
visitLongCpInfo in interface CpInfoVisitor

visitFloatCpInfo

public void visitFloatCpInfo(ClassFile classFile,
                             FloatCpInfo floatCpInfo)
Specified by:
visitFloatCpInfo in interface CpInfoVisitor

visitDoubleCpInfo

public void visitDoubleCpInfo(ClassFile classFile,
                              DoubleCpInfo doubleCpInfo)
Specified by:
visitDoubleCpInfo in interface CpInfoVisitor

visitStringCpInfo

public void visitStringCpInfo(ClassFile classFile,
                              StringCpInfo stringCpInfo)
Specified by:
visitStringCpInfo in interface CpInfoVisitor

visitUtf8CpInfo

public void visitUtf8CpInfo(ClassFile classFile,
                            Utf8CpInfo utf8CpInfo)
Specified by:
visitUtf8CpInfo in interface CpInfoVisitor

visitClassCpInfo

public void visitClassCpInfo(ClassFile classFile,
                             ClassCpInfo classCpInfo)
Specified by:
visitClassCpInfo in interface CpInfoVisitor

visitNameAndTypeCpInfo

public void visitNameAndTypeCpInfo(ClassFile classFile,
                                   NameAndTypeCpInfo nameAndTypeCpInfo)
Specified by:
visitNameAndTypeCpInfo in interface CpInfoVisitor

visitFieldrefCpInfo

public void visitFieldrefCpInfo(ClassFile classFile,
                                FieldrefCpInfo fieldrefCpInfo)
Specified by:
visitFieldrefCpInfo in interface CpInfoVisitor

visitInterfaceMethodrefCpInfo

public void visitInterfaceMethodrefCpInfo(ClassFile classFile,
                                          InterfaceMethodrefCpInfo interfaceMethodrefCpInfo)
Specified by:
visitInterfaceMethodrefCpInfo in interface CpInfoVisitor

visitMethodrefCpInfo

public void visitMethodrefCpInfo(ClassFile classFile,
                                 MethodrefCpInfo methodrefCpInfo)
Specified by:
visitMethodrefCpInfo in interface CpInfoVisitor

visitProgramFieldInfo

public void visitProgramFieldInfo(ProgramClassFile programClassFile,
                                  ProgramFieldInfo programFieldInfo)
Specified by:
visitProgramFieldInfo in interface MemberInfoVisitor

visitProgramMethodInfo

public void visitProgramMethodInfo(ProgramClassFile programClassFile,
                                   ProgramMethodInfo programMethodInfo)
Specified by:
visitProgramMethodInfo in interface MemberInfoVisitor

visitLibraryFieldInfo

public void visitLibraryFieldInfo(LibraryClassFile libraryClassFile,
                                  LibraryFieldInfo libraryFieldInfo)
Specified by:
visitLibraryFieldInfo in interface MemberInfoVisitor

visitLibraryMethodInfo

public void visitLibraryMethodInfo(LibraryClassFile libraryClassFile,
                                   LibraryMethodInfo libraryMethodInfo)
Specified by:
visitLibraryMethodInfo in interface MemberInfoVisitor

ProGuard