Package org.apache.bcel.classfile
Class JavaClass
java.lang.Object
org.apache.bcel.classfile.AccessFlags
org.apache.bcel.classfile.JavaClass
- All Implemented Interfaces:
Cloneable,Comparable<JavaClass>,Node
Represents a Java class, i.e., the data structures, constant pool, fields, methods and commands contained in a Java
.class file. See JVM specification for details. The intent of
this class is to represent a parsed or otherwise existing class file. Those interested in programmatically generating
classes should see the ClassGen class.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final JavaClass[]Empty array.static final StringThe standard class file extension.static final bytestatic final bytestatic final byteFields inherited from class org.apache.bcel.classfile.AccessFlags
access_flags -
Constructor Summary
ConstructorsConstructorDescriptionJavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes) Constructor gets all contents as arguments.JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source) Constructor gets all contents as arguments. -
Method Summary
Modifier and TypeMethodDescriptionvoidCalled by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class.intReturn the natural ordering of two JavaClasses.copy()voiddump(DataOutputStream file) Dump Java class to output stream in binary format.voidDump class to a file.voiddump(OutputStream file) Dump Java class to output stream in binary format.voidDump class to a file named fileName.booleanReturn value as defined by given BCELComparator strategy.Finds a visible field by name and type in this class and its super classes.Gets all interfaces implemented by this JavaClass (transitively).final <T extends Attribute>
TgetAttribute(byte tag) Gets attribute for given tag.byte[]getBytes()intstatic BCELComparator<JavaClass>Field[]int[]String[]Gets interfaces directly implemented by this JavaClass.intgetMajor()Method[]intgetMinor()Gets the ClassRepository which holds its definition.final byteGets the source file path including the package path.returns the super class name of this class.intinthashCode()Return value as defined by given BCELComparator strategy.booleanimplementationOf(JavaClass inter) final booleaninstanceOf(JavaClass superclass) Equivalent to runtime "instanceof" operator.final booleanfinal booleanisClass()final booleanisNested()booleanisRecord()Tests whether this class was declared as a recordfinal booleanisSuper()voidsetAttributes(Attribute[] attributes) voidsetClassName(String className) voidsetClassNameIndex(int classNameIndex) static voidsetComparator(BCELComparator<JavaClass> comparator) voidsetConstantPool(ConstantPool constantPool) voidvoidsetFileName(String fileName) Sets File name of class, aka SourceFile attribute valuevoidsetInterfaceNames(String[] interfaceNames) voidsetInterfaces(int[] interfaces) voidsetMajor(int major) voidsetMethods(Method[] methods) voidsetMinor(int minor) voidsetRepository(Repository repository) Sets the ClassRepository which loaded the JavaClass.voidsetSourceFileName(String sourceFileName) Sets absolute path to file this class was read from.voidsetSuperclassName(String superclassName) voidsetSuperclassNameIndex(int superclassNameIndex) toString()Methods inherited from class org.apache.bcel.classfile.AccessFlags
getAccessFlags, getModifiers, isAbstract, isAbstract, isAnnotation, isAnnotation, isEnum, isEnum, isFinal, isFinal, isInterface, isInterface, isNative, isNative, isPrivate, isPrivate, isProtected, isProtected, isPublic, isPublic, isStatic, isStatic, isStrictfp, isStrictfp, isSynchronized, isSynchronized, isSynthetic, isSynthetic, isTransient, isTransient, isVarArgs, isVarArgs, isVolatile, isVolatile, setAccessFlags, setModifiers
-
Field Details
-
EXTENSION
The standard class file extension.- Since:
- 6.7.0
- See Also:
-
EMPTY_ARRAY
Empty array.- Since:
- 6.6.0
-
HEAP
- See Also:
-
FILE
- See Also:
-
ZIP
- See Also:
-
-
Constructor Details
-
JavaClass
public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes) Constructor gets all contents as arguments.- Parameters:
classNameIndex- Class namesuperclassNameIndex- Superclass namefileName- File namemajor- Major compiler versionminor- Minor compiler versionaccessFlags- Access rights defined by bit flagsconstantPool- Array of constantsinterfaces- Implemented interfacesfields- Class fieldsmethods- Class methodsattributes- Class attributes
-
JavaClass
public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int accessFlags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source) Constructor gets all contents as arguments.- Parameters:
classNameIndex- Index into constant pool referencing a ConstantClass that represents this class.superclassNameIndex- Index into constant pool referencing a ConstantClass that represents this class's superclass.fileName- File namemajor- Major compiler versionminor- Minor compiler versionaccessFlags- Access rights defined by bit flagsconstantPool- Array of constantsinterfaces- Implemented interfacesfields- Class fieldsmethods- Class methodsattributes- Class attributessource- Read from file or generated in memory?
-
-
Method Details
-
getComparator
- Returns:
- Comparison strategy object.
-
setComparator
- Parameters:
comparator- Comparison strategy object.
-
accept
Called by objects that are traversing the nodes of the tree implicitly defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects. -
compareTo
Return the natural ordering of two JavaClasses. This ordering is based on the class name- Specified by:
compareToin interfaceComparable<JavaClass>- Since:
- 6.0
-
copy
- Returns:
- deep copy of this class
-
dump
Dump Java class to output stream in binary format.- Parameters:
file- Output stream- Throws:
IOException- if an I/O error occurs.
-
dump
Dump class to a file.- Parameters:
file- Output file- Throws:
IOException- if an I/O error occurs.
-
dump
Dump Java class to output stream in binary format.- Parameters:
file- Output stream- Throws:
IOException- if an I/O error occurs.
-
dump
Dump class to a file named fileName.- Parameters:
fileName- Output file name- Throws:
IOException- if an I/O error occurs.
-
equals
Return value as defined by given BCELComparator strategy. By default two JavaClass objects are said to be equal when their class names are equal. -
findField
Finds a visible field by name and type in this class and its super classes.- Parameters:
fieldName- the field name to findfieldType- the field type to find- Returns:
- field matching given name and type, null if field is not found or not accessible from this class.
- Throws:
ClassNotFoundException- Since:
- 6.8.0
-
getAllInterfaces
Gets all interfaces implemented by this JavaClass (transitively).- Throws:
ClassNotFoundException- if any of the class's superclasses or interfaces can't be found.
-
getAnnotationEntries
- Returns:
- Annotations on the class
- Since:
- 6.0
-
getAttribute
Gets attribute for given tag.- Returns:
- Attribute for given tag, null if not found.
Refer to
Const.ATTR_UNKNOWNconstants named ATTR_* for possible values. - Since:
- 6.10.0
-
getAttributes
- Returns:
- Attributes of the class.
-
getBytes
- Returns:
- class in binary format
-
getClassName
- Returns:
- Class name.
-
getClassNameIndex
- Returns:
- Class name index.
-
getConstantPool
- Returns:
- Constant pool.
-
getFields
- Returns:
- Fields, i.e., variables of the class. Like the JVM spec mandates for the classfile format, these fields are those specific to this class, and not those of the superclass or superinterfaces.
-
getFileName
- Returns:
- File name of class, aka SourceFile attribute value
-
getInterfaceIndices
- Returns:
- Indices in constant pool of implemented interfaces.
-
getInterfaceNames
- Returns:
- Names of implemented interfaces.
-
getInterfaces
Gets interfaces directly implemented by this JavaClass.- Throws:
ClassNotFoundException- if any of the class's interfaces can't be found.
-
getMajor
- Returns:
- Major number of class file version.
-
getMethod
- Returns:
- A
Methodcorresponding to java.lang.reflect.Method if any
-
getMethods
- Returns:
- Methods of the class.
-
getMinor
- Returns:
- Minor number of class file version.
-
getPackageName
- Returns:
- Package name.
-
getRepository
Gets the ClassRepository which holds its definition. By default this is the same as SyntheticRepository.getInstance(); -
getSource
- Returns:
- returns either HEAP (generated), FILE, or ZIP
-
getSourceFileName
- Returns:
- file name where this class was read from
-
getSourceFilePath
Gets the source file path including the package path.- Returns:
- path to original source file of parsed class, relative to original source directory.
- Since:
- 6.7.0
-
getSuperClass
- Returns:
- the superclass for this JavaClass object, or null if this is
Object - Throws:
ClassNotFoundException- if the superclass can't be found
-
getSuperClasses
- Returns:
- list of super classes of this class in ascending order, i.e., java.lang.Object is always the last element
- Throws:
ClassNotFoundException- if any of the superclasses can't be found
-
getSuperclassName
returns the super class name of this class. In the case that this class isObject, it will return itself (Object). This is probably incorrect but isn't fixed at this time to not break existing clients.- Returns:
- Superclass name.
-
getSuperclassNameIndex
- Returns:
- Class name index.
-
hashCode
Return value as defined by given BCELComparator strategy. By default return the hash code of the class name. -
implementationOf
- Returns:
- true, if this class is an implementation of interface inter
- Throws:
ClassNotFoundException- if superclasses or superinterfaces of this class can't be found
-
instanceOf
Equivalent to runtime "instanceof" operator.- Returns:
- true if this JavaClass is derived from the super class
- Throws:
ClassNotFoundException- if superclasses or superinterfaces of this object can't be found
-
isAnonymous
- Since:
- 6.0
-
isClass
-
isNested
- Since:
- 6.0
-
isRecord
Tests whether this class was declared as a record- Returns:
- true if a record attribute is present, false otherwise.
- Since:
- 6.9.0
-
isSuper
-
setAttributes
- Parameters:
attributes- .
-
setClassName
- Parameters:
className- .
-
setClassNameIndex
- Parameters:
classNameIndex- .
-
setConstantPool
- Parameters:
constantPool- .
-
setFields
- Parameters:
fields- .
-
setFileName
Sets File name of class, aka SourceFile attribute value -
setInterfaceNames
- Parameters:
interfaceNames- .
-
setInterfaces
- Parameters:
interfaces- .
-
setMajor
- Parameters:
major- .
-
setMethods
- Parameters:
methods- .
-
setMinor
- Parameters:
minor- .
-
setRepository
Sets the ClassRepository which loaded the JavaClass. Should be called immediately after parsing is done. -
setSourceFileName
Sets absolute path to file this class was read from. -
setSuperclassName
- Parameters:
superclassName- .
-
setSuperclassNameIndex
- Parameters:
superclassNameIndex- .
-
toString
-