proguard.classfile.util
Class InstructionSequenceMatcher

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.classfile.util.InstructionSequenceMatcher
All Implemented Interfaces:
ConstantVisitor, InstructionVisitor

public class InstructionSequenceMatcher
extends SimplifiedVisitor
implements InstructionVisitor, ConstantVisitor

This InstructionVisitor checks whether a given pattern instruction sequence occurs in the instructions that are visited. The arguments of the instruction sequence can be wildcards that are matched.


Field Summary
static int A
           
static int B
           
static int C
           
static int D
           
static int X
           
static int Y
           
static int Z
           
 
Constructor Summary
InstructionSequenceMatcher(Constant[] patternConstants, Instruction[] patternInstructions)
          Creates a new InstructionSequenceMatcher.
 
Method Summary
 int instructionCount()
           
 boolean isMatching()
           
 boolean isMatchingAnyWildcards()
           
 int matchedArgument(int argument)
           
 int[] matchedArguments(int[] arguments)
           
 int matchedBranchOffset(int offset, int branchOffset)
           
 int matchedConstantIndex(int constantIndex)
           
 int matchedInstructionOffset(int index)
           
 int[] matchedJumpOffsets(int offset, int[] jumpOffsets)
           
 void reset()
          Starts matching from the first instruction again next time.
 void visitAnyRefConstant(Clazz clazz, RefConstant refConstant)
          Visits any type of RefConstant of the given class.
 void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction)
           
 void visitClassConstant(Clazz clazz, ClassConstant classConstant)
           
 void visitConstantInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, ConstantInstruction constantInstruction)
           
 void visitDoubleConstant(Clazz clazz, DoubleConstant doubleConstant)
           
 void visitFloatConstant(Clazz clazz, FloatConstant floatConstant)
           
 void visitIntegerConstant(Clazz clazz, IntegerConstant integerConstant)
           
 void visitLongConstant(Clazz clazz, LongConstant longConstant)
           
 void visitLookUpSwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, LookUpSwitchInstruction lookUpSwitchInstruction)
           
 void visitNameAndTypeConstant(Clazz clazz, NameAndTypeConstant nameAndTypeConstant)
           
 void visitSimpleInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, SimpleInstruction simpleInstruction)
           
 void visitStringConstant(Clazz clazz, StringConstant stringConstant)
           
 void visitTableSwitchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, TableSwitchInstruction tableSwitchInstruction)
           
 void visitUtf8Constant(Clazz clazz, Utf8Constant utf8Constant)
           
 void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
           
 
Methods inherited from class proguard.classfile.util.SimplifiedVisitor
visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotationDefaultAttribute, visitAnnotationElementValue, visitAnyAnnotationsAttribute, visitAnyAttribute, visitAnyClass, visitAnyConstant, visitAnyElementValue, visitAnyInstruction, visitAnyMember, visitAnyMethodrefConstant, visitAnyParameterAnnotationsAttribute, visitAnyStackMapFrame, visitAnySwitchInstruction, visitAnyVerificationType, visitArrayElementValue, visitClassElementValue, visitCodeAttribute, visitConstantElementValue, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDoubleType, visitEnclosingMethodAttribute, visitEnumConstantElementValue, visitExceptionsAttribute, visitFieldrefConstant, visitFloatType, visitFullFrame, visitInnerClassesAttribute, visitIntegerType, visitInterfaceMethodrefConstant, visitLessZeroFrame, visitLibraryClass, visitLibraryField, visitLibraryMember, visitLibraryMethod, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitLongType, visitMethodrefConstant, visitMoreZeroFrame, visitNullType, visitObjectType, visitProgramClass, visitProgramField, visitProgramMember, visitProgramMethod, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitSameOneFrame, visitSameZeroFrame, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSourceDirAttribute, visitSourceFileAttribute, visitStackDoubleType, visitStackFloatType, visitStackIntegerType, visitStackLongType, visitStackMapAttribute, visitStackMapTableAttribute, visitStackNullType, visitStackObjectType, visitStackTopType, visitStackUninitializedThisType, visitStackUninitializedType, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitTopType, visitUninitializedThisType, visitUninitializedType, visitUnknownAttribute, visitVariablesDoubleType, visitVariablesFloatType, visitVariablesIntegerType, visitVariablesLongType, visitVariablesNullType, visitVariablesObjectType, visitVariablesTopType, visitVariablesUninitializedThisType, visitVariablesUninitializedType
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface proguard.classfile.constant.visitor.ConstantVisitor
visitFieldrefConstant, visitInterfaceMethodrefConstant, visitMethodrefConstant
 

Field Detail

X

public static final int X
See Also:
Constant Field Values

Y

public static final int Y
See Also:
Constant Field Values

Z

public static final int Z
See Also:
Constant Field Values

A

public static final int A
See Also:
Constant Field Values

B

public static final int B
See Also:
Constant Field Values

C

public static final int C
See Also:
Constant Field Values

D

public static final int D
See Also:
Constant Field Values
Constructor Detail

InstructionSequenceMatcher

public InstructionSequenceMatcher(Constant[] patternConstants,
                                  Instruction[] patternInstructions)
Creates a new InstructionSequenceMatcher.

Parameters:
patternConstants - any constants referenced by the pattern instruction.
patternInstructions - the pattern instruction sequence.
Method Detail

