janino.net

org.codehaus.janino.util
Class ClassFile

java.lang.Object
  extended by org.codehaus.janino.util.ClassFile

public class ClassFile
extends Object

An object that represents the Java™ "class file" format.

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.


Nested Class Summary
static class ClassFile.AttributeInfo
          Representation of a class file attribute (see JVMS7 4.7).
static class ClassFile.ConstantClassInfo
          See JVMS7 4.4.1.
static class ClassFile.ConstantFieldrefInfo
          See JVMS7 4.4.2.
static class ClassFile.ConstantInterfaceMethodrefInfo
          See JVMS7 4.4.2.
static class ClassFile.ConstantMethodrefInfo
          See JVMS7 4.4.2.
static class ClassFile.ConstantNameAndTypeInfo
          See JVMS7 4.4.6.
static class ClassFile.ConstantPoolInfo
          Base for various the constant pool table entry types.
static class ClassFile.ConstantUtf8Info
          See JVMS7 4.4.7.
static class ClassFile.ConstantValueAttribute
          Representation of a "ConstantValue" attribute (see JVMS 4.7.2).
static class ClassFile.ConstantValuePoolInfo
          Intermediate base class for constant pool table entry types that have 'value' semantics: Double, Float, Integer, Long, String
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
          Representation of a "method_info" structure, as defined by JVMS7 4.5.
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
          Representation of a "method_info" structure, as defined by JVMS7 4.6.
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).
 
Field Summary
 short accessFlags
          The access flags of the class.
 List<ClassFile.FieldInfo> fieldInfos
          The ClassFile.FieldInfos of the field members of this class or interface.
 short[] interfaces
          The constant pool indexes of ClassFile.ConstantClassInfo which describes the interfaces that this class implements, resp. that this interface extends.
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
           
 List<ClassFile.MethodInfo> methodInfos
          The ClassFile.MethodInfos of the methods of this class or interface.
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
          The constant pool index of the ClassFile.ConstantClassInfo that describes the superclass of THIS class.
 short thisClass
          The constant pool index of the ClassFile.ConstantClassInfo that describes THIS class.
 
Constructor Summary
ClassFile(InputStream inputStream)
          Read "class file" data from a InputStream and construct a ClassFile object from it.
ClassFile(short accessFlags, String thisClassFd, String superclassFd, String[] interfaceFds)
          Construct from parsed components.
 
