public final class InnerClasses extends Object
ClassVisitor.visitInnerClass(String, String, String, int) to ensure that they are registered
correctly.| Constructor and Description |
|---|
InnerClasses(TypeInfo outer) |
| Modifier and Type | Method and Description |
|---|---|
void |
add(ClassData classData)
Adds the data for an inner class.
|
com.google.common.collect.ImmutableList<ClassData> |
getInnerClassData()
Returns all the
ClassData for every InnerClass registered. |
void |
registerAllInnerClasses(org.objectweb.asm.ClassVisitor visitor)
Registers all inner classes to the given outer class.
|
void |
registerAsInnerClass(org.objectweb.asm.ClassVisitor visitor,
TypeInfo innerClass)
Registers this factory as an inner class on the given class writer.
|
TypeInfo |
registerInnerClass(String simpleName,
int accessModifiers)
Register the given name as an inner class with the given access modifiers.
|
TypeInfo |
registerInnerClassWithGeneratedName(String simpleName,
int accessModifiers)
Register the name (or a simpl mangling of it) as an inner class with the given access
modifiers.
|
public InnerClasses(TypeInfo outer)
public com.google.common.collect.ImmutableList<ClassData> getInnerClassData()
ClassData for every InnerClass registered.public TypeInfo registerInnerClass(String simpleName, int accessModifiers)
TypeInfo with the full class namepublic TypeInfo registerInnerClassWithGeneratedName(String simpleName, int accessModifiers)
TypeInfo with the full (possibly mangled) class namepublic void add(ClassData classData)
IllegalArgumentException - if the class wasn't previous registered via registerInnerClass(String, int) or registerInnerClassWithGeneratedName(String,
int).public void registerAsInnerClass(org.objectweb.asm.ClassVisitor visitor,
TypeInfo innerClass)
Registering an inner class is confusing. The inner class needs to call this and so does the outer class. Confirmed by running ASMIfier. Also, failure to call visitInnerClass on both classes either breaks reflective apis (like class.getSimpleName()/getEnclosingClass), or causes verifier errors (like IncompatibleClassChangeError).
public void registerAllInnerClasses(org.objectweb.asm.ClassVisitor visitor)