reset

public void reset()
Starts matching from the first instruction again next time.


isMatching

public boolean isMatching()

isMatchingAnyWildcards

public boolean isMatchingAnyWildcards()

instructionCount

public int instructionCount()

matchedInstructionOffset

public int matchedInstructionOffset(int index)

matchedArgument

public int matchedArgument(int argument)

matchedArguments

public int[] matchedArguments(int[] arguments)

matchedConstantIndex

public int matchedConstantIndex(int constantIndex)

matchedBranchOffset

public int matchedBranchOffset(int offset,
                               int branchOffset)

matchedJumpOffsets

public int[] matchedJumpOffsets(int offset,
                                int[] jumpOffsets)

visitSimpleInstruction

public void visitSimpleInstruction(Clazz clazz,
                                   Method method,
                                   CodeAttribute codeAttribute,
                                   int offset,
                                   SimpleInstruction simpleInstruction)
Specified by:
visitSimpleInstruction in interface InstructionVisitor
Overrides:
visitSimpleInstruction in class SimplifiedVisitor

visitVariableInstruction

public void visitVariableInstruction(Clazz clazz,
                                     Method method,
                                     CodeAttribute codeAttribute,
                                     int offset,
                                     VariableInstruction variableInstruction)
Specified by:
visitVariableInstruction in interface InstructionVisitor
Overrides:
visitVariableInstruction in class SimplifiedVisitor

visitConstantInstruction

public void visitConstantInstruction(Clazz clazz,
                                     Method method,
                                     CodeAttribute codeAttribute,
                                     int offset,
                                     ConstantInstruction constantInstruction)
Specified by:
visitConstantInstruction in interface InstructionVisitor
Overrides:
visitConstantInstruction in class SimplifiedVisitor

visitBranchInstruction

public void visitBranchInstruction(Clazz clazz,
                                   Method method,
                                   CodeAttribute codeAttribute,
                                   int offset,
                                   BranchInstruction branchInstruction)
Specified by:
visitBranchInstruction in interface InstructionVisitor
Overrides:
visitBranchInstruction in class SimplifiedVisitor

visitTableSwitchInstruction

public void visitTableSwitchInstruction(Clazz clazz,
                                        Method method,
                                        CodeAttribute codeAttribute,
                                        int offset,
                                        TableSwitchInstruction tableSwitchInstruction)
Specified by:
visitTableSwitchInstruction in interface InstructionVisitor
Overrides:
visitTableSwitchInstruction in class SimplifiedVisitor

visitLookUpSwitchInstruction

public void visitLookUpSwitchInstruction(Clazz clazz,
                                         Method method,
                                         CodeAttribute codeAttribute,
                                         int offset,
                                         LookUpSwitchInstruction lookUpSwitchInstruction)
Specified by:
visitLookUpSwitchInstruction in interface InstructionVisitor
Overrides:
visitLookUpSwitchInstruction in class SimplifiedVisitor

visitIntegerConstant

public void visitIntegerConstant(Clazz clazz,
                                 IntegerConstant integerConstant)
Specified by:
visitIntegerConstant in interface ConstantVisitor
Overrides:
visitIntegerConstant in class SimplifiedVisitor

visitLongConstant

public void visitLongConstant(Clazz clazz,
                              LongConstant longConstant)
Specified by:
visitLongConstant in interface ConstantVisitor
Overrides:
visitLongConstant in class SimplifiedVisitor

visitFloatConstant

public void visitFloatConstant(Clazz clazz,
                               FloatConstant floatConstant)
Specified by:
visitFloatConstant in interface ConstantVisitor
Overrides:
visitFloatConstant in class SimplifiedVisitor

visitDoubleConstant

public void visitDoubleConstant(Clazz clazz,
                                DoubleConstant doubleConstant)
Specified by:
visitDoubleConstant in interface ConstantVisitor
Overrides:
visitDoubleConstant in class SimplifiedVisitor

visitStringConstant

public void visitStringConstant(Clazz clazz,
                                StringConstant stringConstant)
Specified by:
visitStringConstant in interface ConstantVisitor
Overrides:
visitStringConstant in class SimplifiedVisitor

visitUtf8Constant

public void visitUtf8Constant(Clazz clazz,
                              Utf8Constant utf8Constant)
Specified by:
visitUtf8Constant in interface ConstantVisitor
Overrides:
visitUtf8Constant in class SimplifiedVisitor

visitAnyRefConstant

public void visitAnyRefConstant(Clazz clazz,
                                RefConstant refConstant)
Description copied from class: SimplifiedVisitor
Visits any type of RefConstant of the given class.

Overrides:
visitAnyRefConstant in class SimplifiedVisitor

visitClassConstant

public void visitClassConstant(Clazz clazz,
                               ClassConstant classConstant)
Specified by:
visitClassConstant in interface ConstantVisitor
Overrides:
visitClassConstant in class SimplifiedVisitor

visitNameAndTypeConstant

public void visitNameAndTypeConstant(Clazz clazz,
                                     NameAndTypeConstant nameAndTypeConstant)
Specified by:
visitNameAndTypeConstant in interface ConstantVisitor
Overrides:
visitNameAndTypeConstant in class SimplifiedVisitor