Method Summary
 short addConstantClassInfo(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(String classFd, String fieldName, 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(String classFd, String methodName, 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(String classFd, String methodName, String methodMd)
          Add a "CONSTANT_Methodref_info" structure to the class file.
 short addConstantStringInfo(String string)
          Add a "CONSTANT_String_info" structure to the class file.
 short addConstantUtf8Info(String s)
          Adds a "CONSTANT_Utf8_info" structure to the class file if no equal entry exists.
 void addDeprecatedAttribute()
          Adds the "Deprecated" attribute to this class.
 ClassFile.FieldInfo addFieldInfo(Java.Modifiers modifiers, String fieldName, String fieldTypeFd, Object optionalConstantValue)
          Creates a ClassFile.FieldInfo and adds it to this class.
 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(Java.Modifiers modifiers, String methodName, String methodMd)
          Creates a ClassFile.MethodInfo and adds it to this class.
 void addSourceFileAttribute(String sourceFileName)
          Adds a "SourceFile" attribute to this class file.
static String getClassFileResourceName(String className)
          Construct the name of a resource that could contain the class file of the class with the given name.
 ClassFile.ConstantPoolInfo getConstantPoolInfo(short index)
           
 int getConstantPoolSize()
           
 String getConstantUtf8(short index)
           
 ClassFile.InnerClassesAttribute getInnerClassesAttribute()
          Find the "InnerClasses" attribute of this class file
 short getMajorVersion()
           
 short getMinorVersion()
           
static String getSourceResourceName(String className)
          Construct the name of a resource that could contain the source code of the class with the given name.
 String getThisClassName()
           
 void setVersion(short majorVersion, short minorVersion)
          Sets the major and minor class file version numbers (JVMS 4.1).
 void store(OutputStream os)
          Write ClassFile to an OutputStream, in "class file" format.
 byte[] toByteArray()
          Return the byte code of this ClassFile as a byte array.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAJOR_VERSION_JDK_1_1

public static final short MAJOR_VERSION_JDK_1_1
See Also:
Constant Field Values

MINOR_VERSION_JDK_1_1

public static final short MINOR_VERSION_JDK_1_1
See Also:
Constant Field Values

MAJOR_VERSION_JDK_1_2

public static final short MAJOR_VERSION_JDK_1_2
See Also:
Constant Field Values

MINOR_VERSION_JDK_1_2

public static final short MINOR_VERSION_JDK_1_2
See Also:
Constant Field Values

MAJOR_VERSION_JDK_1_3

public static final short MAJOR_VERSION_JDK_1_3
See Also:
Constant Field Values

MINOR_VERSION_JDK_1_3

public static final short MINOR_VERSION_JDK_1_3
See Also:
Constant Field Values

MAJOR_VERSION_JDK_1_4

public static final short MAJOR_VERSION_JDK_1_4
See Also:
Constant Field Values

MINOR_VERSION_JDK_1_4

public static final short MINOR_VERSION_JDK_1_4
See Also:
Constant Field Values

MAJOR_VERSION_JDK_1_5

public static final short MAJOR_VERSION_JDK_1_5
See Also:
Constant Field Values

MINOR_VERSION_JDK_1_5

public static final short MINOR_VERSION_JDK_1_5
See Also:
Constant Field Values

accessFlags

public final short accessFlags
The access flags of the class.

See Also:
and consorts

thisClass

public final short thisClass
The constant pool index of the ClassFile.ConstantClassInfo that describes THIS class.


superclass

public final short superclass
The constant pool index of the ClassFile.ConstantClassInfo that describes the superclass of THIS class. Zero for class Object, Object for interfaces.


interfaces

public final short[] interfaces
The constant pool indexes of ClassFile.ConstantClassInfo which describes the interfaces that this class implements, resp. that this interface extends.


fieldInfos

public final List<ClassFile.FieldInfo> fieldInfos
The ClassFile.FieldInfos of the field members of this class or interface.


methodInfos

public final List<ClassFile.MethodInfo> methodInfos
The ClassFile.MethodInfos of the methods of this class or interface.

Constructor Detail

ClassFile

public ClassFile(short accessFlags,
                 String thisClassFd,
                 String superclassFd,
                 String[] interfaceFds)
Construct from parsed components.

Parameters:
accessFlags - as defined by Mod
thisClassFd - the field descriptor for this class
superclassFd - the field descriptor for the extended class (e.g. "Ljava/lang/Object;")
interfaceFds - the field descriptors for the implemented interfaces

ClassFile

public ClassFile(InputStream inputStream)
          throws IOException
Read "class file" data from a 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.

Throws:
IOException
Method Detail

addSourceFileAttribute

public void addSourceFileAttribute(String sourceFileName)
Adds a "SourceFile" attribute to this class file. (Does not check whether one exists already.)

Parameters:
sourceFileName -

addDeprecatedAttribute

public void addDeprecatedAttribute()
Adds the "Deprecated" attribute to this class.


getInnerClassesAttribute

public ClassFile.InnerClassesAttribute getInnerClassesAttribute()
Find the "InnerClasses" attribute of this class file

Returns:
null if this class has no "InnerClasses" attribute

addInnerClassesAttributeEntry

public void addInnerClassesAttributeEntry(ClassFile.InnerClassesAttribute.Entry e)
Create an "InnerClasses" attribute if it does not exist, then add the given entry to the "InnerClasses" attribute.

Parameters:
e -

getThisClassName

public String getThisClassName()
Returns:
The fully qualified name of this class, e.g. "pkg1.pkg2.Outer$Inner"

setVersion

public void setVersion(short majorVersion,
                       short minorVersion)
Sets the major and minor class file version numbers (JVMS 4.1). The class file version defaults to the JDK 1.1 values (45.3) which execute on virtually every JVM.


getMajorVersion

public short getMajorVersion()
Returns:
The current major class file version number

getMinorVersion

public short getMinorVersion()
Returns:
The current minor class file version number

addConstantClassInfo

public short addConstantClassInfo(String typeFd)
Return the constant index number for a "CONSTANT_Class_info" structure to the class file. If the class hasn't been added before, add it to the constant pool. Otherwise return the constant number for that element of the pool.

See Also:
JVM specification, section 4.4.1

addConstantFieldrefInfo

public short addConstantFieldrefInfo(String classFd,
                                     String fieldName,
                                     String fieldFd)
Add a "CONSTANT_Fieldref_info" structure to the class file.

See Also:
JVM specification, section 4.4.2

addConstantMethodrefInfo

public short addConstantMethodrefInfo(String classFd,
                                      String methodName,
                                      String methodMd)
Add a "CONSTANT_Methodref_info" structure to the class file.

See Also:
JVM specification, section 4.4.2

addConstantInterfaceMethodrefInfo

public short addConstantInterfaceMethodrefInfo(String classFd,
                                               String methodName,
                                               String methodMd)
Add a "CONSTANT_InterfaceMethodref_info" structure to the class file.

See Also:
JVM specification, section 4.4.2

addConstantStringInfo

public short addConstantStringInfo(String string)
Add a "CONSTANT_String_info" structure to the class file.

See Also:
JVM specification, section 4.4.3

addConstantIntegerInfo

public short addConstantIntegerInfo(int value)
Add a "CONSTANT_Integer_info" structure to the class file.

See Also:
JVM specification, section 4.4.4

addConstantFloatInfo

public short addConstantFloatInfo(float value)
Add a "CONSTANT_Float_info" structure to the class file.

See Also:
JVM specification, section 4.4.4

addConstantLongInfo

public short addConstantLongInfo(long value)
Add a "CONSTANT_Long_info" structure to the class file.

See Also:
JVM specification, section 4.4.5

addConstantDoubleInfo

public short addConstantDoubleInfo(double value)
Add a "CONSTANT_Double_info" structure to the class file.

See Also:
JVM specification, section 4.4.5

addConstantUtf8Info

public short addConstantUtf8Info(String s)
Adds a "CONSTANT_Utf8_info" structure to the class file if no equal entry exists.

Returns:
The index of the already existing or newly created entry
See Also:
JVM specification, section 4.4.7

addFieldInfo

public ClassFile.FieldInfo addFieldInfo(Java.Modifiers modifiers,
                                        String fieldName,
                                        String fieldTypeFd,
                                        Object optionalConstantValue)
Creates a ClassFile.FieldInfo and adds it to this class. The return value can be used e.g. to add attributes (Deprecated, ...) to the field.


addMethodInfo

public ClassFile.MethodInfo addMethodInfo(Java.Modifiers modifiers,
                                          String methodName,
                                          String methodMd)
Creates a ClassFile.MethodInfo and adds it to this class. The return value can be used e.g. to add attributes (Code, Deprecated, Exceptions, ...) to the method.


getConstantPoolInfo

public ClassFile.ConstantPoolInfo getConstantPoolInfo(short index)
Returns:
The (read-only) constant pool entry indexed by index

getConstantPoolSize

public int getConstantPoolSize()
Returns:
The size of the constant pool

getConstantUtf8

public String getConstantUtf8(short index)
Parameters:
index - Index to a CONSTANT_Utf8_info in the constant pool
Returns:
The string represented by the structure

store

public void store(OutputStream os)
           throws IOException
Write 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.

Parameters:
os -
Throws:
IOException

getSourceResourceName

public static String getSourceResourceName(String className)
Construct the name of a resource that could contain the source code of the class with the given name.

Notice that member types are declared inside a different type, so the relevant source file is that of the outermost declaring class.

Parameters:
className - Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner"
Returns:
the name of the resource, e.g. "pkg1/pkg2/Outer.java"

getClassFileResourceName

public static String getClassFileResourceName(String className)
Construct the name of a resource that could contain the class file of the class with the given name.

Parameters:
className - Fully qualified class name, e.g. "pkg1.pkg2.Outer$Inner"
Returns:
the name of the resource, e.g. "pkg1/pkg2/Outer$Inner.class"

toByteArray

public byte[] toByteArray()
Return the byte code of this ClassFile as a byte array.


janino.net