public class ClassFile extends java.lang.Object implements WritableEntry
Modifier and Type | Field and Description |
---|---|
private int |
accessFlags |
private java.util.List<Attribute> |
attributes |
private byte[] |
bytecode |
private ConstPool |
constPool |
private static java.lang.reflect.Method |
defineClass1 |
private static java.lang.reflect.Method |
defineClass2 |
private java.util.Set<ClassField> |
fields |
private java.util.List<java.lang.String> |
interfaces |
private java.util.Set<ClassMethod> |
methods |
private java.lang.String |
name |
private AnnotationsAttribute |
runtimeVisibleAnnotationsAttribute |
private java.lang.String |
superclass |
private int |
version |
Constructor and Description |
---|
ClassFile(java.lang.String name,
int accessFlags,
java.lang.String superclass,
java.lang.String... interfaces) |
ClassFile(java.lang.String name,
java.lang.String superclass,
java.lang.String... interfaces) |
Modifier and Type | Method and Description |
---|---|
ClassMethod |
addConstructor(java.lang.reflect.Constructor<?> method)
Adds a constructor with the same signiture as the given constrcutor, including exception types
|
ClassField |
addField(java.lang.reflect.Field field) |
ClassField |
addField(int accessFlags,
java.lang.String name,
java.lang.Class<?> type) |
ClassField |
addField(int accessFlags,
java.lang.String name,
java.lang.Class<?> type,
java.lang.String genericSignature) |
ClassField |
addField(int accessFlags,
java.lang.String name,
java.lang.String descriptor)
Adds a field with the given name and descriptor.
|
ClassField |
addField(int accessFlags,
java.lang.String name,
java.lang.String descriptor,
java.lang.String signature) |
void |
addInterface(java.lang.String iface) |
ClassMethod |
addMethod(int accessFlags,
java.lang.String name,
java.lang.String returnType,
java.lang.String... parameters) |
ClassMethod |
addMethod(java.lang.reflect.Method method)
Adds a method with the same signiture as the given method, including exception types
|
java.lang.Class<?> |
define(java.lang.ClassLoader loader) |
java.lang.Class<?> |
define(java.lang.ClassLoader loader,
java.security.ProtectionDomain domain)
Definines the class using the given ClassLoader and ProtectionDomain
|
ConstPool |
getConstPool() |
java.lang.String |
getDescriptor()
returns the type descriptor for the class
|
java.util.Set<ClassField> |
getFields() |
java.util.List<java.lang.String> |
getInterfaces() |
java.util.Set<ClassMethod> |
getMethods() |
java.lang.String |
getName()
Returns the generated class name
|
AnnotationsAttribute |
getRuntimeVisibleAnnotationsAttribute() |
java.lang.String |
getSuperclass() |
byte[] |
toBytecode() |
void |
write(ByteArrayDataOutputStream stream) |
private final java.lang.String name
private final java.lang.String superclass
private final int accessFlags
private final int version
private final ConstPool constPool
private final java.util.List<java.lang.String> interfaces
private final java.util.Set<ClassField> fields
private final java.util.Set<ClassMethod> methods
private byte[] bytecode
private final java.util.List<Attribute> attributes
private final AnnotationsAttribute runtimeVisibleAnnotationsAttribute
private static java.lang.reflect.Method defineClass1
private static java.lang.reflect.Method defineClass2
public ClassFile(java.lang.String name, java.lang.String superclass, java.lang.String... interfaces)
public ClassFile(java.lang.String name, int accessFlags, java.lang.String superclass, java.lang.String... interfaces)
public void addInterface(java.lang.String iface)
public ClassField addField(int accessFlags, java.lang.String name, java.lang.String descriptor)
public ClassField addField(int accessFlags, java.lang.String name, java.lang.String descriptor, java.lang.String signature)
public ClassField addField(int accessFlags, java.lang.String name, java.lang.Class<?> type)
public ClassField addField(int accessFlags, java.lang.String name, java.lang.Class<?> type, java.lang.String genericSignature)
public ClassField addField(java.lang.reflect.Field field)
public ClassMethod addMethod(int accessFlags, java.lang.String name, java.lang.String returnType, java.lang.String... parameters)
public ClassMethod addMethod(java.lang.reflect.Method method)
The new method will have the same modifier as the original method, except that the abstract and native flags will be stripped.
TODO: annotations and signiture attribute
public ClassMethod addConstructor(java.lang.reflect.Constructor<?> method)
TODO: annotations and signiture attribute
public void write(ByteArrayDataOutputStream stream) throws java.io.IOException
write
in interface WritableEntry
java.io.IOException
public java.lang.Class<?> define(java.lang.ClassLoader loader)
public java.lang.Class<?> define(java.lang.ClassLoader loader, java.security.ProtectionDomain domain)
public byte[] toBytecode()
public ConstPool getConstPool()
public java.lang.String getDescriptor()
public AnnotationsAttribute getRuntimeVisibleAnnotationsAttribute()
public java.lang.String getName()
public java.lang.String getSuperclass()
public java.util.List<java.lang.String> getInterfaces()
public java.util.Set<ClassField> getFields()
public java.util.Set<ClassMethod> getMethods()