proguard.optimize.info
Class SingleImplementationMarker

java.lang.Object
  extended by proguard.classfile.util.SimplifiedVisitor
      extended by proguard.optimize.info.SingleImplementationMarker
All Implemented Interfaces:
ClassVisitor

public class SingleImplementationMarker
extends SimplifiedVisitor
implements ClassVisitor

This ClassVisitor investigates all classes that it visits to see whether they have/are the sole (non-abstract) implementation of an interface. It may already modify the access of the single implementing class to match the access of the interface.


Constructor Summary
SingleImplementationMarker(boolean allowAccessModification)
          Creates a new SingleImplementationMarker.
SingleImplementationMarker(boolean allowAccessModification, ClassVisitor extraClassVisitor)
          Creates a new SingleImplementationMarker.
 
Method Summary
static void markSingleImplementation(VisitorAccepter visitorAccepter, Clazz singleImplementation)
           
static Clazz singleImplementation(VisitorAccepter visitorAccepter)
           
 void visitProgramClass(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
 

Constructor Detail

SingleImplementationMarker

public SingleImplementationMarker(boolean allowAccessModification)
Creates a new SingleImplementationMarker.

Parameters:
allowAccessModification - indicates whether the access modifiers of a class can be changed in order to inline it.

SingleImplementationMarker

public SingleImplementationMarker(boolean allowAccessModification,
                                  ClassVisitor extraClassVisitor)
Creates a new SingleImplementationMarker.

Parameters:
allowAccessModification - indicates whether the access modifiers of a class can be changed in order to inline it.
extraClassVisitor - an optional extra visitor for all inlinable interfaces.
Method Detail

visitProgramClass

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

markSingleImplementation

public static void markSingleImplementation(VisitorAccepter visitorAccepter,
                                            Clazz singleImplementation)

singleImplementation

public static Clazz singleImplementation(VisitorAccepter visitorAccepter)