public class StaticInitMerger extends ClassVisitor
ClassVisitor that merges <clinit> methods into a single one. All the existing
<clinit> methods are renamed, and a new one is created, which calls all the renamed
methods.| Modifier and Type | Field and Description |
|---|---|
private MethodVisitor |
mergedClinitVisitor
The MethodVisitor for the merged <clinit> method.
|
private int |
numClinitMethods
The number of <clinit> methods visited so far.
|
private java.lang.String |
owner
The internal name of the visited class.
|
private java.lang.String |
renamedClinitMethodPrefix
The prefix to use to rename the existing <clinit> methods.
|
api, cv| Modifier | Constructor and Description |
|---|---|
protected |
StaticInitMerger(int api,
java.lang.String prefix,
ClassVisitor classVisitor)
Constructs a new
StaticInitMerger. |
|
StaticInitMerger(java.lang.String prefix,
ClassVisitor classVisitor)
Constructs a new
StaticInitMerger. |
| Modifier and Type | Method and Description |
|---|---|
void |
visit(int version,
int access,
java.lang.String name,
java.lang.String signature,
java.lang.String superName,
java.lang.String[] interfaces)
Visits the header of the class.
|
void |
visitEnd()
Visits the end of the class.
|
MethodVisitor |
visitMethod(int access,
java.lang.String name,
java.lang.String descriptor,
java.lang.String signature,
java.lang.String[] exceptions)
Visits a method of the class.
|
visitAnnotation, visitAttribute, visitField, visitInnerClass, visitModule, visitNestHostExperimental, visitNestMemberExperimental, visitOuterClass, visitSource, visitTypeAnnotationprivate java.lang.String owner
private final java.lang.String renamedClinitMethodPrefix
private int numClinitMethods
private MethodVisitor mergedClinitVisitor
public StaticInitMerger(java.lang.String prefix,
ClassVisitor classVisitor)
StaticInitMerger. Subclasses must not use this constructor.
Instead, they must use the StaticInitMerger(int, String, ClassVisitor) version.prefix - the prefix to use to rename the existing <clinit> methods.classVisitor - the class visitor to which this visitor must delegate method calls. May be
null.protected StaticInitMerger(int api,
java.lang.String prefix,
ClassVisitor classVisitor)
StaticInitMerger.api - the ASM API version implemented by this visitor. Must be one of Opcodes.ASM4, Opcodes.ASM5 or Opcodes.ASM6.prefix - the prefix to use to rename the existing <clinit> methods.classVisitor - the class visitor to which this visitor must delegate method calls. May be
null.public void visit(int version,
int access,
java.lang.String name,
java.lang.String signature,
java.lang.String superName,
java.lang.String[] interfaces)
ClassVisitorvisit in class ClassVisitorversion - the class version. The minor version is stored in the 16 most significant bits,
and the major version in the 16 least significant bits.access - the class's access flags (see Opcodes). This parameter also indicates if
the class is deprecated.name - the internal name of the class (see Type.getInternalName()).signature - the signature of this class. May be null if the class is not a
generic one, and does not extend or implement generic classes or interfaces.superName - the internal of name of the super class (see Type.getInternalName()).
For interfaces, the super class is Object. May be null, but only for the
Object class.interfaces - the internal names of the class's interfaces (see Type.getInternalName()). May be null.public MethodVisitor visitMethod(int access, java.lang.String name, java.lang.String descriptor, java.lang.String signature, java.lang.String[] exceptions)
ClassVisitorMethodVisitor
instance (or null) each time it is called, i.e., it should not return a previously
returned visitor.visitMethod in class ClassVisitoraccess - the method's access flags (see Opcodes). This parameter also indicates if
the method is synthetic and/or deprecated.name - the method's name.descriptor - the method's descriptor (see Type).signature - the method's signature. May be null if the method parameters, return
type and exceptions do not use generic types.exceptions - the internal names of the method's exception classes (see Type.getInternalName()). May be null.public void visitEnd()
ClassVisitorvisitEnd in class ClassVisitor