public final class ClassDef extends java.lang.Object implements java.lang.Cloneable, IAccessFlags, IClassFormatOutput
ClassDefParser
produces from bytecode. Most elements are either settable or extendible.
This class also implements IClassFormatOutput
and works with ClassWriter
to produce
bytecode without an external compiler.MT-safety: this class and all interfaces used by it are not safe for access from multiple concurrent threads.
Modifier and Type | Class and Description |
---|---|
private static class |
ClassDef.ConstructorDescriptor |
private static class |
ClassDef.FieldDescriptor |
private static class |
ClassDef.MethodDescriptor |
Modifier and Type | Field and Description |
---|---|
private static boolean |
DEBUG_SUID |
private int |
m_access_flags |
private IAttributeCollection |
m_attributes |
private IConstantCollection |
m_constants |
private long |
m_declaredSUID |
private IFieldCollection |
m_fields |
private IInterfaceCollection |
m_interfaces |
private long |
m_magic |
private IMethodCollection |
m_methods |
private int |
m_super_class_index |
private int |
m_this_class_index |
private int[] |
m_version |
ACC_ABSTRACT, ACC_BRIDGE, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ALL_ACC, ALL_ACC_NAMES
Constructor and Description |
---|
ClassDef() |
Modifier and Type | Method and Description |
---|---|
void |
accept(IClassDefVisitor visitor,
java.lang.Object ctx) |
int |
addClassref(java.lang.String classJVMName) |
int |
addCONSTANT_Utf8(java.lang.String value,
boolean keepUnique) |
int |
addField(java.lang.String name,
java.lang.String descriptor,
int access_flags)
Adds a new declared field to this class [with no attributes]
|
int |
addField(java.lang.String name,
java.lang.String descriptor,
int access_flags,
IAttributeCollection attributes)
Adds a new declared field to this class [with given attributes]
|
int |
addFieldref(Field_info field)
Adds a reference to a field declared by this class.
|
int |
addFieldref(int offset)
Adds a reference to a field declared by this class.
|
int |
addMethod(Method_info method) |
int |
addNameType(java.lang.String name,
java.lang.String typeDescriptor) |
int |
addStringConstant(java.lang.String value) |
java.lang.Object |
clone()
Performs a deep copy.
|
long |
computeSUID(boolean skipCLINIT)
This follows the spec at http://java.sun.com/j2se/1.4.1/docs/guide/serialization/spec/class.doc6.html#4100
as well as undocumented hacks used by Sun's 1.4.2 J2SDK
|
int |
getAccessFlags() |
IAttributeCollection |
getAttributes() |
IConstantCollection |
getConstants() |
long |
getDeclaredSUID() |
IFieldCollection |
getFields() |
int[] |
getFields(java.lang.String name) |
IInterfaceCollection |
getInterfaces() |
long |
getMagic() |
IMethodCollection |
getMethods() |
int[] |
getMethods(java.lang.String name) |
java.lang.String |
getName() |
CONSTANT_Class_info |
getSuperClass() |
int |
getSuperClassIndex() |
CONSTANT_Class_info |
getThisClass() |
int |
getThisClassIndex() |
int[] |
getVersion() |
boolean |
isInterface() |
boolean |
isNested(int[] nestedAccessFlags) |
boolean |
isSynthetic() |
Method_info |
newEmptyMethod(java.lang.String name,
java.lang.String descriptor,
int access_flags) |
void |
setAccessFlags(int flags) |
void |
setDeclaredSUID(long suid) |
void |
setMagic(long magic) |
void |
setSuperClassIndex(int super_class_index) |
void |
setThisClassIndex(int this_class_index) |
void |
setVersion(int[] version) |
void |
writeInClassFormat(UDataOutputStream out) |
private long m_magic
private int[] m_version
private int m_access_flags
private int m_this_class_index
private int m_super_class_index
private IConstantCollection m_constants
private IInterfaceCollection m_interfaces
private IFieldCollection m_fields
private IMethodCollection m_methods
private IAttributeCollection m_attributes
private long m_declaredSUID
private static final boolean DEBUG_SUID
public void accept(IClassDefVisitor visitor, java.lang.Object ctx)
public long getMagic()
public void setMagic(long magic)
public int[] getVersion()
public void setVersion(int[] version)
public final void setDeclaredSUID(long suid)
public int getThisClassIndex()
public void setThisClassIndex(int this_class_index)
public CONSTANT_Class_info getThisClass()
public CONSTANT_Class_info getSuperClass()
public java.lang.String getName()
public int getSuperClassIndex()
public void setSuperClassIndex(int super_class_index)
public final int getAccessFlags()
getAccessFlags
in interface IAccessFlags
public final void setAccessFlags(int flags)
setAccessFlags
in interface IAccessFlags
public boolean isInterface()
public boolean isSynthetic()
public boolean isNested(int[] nestedAccessFlags)
public IConstantCollection getConstants()
public IInterfaceCollection getInterfaces()
public IFieldCollection getFields()
public IMethodCollection getMethods()
public IAttributeCollection getAttributes()
public int[] getFields(java.lang.String name)
public int[] getMethods(java.lang.String name)
public java.lang.Object clone()
clone
in class java.lang.Object
public void writeInClassFormat(UDataOutputStream out) throws java.io.IOException
writeInClassFormat
in interface IClassFormatOutput
java.io.IOException
public final long getDeclaredSUID()
public final long computeSUID(boolean skipCLINIT)
public int addCONSTANT_Utf8(java.lang.String value, boolean keepUnique)
public int addStringConstant(java.lang.String value)
public int addNameType(java.lang.String name, java.lang.String typeDescriptor)
public int addClassref(java.lang.String classJVMName)
public int addField(java.lang.String name, java.lang.String descriptor, int access_flags)
public int addField(java.lang.String name, java.lang.String descriptor, int access_flags, IAttributeCollection attributes)
public Method_info newEmptyMethod(java.lang.String name, java.lang.String descriptor, int access_flags)
public int addMethod(Method_info method)
public int addFieldref(Field_info field)
public int addFieldref(int offset)