proguard.optimize.peephole
Class GotoReturnReplacer

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.optimize.peephole.GotoReturnReplacer
All Implemented Interfaces:
InstructionVisitor

public class GotoReturnReplacer
extends SimplifiedVisitor
implements InstructionVisitor

This InstructionVisitor replaces unconditional branches to return instructions by these same return instructions.


Constructor Summary
GotoReturnReplacer(CodeAttributeEditor codeAttributeEditor)
          Creates a new GotoReturnReplacer.
GotoReturnReplacer(CodeAttributeEditor codeAttributeEditor, InstructionVisitor extraInstructionVisitor)
          Creates a new GotoReturnReplacer.
 
Method Summary
 void visitAnyInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, Instruction instruction)
          Visits any type of Instruction.
 void visitBranchInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, BranchInstruction branchInstruction)
           
 
Methods inherited from class proguard.classfile.util.SimplifiedVisitor
visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotationDefaultAttribute, visitAnnotationElementValue, visitAnyAnnotationsAttribute, visitAnyAttribute, visitAnyClass, visitAnyConstant, visitAnyElementValue, visitAnyMember, visitAnyMethodrefConstant, visitAnyParameterAnnotationsAttribute, visitAnyRefConstant, visitAnyStackMapFrame, visitAnySwitchInstruction, visitAnyVerificationType, visitArrayElementValue, visitClassConstant, visitClassElementValue, visitCodeAttribute, visitConstantElementValue, visitConstantInstruction, visitConstantValueAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDeprecatedAttribute, visitDoubleConstant, visitDoubleType, visitEnclosingMethodAttribute, visitEnumConstantElementValue, visitExceptionsAttribute, visitFieldrefConstant, visitFloatConstant, visitFloatType, visitFullFrame, visitInnerClassesAttribute, visitIntegerConstant, visitIntegerType, visitInterfaceMethodrefConstant, visitLessZeroFrame, visitLibraryClass, visitLibraryField, visitLibraryMember, visitLibraryMethod, visitLineNumberTableAttribute, visitLocalVariableTableAttribute, visitLocalVariableTypeTableAttribute, visitLongConstant, visitLongType, visitLookUpSwitchInstruction, visitMethodrefConstant, visitMoreZeroFrame, visitNameAndTypeConstant, visitNullType, visitObjectType, visitProgramClass, visitProgramField, visitProgramMember, visitProgramMethod, 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, visitVariableInstruction, 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.instruction.visitor.InstructionVisitor
visitConstantInstruction, visitLookUpSwitchInstruction, visitSimpleInstruction, visitTableSwitchInstruction, visitVariableInstruction
 

Constructor Detail

GotoReturnReplacer

public GotoReturnReplacer(CodeAttributeEditor codeAttributeEditor)
Creates a new GotoReturnReplacer.

Parameters:
codeAttributeEditor - a code editor that can be used for accumulating changes to the code.

GotoReturnReplacer

public GotoReturnReplacer(CodeAttributeEditor codeAttributeEditor,
                          InstructionVisitor extraInstructionVisitor)
Creates a new GotoReturnReplacer.

Parameters:
codeAttributeEditor - a code editor that can be used for accumulating changes to the code.
extraInstructionVisitor - an optional extra visitor for all replaced goto instructions.
Method Detail

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

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