Class ClassFile
- All Implemented Interfaces:
Annotatable
ClassFile(InputStream) reads bytecode from an InputStream and creates a ClassFile object
from it.
store(OutputStream) generates JVM bytecode which is suitable for being processed by a Java
virtual machine, and writes it to an OutputStream.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classThe structure of theannotationsarray as described in JVMS8 4.7.16.static classRepresentation of anAnnotationDefaultattribute (see JVMS8 4.7.22).static classRepresentation of aRuntime[In]visibleAnnotationsattribute (see JVMS8 4.7.16/17).static final classRepresentation of the "array_value" structure.static classRepresentation of a class file attribute (see JVMS7 4.7).static final classstatic final classstatic final classstatic final classstatic classUnchecked exception that represents an error condition that could occur during processing of class files, e.g.static classRepresentation of an unmodifiableCodeattribute, as read from a class file.static classSee JVMS7 4.4.1.static classConvenience class for element values that are constants (as opposed to annotations, enum constants and arrays).static classSee JVMS7 4.4.2.static classSee JVMS7 4.4.2.static classSee JVMS7 4.4.10.static classSee JVMS7 4.4.8.static classSee JVMS7 4.4.2.static classSee JVMS7 4.4.9.static classSee JVMS7 4.4.6.static classBase for various the constant pool table entry types.static classSee JVMS7 4.4.7.static classRepresentation of aConstantValueattribute (see JVMS 4.7.2).static classIntermediate base class for constant pool table entry types that have 'value' semantics: Double, Float, Integer, Long, Stringstatic classRepresentation of aDeprecatedattribute (see JVMS 4.7.10).static final classstatic interfaceRepresentation of the "element_value" structure (see JVMS8 4.7.16.1).static final classRepresentation of the "enum_const_value" element in the "element_value" structure.static classRepresentation of anExceptionsattribute (see JVMS 4.7.4).classRepresentation of a "method_info" structure, as defined by JVMS7 4.5.static final classstatic classRepresentation of anInnerClassesattribute (see JVMS 4.7.5).static final classstatic classRepresentation of aLineNumberTableattribute (see JVMS 4.7.8).static classRepresentation of aLocalVariableTableattribute (see JVMS 4.7.9).static final classclassRepresentation of a "method_info" structure, as defined by JVMS7 4.6.static final classstatic classRepresentation of aSignatureattribute (see JVMS 4.7.9).static classRepresentation of aSourceFileattribute (see JVMS 4.7.7).static classRepresentation of an unmodifiableStackMapTableattribute, as read from a class file.static final classstatic classRepresentation of aSyntheticattribute (see JVMS 4.7.6). -
Field Summary
FieldsModifier and TypeFieldDescriptionfinal shortThe access flags of the class.final List<ClassFile.FieldInfo> TheClassFile.FieldInfos of the field members of this class or interface.final short[]The constant pool indexes ofClassFile.ConstantClassInfowhich describe the interfaces that this class implements, resp.static final shortMajor version number of a class file that was generated by a Java 1.1-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.10-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.11-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.12-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.2-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.3-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.4-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.5-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.6-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.7-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.8-compliant compiler.static final shortMajor version number of a class file that was generated by a Java 1.9-compliant compiler.final List<ClassFile.MethodInfo> TheClassFile.MethodInfos of the methods of this class or interface.static final shortMinor version number of a class file that was generated by a Java 1.1-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.10-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.11-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.12-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.2-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.3-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.4-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.5-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.6-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.7-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.8-compliant compiler.static final shortMinor version number of a class file that was generated by a Java 1.9-compliant compiler.final shortThe constant pool index of theClassFile.ConstantClassInfothat describes the superclass of this class.final shortThe constant pool index of theClassFile.ConstantClassInfothat describes this class. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddAnnotationsAttributeEntry(boolean runtimeVisible, String fieldDescriptor, Map<Short, ClassFile.ElementValue> elementValuePairs) Creates aRuntime[In]visibleAnnotationsattribute on the class (if it does not yet exist) and adds an entry to it.shortaddConstantClassInfo(String typeFd) Returns the constant index number for a "CONSTANT_Class_info" structure to the class file.shortaddConstantDoubleInfo(double value) Adds a "CONSTANT_Double_info" structure to the class file.shortaddConstantFieldrefInfo(String classFd, String fieldName, String fieldFd) Adds a "CONSTANT_Fieldref_info" structure to the class file.shortaddConstantFloatInfo(float value) Adds a "CONSTANT_Float_info" structure to the class file.shortaddConstantIntegerInfo(int value) Adds a "CONSTANT_Integer_info" structure to the class file.shortaddConstantInterfaceMethodrefInfo(String classFd, String methodName, String methodMd) Adds a "CONSTANT_InterfaceMethodref_info" structure to the class file.shortaddConstantLongInfo(long value) Adds a "CONSTANT_Long_info" structure to the class file.shortaddConstantMethodrefInfo(String classFd, String methodName, String methodMd) Adds a "CONSTANT_Methodref_info" structure to the class file.shortaddConstantStringInfo(String string) Adds a "CONSTANT_String_info" structure to the class file.shortAdds a "CONSTANT_Utf8_info" structure to the class file if no equal entry exists.voidAdds theDeprecatedattribute to this class.addFieldInfo(short accessFlags, String fieldName, String fieldTypeFd, Object constantValue) Creates aClassFile.FieldInfoand adds it to this class.voidCreates anInnerClassesattribute if it does not exist, then adds the entry to theInnerClassesattribute.addMethodInfo(short accessFlags, String methodName, MethodDescriptor methodMd) Creates aClassFile.MethodInfoand adds it to this class.voidaddSourceFileAttribute(String sourceFileName) Adds aSourceFileattribute to this class file.getAnnotations(boolean runtimeVisible) static StringgetClassFileResourceName(String className) Constructs the name of a resource that could contain the class file of the class with the className.getConstantClassInfo(short index) getConstantFieldrefInfo(short index) getConstantInterfaceMethodrefInfo(short index) getConstantInvokeDynamicInfo(short index) getConstantMethodHandleInfo(short index) getConstantMethodrefInfo(short index) getConstantMethodTypeInfo(short index) getConstantNameAndTypeInfo(short index) getConstantPoolInfo(short index) intgetConstantUtf8(short index) Shorthand forgetConstantUtf8Info(index).s.getConstantUtf8Info(short index) getConstantValuePoolInfo(short index) Finds theInnerClassesattribute of this class file.shortshortstatic StringgetSourceResourceName(String className) Constructs the name of a resource that could contain the source code of the class with the className.newObjectVariableInfo(String fieldDescriptor) newUninitializedVariableInfo(short offset) voidsetVersion(short majorVersion, short minorVersion) Sets the major and minor class file version numbers (JVMS 4.1).voidstore(OutputStream os) WritesClassFileto anOutputStream, in "class file" format.byte[]Returns the byte code of thisClassFileas a byte array.toString()
-
Field Details
-
MAJOR_VERSION_JDK_1_1
public static final short MAJOR_VERSION_JDK_1_1Major version number of a class file that was generated by a Java 1.1-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_1
public static final short MINOR_VERSION_JDK_1_1Minor version number of a class file that was generated by a Java 1.1-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_2
public static final short MAJOR_VERSION_JDK_1_2Major version number of a class file that was generated by a Java 1.2-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_2
public static final short MINOR_VERSION_JDK_1_2Minor version number of a class file that was generated by a Java 1.2-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_3
public static final short MAJOR_VERSION_JDK_1_3Major version number of a class file that was generated by a Java 1.3-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_3
public static final short MINOR_VERSION_JDK_1_3Minor version number of a class file that was generated by a Java 1.3-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_4
public static final short MAJOR_VERSION_JDK_1_4Major version number of a class file that was generated by a Java 1.4-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_4
public static final short MINOR_VERSION_JDK_1_4Minor version number of a class file that was generated by a Java 1.4-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_5
public static final short MAJOR_VERSION_JDK_1_5Major version number of a class file that was generated by a Java 1.5-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_5
public static final short MINOR_VERSION_JDK_1_5Minor version number of a class file that was generated by a Java 1.5-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_6
public static final short MAJOR_VERSION_JDK_1_6Major version number of a class file that was generated by a Java 1.6-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_6
public static final short MINOR_VERSION_JDK_1_6Minor version number of a class file that was generated by a Java 1.6-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_7
public static final short MAJOR_VERSION_JDK_1_7Major version number of a class file that was generated by a Java 1.7-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_7
public static final short MINOR_VERSION_JDK_1_7Minor version number of a class file that was generated by a Java 1.7-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_8
public static final short MAJOR_VERSION_JDK_1_8Major version number of a class file that was generated by a Java 1.8-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_8
public static final short MINOR_VERSION_JDK_1_8Minor version number of a class file that was generated by a Java 1.8-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_9
public static final short MAJOR_VERSION_JDK_1_9Major version number of a class file that was generated by a Java 1.9-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_9
public static final short MINOR_VERSION_JDK_1_9Minor version number of a class file that was generated by a Java 1.9-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_10
public static final short MAJOR_VERSION_JDK_1_10Major version number of a class file that was generated by a Java 1.10-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_10
public static final short MINOR_VERSION_JDK_1_10Minor version number of a class file that was generated by a Java 1.10-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_11
public static final short MAJOR_VERSION_JDK_1_11Major version number of a class file that was generated by a Java 1.11-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_11
public static final short MINOR_VERSION_JDK_1_11Minor version number of a class file that was generated by a Java 1.11-compliant compiler.- See Also:
-
MAJOR_VERSION_JDK_1_12
public static final short MAJOR_VERSION_JDK_1_12Major version number of a class file that was generated by a Java 1.12-compliant compiler.- See Also:
-
MINOR_VERSION_JDK_1_12
public static final short MINOR_VERSION_JDK_1_12Minor version number of a class file that was generated by a Java 1.12-compliant compiler.- See Also:
-
accessFlags
public final short accessFlagsThe access flags of the class.- See Also:
-
thisClass
public final short thisClassThe constant pool index of theClassFile.ConstantClassInfothat describes this class. -
superclass
public final short superclassThe constant pool index of theClassFile.ConstantClassInfothat describes the superclass of this class. Zero for classObject,Objectfor interfaces.- See Also:
-
interfaces
public final short[] interfacesThe constant pool indexes ofClassFile.ConstantClassInfowhich describe the interfaces that this class implements, resp. that this interface extends. -
fieldInfos
TheClassFile.FieldInfos of the field members of this class or interface. -
methodInfos
TheClassFile.MethodInfos of the methods of this class or interface.
-
-
Constructor Details
-
ClassFile
public ClassFile(short accessFlags, String thisClassFd, @Nullable String superclassFd, String[] interfaceFds) Constructs a class with no fields and methods. An application would typically add fields and methods before saving it.By default, the .class file major and minor version are that of the currently executing JVM (system property
"java.class.version"). -
ClassFile
Reads "class file" data from the inputStream and construct aClassFileobject from it.If the
ClassFileis created with this constructor, then most modifying operations lead to aUnsupportedOperationException; only fields, methods and attributes can be added.- Throws:
IOException
-
-
Method Details
-
addSourceFileAttribute
Adds aSourceFileattribute to this class file. (Does not check whether one exists already.)- Parameters:
sourceFileName-
-
addDeprecatedAttribute
public void addDeprecatedAttribute()Adds theDeprecatedattribute to this class. -
getInnerClassesAttribute
Finds theInnerClassesattribute of this class file.- Returns:
nullif this class has no "InnerClasses" attribute
-
getSignatureAttribute
-
addInnerClassesAttributeEntry
Creates anInnerClassesattribute if it does not exist, then adds the entry to theInnerClassesattribute. -
getAnnotations
- Specified by:
getAnnotationsin interfaceAnnotatable- Returns:
- The annotations on this element; an empty array iff there are no annotations
-
addAnnotationsAttributeEntry
public void addAnnotationsAttributeEntry(boolean runtimeVisible, String fieldDescriptor, Map<Short, ClassFile.ElementValue> elementValuePairs) Creates aRuntime[In]visibleAnnotationsattribute on the class (if it does not yet exist) and adds an entry to it.- Specified by:
addAnnotationsAttributeEntryin interfaceAnnotatable- Parameters:
elementValuePairs- Maps element-name constant-pool-index (ClassFile.ConstantUtf8Info) to element value
-
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).ClassFiledeclares a set of valid major-minor version number pairs, e.g.MAJOR_VERSION_JDK_1_6andMINOR_VERSION_JDK_1_6. -
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
Returns the constant index number for a "CONSTANT_Class_info" structure to the class file. If the class hasn't been added before, adds it to the constant pool. Otherwise returns the constant number for that element of the pool.- See Also:
-
addConstantFieldrefInfo
Adds a "CONSTANT_Fieldref_info" structure to the class file.- See Also:
-
addConstantMethodrefInfo
Adds a "CONSTANT_Methodref_info" structure to the class file.- See Also:
-
addConstantInterfaceMethodrefInfo
Adds a "CONSTANT_InterfaceMethodref_info" structure to the class file.- See Also:
-
addConstantStringInfo
Adds a "CONSTANT_String_info" structure to the class file.- See Also:
-
addConstantIntegerInfo
public short addConstantIntegerInfo(int value) Adds a "CONSTANT_Integer_info" structure to the class file.- See Also:
-
addConstantFloatInfo
public short addConstantFloatInfo(float value) Adds a "CONSTANT_Float_info" structure to the class file.- See Also:
-
addConstantLongInfo
public short addConstantLongInfo(long value) Adds a "CONSTANT_Long_info" structure to the class file.- See Also:
-
addConstantDoubleInfo
public short addConstantDoubleInfo(double value) Adds a "CONSTANT_Double_info" structure to the class file.- See Also:
-
addConstantUtf8Info
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, @Nullable Object constantValue) Creates aClassFile.FieldInfoand 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(short accessFlags, String methodName, MethodDescriptor methodMd) Creates aClassFile.MethodInfoand adds it to this class. The return value can be used e.g. to add attributes (Code,Deprecated,Exceptions, ...) to the method. -
getConstantPoolInfo
- Returns:
- The (read-only) constant pool entry indexed by index
- Throws:
ClassFile.ClassFileException- index is invalid
-
getConstantClassInfo
- Returns:
- The (read-only) constant class info indexed by index
-
getConstantFieldrefInfo
- Returns:
- The (read-only) constant fieldref info indexed by index
-
getConstantInterfaceMethodrefInfo
- Returns:
- The (read-only) constant interface methodref info indexed by index
-
getConstantInvokeDynamicInfo
- Returns:
- The (read-only) constant invoke dynamic info indexed by index
-
getConstantMethodHandleInfo
- Returns:
- The (read-only) constant method handle info indexed by index
-
getConstantMethodrefInfo
- Returns:
- The (read-only) constant methodref info indexed by index
-
getConstantMethodTypeInfo
- Returns:
- The (read-only) constant method type info indexed by index
-
getConstantNameAndTypeInfo
- Returns:
- The (read-only) constant name and type info indexed by index
-
getConstantUtf8Info
- Returns:
- The (read-only) constant utf8 info indexed by index
-
getConstantValuePoolInfo
- Returns:
- The (read-only) constant value pool info indexed by index
-
getConstantPoolSize
public int getConstantPoolSize()- Returns:
- The size of the constant pool
-
getConstantUtf8
Shorthand forgetConstantUtf8Info(index).s.- Parameters:
index- Index to aCONSTANT_Utf8_infoin the constant pool- Returns:
- The string represented by the structure
-
store
WritesClassFileto anOutputStream, in "class file" format.Notice that if an
IOExceptionis 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.- Throws:
IOException
-
getSourceResourceName
Constructs the name of a resource that could contain the source code of the class with the className.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
Constructs the name of a resource that could contain the class file of the class with the className.- 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()Returns the byte code of thisClassFileas a byte array. -
newObjectVariableInfo
public ClassFile.StackMapTableAttribute.ObjectVariableInfo newObjectVariableInfo(String fieldDescriptor) -
newUninitializedVariableInfo
public ClassFile.StackMapTableAttribute.UninitializedVariableInfo newUninitializedVariableInfo(short offset) -
toString
-