proguard.optimize.peephole
Class ClassMerger

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.optimize.peephole.ClassMerger
All Implemented Interfaces:
ConstantVisitor, ClassVisitor

public class ClassMerger
extends SimplifiedVisitor
implements ClassVisitor, ConstantVisitor

This ClassVisitor inlines the classes that it visits in a given target class, whenever possible.

See Also:
RetargetedInnerClassAttributeRemover, TargetClassChanger, ClassReferenceFixer, MemberReferenceFixer, AccessFixer

Constructor Summary
ClassMerger(ProgramClass targetClass, boolean allowAccessModification, boolean mergeInterfacesAggressively)
          Creates a new ClassMerger that will merge classes into the given target class.
ClassMerger(ProgramClass targetClass, boolean allowAccessModification, boolean mergeInterfacesAggressively, ClassVisitor extraClassVisitor)
          Creates a new ClassMerger that will merge classes into the given target class.
 
Method Summary
static Clazz getTargetClass(Clazz clazz)
           
static void setTargetClass(Clazz clazz, Clazz targetClass)
           
 void visitProgramClass(ProgramClass programClass)
           
 void visitProgramClass0(ProgramClass programClass)
           
 
Methods inherited from class proguard.classfile.util.SimplifiedVisitor
visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotation, visitAnnotationDefaultAttribute, visitAnnotationElementValue, visitAnyAnnotationsAttribute, visitAnyAttribute, visitAnyClass, visitAnyConstant, visitAnyElementValue, visitAnyInstruction, visitAnyMember, visitAnyMethodrefConstant, visitAnyParameterAnnotationsAttribute, visitAnyRefConstant, visitAnyStackMapFrame, visitAnySwitchInstruction, visitAnyVerificationType, visitArrayElementValue, visitBranchInstruction, 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, 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.visitor.ClassVisitor
visitLibraryClass
 
Methods inherited from interface proguard.classfile.constant.visitor.ConstantVisitor
visitClassConstant, visitDoubleConstant, visitFieldrefConstant, visitFloatConstant, visitIntegerConstant, visitInterfaceMethodrefConstant, visitLongConstant, visitMethodrefConstant, visitNameAndTypeConstant, visitStringConstant, visitUtf8Constant
 

Constructor Detail

ClassMerger

public ClassMerger(ProgramClass targetClass,
                   boolean allowAccessModification,
                   boolean mergeInterfacesAggressively)
Creates a new ClassMerger that will merge classes into the given target class.

Parameters:
targetClass - the class into which all visited classes will be merged.
allowAccessModification - specifies whether the access modifiers of classes can be changed in order to merge them.
mergeInterfacesAggressively - specifies whether interfaces may be merged aggressively.

ClassMerger

public ClassMerger(ProgramClass targetClass,
                   boolean allowAccessModification,
                   boolean mergeInterfacesAggressively,
                   ClassVisitor extraClassVisitor)
Creates a new ClassMerger that will merge classes into the given target class.

Parameters:
targetClass - the class into which all visited classes will be merged.
allowAccessModification - specifies whether the access modifiers of classes can be changed in order to merge them.
mergeInterfacesAggressively - specifies whether interfaces may be merged aggressively.
extraClassVisitor - an optional extra visitor for all merged classes.
Method Detail

visitProgramClass

public void visitProgramClass(ProgramClass programClass)
Specified by:
visitProgramClass in interface ClassVisitor
Overrides:
visitProgramClass in class SimplifiedVisitor

visitProgramClass0

public void visitProgramClass0(ProgramClass programClass)

setTargetClass

public static void setTargetClass(Clazz clazz,
                                  Clazz targetClass)

getTargetClass

public static Clazz getTargetClass(Clazz clazz)