Class ClassFile

java.lang.Object
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.

  • Field Details

    • MAJOR_VERSION_JDK_1_1

      public static final short MAJOR_VERSION_JDK_1_1
      See Also:
    • MINOR_VERSION_JDK_1_1

      public static final short MINOR_VERSION_JDK_1_1
      See Also:
    • MAJOR_VERSION_JDK_1_2

      public static final short MAJOR_VERSION_JDK_1_2
      See Also:
    • MINOR_VERSION_JDK_1_2

      public static final short MINOR_VERSION_JDK_1_2
      See Also:
    • MAJOR_VERSION_JDK_1_3

      public static final short MAJOR_VERSION_JDK_1_3
      See Also:
    • MINOR_VERSION_JDK_1_3

      public static final short MINOR_VERSION_JDK_1_3
      See Also:
    • MAJOR_VERSION_JDK_1_4

      public static final short MAJOR_VERSION_JDK_1_4
      See Also:
    • MINOR_VERSION_JDK_1_4

      public static final short MINOR_VERSION_JDK_1_4
      See Also:
    • MAJOR_VERSION_JDK_1_5

      public static final short MAJOR_VERSION_JDK_1_5
      See Also:
    • MINOR_VERSION_JDK_1_5

      public static final short MINOR_VERSION_JDK_1_5
      See Also:
    • constantPool

      public final List constantPool
    • accessFlags

      public final short accessFlags
    • thisClass

      public final short thisClass
    • superclass

      public final short superclass
    • interfaces

      public final short[] interfaces
    • fieldInfos

      public final List fieldInfos
    • methodInfos

      public final List methodInfos
  • Constructor Details

    • 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.

      Parameters:
      inputStream -
      Throws:
      IOException
      ClassFormatError
  • Method Details

    • 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()
    • 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.
      Parameters:
      majorVersion -
      minorVersion -
    • 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:
    • addConstantFieldrefInfo

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

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

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

      public short addConstantStringInfo(String string)
      Add a "CONSTANT_String_info" structure to the class file.
      See Also:
    • addConstantIntegerInfo

      public short addConstantIntegerInfo(int value)
      Add a "CONSTANT_Integer_info" structure to the class file.
      See Also:
    • addConstantFloatInfo

      public short addConstantFloatInfo(float value)
      Add a "CONSTANT_Float_info" structure to the class file.
      See Also:
    • addConstantLongInfo

      public short addConstantLongInfo(long value)
      Add a "CONSTANT_Long_info" structure to the class file.
      See Also:
    • addConstantDoubleInfo

      public short addConstantDoubleInfo(double value)
      Add a "CONSTANT_Double_info" structure to the class file.
      See Also:
    • 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:
    • addFieldInfo

      public ClassFile.FieldInfo addFieldInfo(short accessFlags, String fieldName, String fieldTypeFd, Object optionalConstantValue)
    • addMethodInfo

      public ClassFile.MethodInfo addMethodInfo(short accessFlags, String methodName, String methodMd)
    • getConstantPoolInfo

      public ClassFile.ConstantPoolInfo getConstantPoolInfo(short index)
    • getConstantClassName

      public String getConstantClassName(short index)
      Parameters:
      index - Index to a CONSTANT_Class_info in the constant pool
      Returns:
      The name of the denoted class in "internal form" (see JVMS 4.2)
    • 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.