public class ClassFile
extends java.lang.Object
ClassFile(InputStream)
creates a ClassFile
object from the bytecode
read from the given InputStream
.
store(OutputStream)
generates Java™ bytecode
which is suitable for being processed by a Java™ virtual
machine.
Modifier and Type | Class and Description |
---|---|
static class |
ClassFile.AttributeInfo
Representation of a class file attribute (see JVMS 4.7).
|
static class |
ClassFile.ConstantClassInfo |
static class |
ClassFile.ConstantFieldrefInfo |
static class |
ClassFile.ConstantInterfaceMethodrefInfo |
static class |
ClassFile.ConstantMethodrefInfo |
static class |
ClassFile.ConstantNameAndTypeInfo |
static class |
ClassFile.ConstantPoolInfo |
static class |
ClassFile.ConstantUtf8Info |
static class |
ClassFile.ConstantValueAttribute
Representation of a "ConstantValue" attribute (see JVMS 4.7.2).
|
static class |
ClassFile.ConstantValuePoolInfo |
static class |
ClassFile.DeprecatedAttribute
Representation of a "Deprecated" attribute (see JVMS 4.7.10).
|
static class |
ClassFile.ExceptionsAttribute
Representation of an "Exceptions" attribute (see JVMS 4.7.4).
|
static class |
ClassFile.FieldInfo |
static class |
ClassFile.InnerClassesAttribute
Representation of an "InnerClasses" attribute (see JVMS 4.7.5).
|
static class |
ClassFile.LineNumberTableAttribute
Representation of a "LineNumberTable" attribute (see JVMS 4.7.8).
|
static class |
ClassFile.LocalVariableTableAttribute
Representation of a "LocalVariableTable" attribute (see JVMS 4.7.9).
|
class |
ClassFile.MethodInfo
This class represents a "method_info" structure, as defined by the
JVM specification.
|
static class |
ClassFile.SourceFileAttribute
Representation of a "SourceFile" attribute (see JVMS 4.7.7).
|
static class |
ClassFile.SyntheticAttribute
Representation of a "Synthetic" attribute (see JVMS 4.7.6).
|
Modifier and Type | Field and Description |
---|---|
short |
accessFlags |
java.util.List |
constantPool |
java.util.List |
fieldInfos |
short[] |
interfaces |
static short |
MAJOR_VERSION_JDK_1_1 |
static short |
MAJOR_VERSION_JDK_1_2 |
static short |
MAJOR_VERSION_JDK_1_3 |
static short |
MAJOR_VERSION_JDK_1_4 |
static short |
MAJOR_VERSION_JDK_1_5 |
java.util.List |
methodInfos |
static short |
MINOR_VERSION_JDK_1_1 |
static short |
MINOR_VERSION_JDK_1_2 |
static short |
MINOR_VERSION_JDK_1_3 |
static short |
MINOR_VERSION_JDK_1_4 |
static short |
MINOR_VERSION_JDK_1_5 |
short |
superclass |
short |
thisClass |
Constructor and Description |
---|
ClassFile(java.io.InputStream inputStream)
Read "class file" data from a
InputStream and construct a
ClassFile object from it. |
ClassFile(short accessFlags,
java.lang.String thisClassFd,
java.lang.String superclassFd,
java.lang.String[] interfaceFds)
Construct from parsed components.
|
Modifier and Type | Method and Description |
---|---|
short |
addConstantClassInfo(java.lang.String typeFd)
Return the constant index number for a "CONSTANT_Class_info" structure to the class file.
|
short |
addConstantDoubleInfo(double value)
Add a "CONSTANT_Double_info" structure to the class file.
|
short |
addConstantFieldrefInfo(java.lang.String classFd,
java.lang.String fieldName,
java.lang.String fieldFd)
Add a "CONSTANT_Fieldref_info" structure to the class file.
|
short |
addConstantFloatInfo(float value)
Add a "CONSTANT_Float_info" structure to the class file.
|
short |
addConstantIntegerInfo(int value)
Add a "CONSTANT_Integer_info" structure to the class file.
|
short |
addConstantInterfaceMethodrefInfo(java.lang.String classFd,
java.lang.String methodName,
java.lang.String methodMd)
Add a "CONSTANT_InterfaceMethodref_info" structure to the class file.
|
short |
addConstantLongInfo(long value)
Add a "CONSTANT_Long_info" structure to the class file.
|
short |
addConstantMethodrefInfo(java.lang.String classFd,
java.lang.String methodName,
java.lang.String methodMd)
Add a "CONSTANT_Methodref_info" structure to the class file.
|
short |
addConstantStringInfo(java.lang.String string)
Add a "CONSTANT_String_info" structure to the class file.
|
short |
addConstantUtf8Info(java.lang.String s)
Adds a "CONSTANT_Utf8_info" structure to the class file if no equal entry exists.
|
void |
addDeprecatedAttribute() |
ClassFile.FieldInfo |
addFieldInfo(short accessFlags,
java.lang.String fieldName,
java.lang.String fieldTypeFd,
java.lang.Object optionalConstantValue) |
void |
addInnerClassesAttributeEntry(ClassFile.InnerClassesAttribute.Entry e)
Create an "InnerClasses" attribute if it does not exist, then add the given entry
to the "InnerClasses" attribute.
|
ClassFile.MethodInfo |
addMethodInfo(short accessFlags,
java.lang.String methodName,
java.lang.String methodMd) |
void |
addSourceFileAttribute(java.lang.String sourceFileName)
Adds a "SourceFile" attribute to this class file.
|
static java.lang.String |
getClassFileResourceName(java.lang.String className)
Construct the name of a resource that could contain the class file of the
class with the given name.
|
java.lang.String |
getConstantClassName(short index) |
ClassFile.ConstantPoolInfo |
getConstantPoolInfo(short index) |
java.lang.String |
getConstantUtf8(short index) |
ClassFile.InnerClassesAttribute |
getInnerClassesAttribute()
Find the "InnerClasses" attribute of this class file
|
short |
getMajorVersion()
Returns the current major class file version number.
|
short |
getMinorVersion()
Returns the current minor class file version number.
|
static java.lang.String |
getSourceResourceName(java.lang.String className)
Construct the name of a resource that could contain the source code of
the class with the given name.
|
java.lang.String |
getThisClassName() |
void |
setVersion(short majorVersion,
short minorVersion)
Sets the major and minor class file version numbers (JVMS 4.1).
|
void |
store(java.io.OutputStream os)
Write
ClassFile to an OutputStream , in "class file" format. |
byte[] |
toByteArray()
Return the byte code of this
ClassFile as a byte array. |
public static final short MAJOR_VERSION_JDK_1_1
public static final short MINOR_VERSION_JDK_1_1
public static final short MAJOR_VERSION_JDK_1_2
public static final short MINOR_VERSION_JDK_1_2
public static final short MAJOR_VERSION_JDK_1_3
public static final short MINOR_VERSION_JDK_1_3
public static final short MAJOR_VERSION_JDK_1_4
public static final short MINOR_VERSION_JDK_1_4
public static final short MAJOR_VERSION_JDK_1_5
public static final short MINOR_VERSION_JDK_1_5
public final java.util.List constantPool
public final short accessFlags
public final short thisClass
public final short superclass
public final short[] interfaces
public final java.util.List fieldInfos
public final java.util.List methodInfos
public ClassFile(short accessFlags, java.lang.String thisClassFd, java.lang.String superclassFd, java.lang.String[] interfaceFds)
accessFlags
- as defined by Mod
thisClassFd
- the field descriptor for this classsuperclassFd
- the field descriptor for the extended class (e.g. "Ljava/lang/Object;")interfaceFds
- the field descriptors for the implemented interfacespublic ClassFile(java.io.InputStream inputStream) throws java.io.IOException
InputStream
and construct a
ClassFile
object from it.
If the ClassFile
is created with this constructor, then most modifying operations
lead to a UnsupportedOperationException
; only fields, methods and
attributes can be added.
inputStream
- java.io.IOException
java.lang.ClassFormatError
public void addSourceFileAttribute(java.lang.String sourceFileName)
sourceFileName
- public void addDeprecatedAttribute()
public ClassFile.InnerClassesAttribute getInnerClassesAttribute()
null
if this class has no "InnerClasses" attributepublic void addInnerClassesAttributeEntry(ClassFile.InnerClassesAttribute.Entry e)
e
- public java.lang.String getThisClassName()
public void setVersion(short majorVersion, short minorVersion)
majorVersion
- minorVersion
- public short getMajorVersion()
public short getMinorVersion()
public short addConstantClassInfo(java.lang.String typeFd)
public short addConstantFieldrefInfo(java.lang.String classFd, java.lang.String fieldName, java.lang.String fieldFd)
public short addConstantMethodrefInfo(java.lang.String classFd, java.lang.String methodName, java.lang.String methodMd)
public short addConstantInterfaceMethodrefInfo(java.lang.String classFd, java.lang.String methodName, java.lang.String methodMd)
public short addConstantStringInfo(java.lang.String string)
public short addConstantIntegerInfo(int value)
public short addConstantFloatInfo(float value)
public short addConstantLongInfo(long value)
public short addConstantDoubleInfo(double value)
public short addConstantUtf8Info(java.lang.String s)
public ClassFile.FieldInfo addFieldInfo(short accessFlags, java.lang.String fieldName, java.lang.String fieldTypeFd, java.lang.Object optionalConstantValue)
public ClassFile.MethodInfo addMethodInfo(short accessFlags, java.lang.String methodName, java.lang.String methodMd)
public ClassFile.ConstantPoolInfo getConstantPoolInfo(short index)
public java.lang.String getConstantClassName(short index)
index
- Index to a CONSTANT_Class_info
in the constant poolpublic java.lang.String getConstantUtf8(short index)
index
- Index to a CONSTANT_Utf8_info
in the constant poolpublic void store(java.io.OutputStream os) throws java.io.IOException
ClassFile
to an OutputStream
, in "class file" format.
Notice that if an IOException
is thrown, the class file is
probably written incompletely and thus invalid. The calling method must take
care of this situation, e.g. by closing the output stream and then deleting the
file.
os
- java.io.IOException
public static java.lang.String getSourceResourceName(java.lang.String className)
Notice that member types are declared inside a different type, so the relevant source file is that of the outermost declaring class.
className
- Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner"public static java.lang.String getClassFileResourceName(java.lang.String className)
className
- Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner"public byte[] toByteArray()
ClassFile
as a byte array.