proguard.optimize.info
Class ParameterUsageMarker

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.optimize.info.ParameterUsageMarker
All Implemented Interfaces:
AttributeVisitor, InstructionVisitor, MemberVisitor

public class ParameterUsageMarker
extends SimplifiedVisitor
implements MemberVisitor, AttributeVisitor, InstructionVisitor

This MemberVisitor counts the parameters and marks the used parameters of the methods that it visits. It also marks the 'this' parameters of methods that have hierarchies.


Constructor Summary
ParameterUsageMarker()
          Creates a new ParameterUsageMarker.
ParameterUsageMarker(boolean markThisParameter, boolean markAllParameters)
          Creates a new ParameterUsageMarker that optionally marks all parameters.
 
Method Summary
static int getParameterSize(Method method)
          Returns the total size of the parameters.
static long getUsedParameters(Method method)
          Returns which parameters are being used.
static boolean isParameterUsed(Method method, int variableIndex)
          Returns whether the given parameter is being used.
static void markParameterUsed(Method method, int variableIndex)
          Marks the given parameter as being used.
static void markUsedParameters(Method method, long usedParameters)
          Marks the given parameters as being used.
 void visitAnyAttribute(Clazz clazz, Attribute attribute)
          Visit any type of attribute.
 void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction)
          Visits any type of Instruction.
 void visitCodeAttribute(Clazz clazz, Method method, CodeAttribute codeAttribute)
           
 void visitLibraryMethod(LibraryClass libraryClass, LibraryMethod libraryMethod)
           
 void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
           
 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, visitAnyClass, visitAnyConstant, visitAnyElementValue, visitAnyMember, visitAnyMethodrefConstant, visitAnyParameterAnnotationsAttribute, visitAnyRefConstant, visitAnyStackMapFrame, visitAnySwitchInstruction, visitAnyVerificationType, visitArrayElementValue, visitBranchInstruction, visitClassConstant, visitClassElementValue, visitConstantElementValue, visitConstantInstruction, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDoubleConstant, visitDoubleType, visitEnclosingMethodAttribute, visitEnumConstantElementValue, visitExceptionsAttribute, visitFieldrefConstant, visitFloatConstant, visitFloatType, visitFullFrame, visitInnerClassesAttribute, visitIntegerConstant, visitIntegerType, visitInterfaceMethodrefConstant, visitLessZeroFrame, visitLibraryClass, visitLibraryField, visitLibraryMember, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitLongConstant, visitLongType, visitLookUpSwitchInstruction, visitMethodrefConstant, visitMoreZeroFrame, visitNameAndTypeConstant, visitNullType, visitObjectType, visitProgramClass, visitProgramField, visitProgramMember, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitSameOneFrame, visitSameZeroFrame, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSimpleInstruction, visitSourceDirAttribute, visitSourceFileAttribute, visitStackDoubleType, visitStackFloatType, visitStackIntegerType, visitStackLongType, visitStackMapAttribute, visitStackMapTableAttribute, visitStackNullType, visitStackObjectType, visitStackTopType, visitStackUninitializedThisType, visitStackUninitializedType, visitStringConstant, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitTableSwitchInstruction, visitTopType, visitUninitializedThisType, visitUninitializedType, visitUnknownAttribute, visitUtf8Constant, 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.visitor.MemberVisitor
visitLibraryField, visitProgramField
 
Methods inherited from interface proguard.classfile.attribute.visitor.AttributeVisitor
visitAnnotationDefaultAttribute, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitEnclosingMethodAttribute, visitExceptionsAttribute, visitInnerClassesAttribute, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleAnnotationsAttribute, visitRuntimeInvisibleParameterAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleAnnotationsAttribute, visitRuntimeVisibleParameterAnnotationsAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSignatureAttribute, visitSourceDirAttribute, visitSourceFileAttribute, visitStackMapAttribute, visitStackMapTableAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitSyntheticAttribute, visitUnknownAttribute
 
Methods inherited from interface proguard.classfile.instruction.visitor.InstructionVisitor
visitBranchInstruction, visitConstantInstruction, visitLookUpSwitchInstruction, visitSimpleInstruction, visitTableSwitchInstruction
 

Constructor Detail

ParameterUsageMarker

public ParameterUsageMarker()
Creates a new ParameterUsageMarker.


ParameterUsageMarker

public ParameterUsageMarker(boolean markThisParameter,
                            boolean markAllParameters)
Creates a new ParameterUsageMarker that optionally marks all parameters.

Parameters:
markThisParameter - specifies whether all 'this' parameters should be marked as being used.
markAllParameters - specifies whether all other parameters should be marked as being used.
Method Detail

visitProgramMethod

public void visitProgramMethod(ProgramClass programClass,
                               ProgramMethod programMethod)
Specified by:
visitProgramMethod in interface MemberVisitor
Overrides:
visitProgramMethod in class SimplifiedVisitor

visitLibraryMethod

public void visitLibraryMethod(LibraryClass libraryClass,
                               LibraryMethod libraryMethod)
Specified by:
visitLibraryMethod in interface MemberVisitor
Overrides:
visitLibraryMethod in class SimplifiedVisitor

visitAnyAttribute

public void visitAnyAttribute(Clazz clazz,
                              Attribute attribute)
Description copied from class: SimplifiedVisitor
Visit any type of attribute.

Overrides:
visitAnyAttribute in class SimplifiedVisitor

visitCodeAttribute

public void visitCodeAttribute(Clazz clazz,
                               Method method,
                               CodeAttribute codeAttribute)
Specified by:
visitCodeAttribute in interface AttributeVisitor
Overrides:
visitCodeAttribute in class SimplifiedVisitor

visitAnyInstruction

public void visitAnyInstruction(Clazz clazz,
                                Method method,
                                CodeAttribute codeAttribute,
                                int offset,
                                Instruction instruction)
Description copied from class: SimplifiedVisitor
Visits any type of Instruction.

Overrides:
visitAnyInstruction 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

getParameterSize

public static int getParameterSize(Method method)
Returns the total size of the parameters.


markParameterUsed

public static void markParameterUsed(Method method,
                                     int variableIndex)
Marks the given parameter as being used.


markUsedParameters

public static void markUsedParameters(Method method,
                                      long usedParameters)
Marks the given parameters as being used.


isParameterUsed

public static boolean isParameterUsed(Method method,
                                      int variableIndex)
Returns whether the given parameter is being used.


getUsedParameters

public static long getUsedParameters(Method method)
Returns which parameters are being used.