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 programatically generating classes
should see the ClassGen class.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AnnotationEntry[]
private Attribute[]
private static BCELComparator
private String
private int
private boolean
private ConstantPool
private static final boolean
private Field[]
static final byte
private String
static final byte
private String[]
private int[]
private boolean
private boolean
private int
private Method[]
private int
private String
private Repository
In cases where we go ahead and create something, use the default SyntheticRepository, because we don't know any better.private byte
private String
private String
private int
static final byte
Fields inherited from class org.apache.bcel.classfile.AccessFlags
access_flags
-
Constructor Summary
ConstructorsConstructorDescriptionJavaClass
(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int access_flags, 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 access_flags, ConstantPool constantPool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source) Constructor gets all contents as arguments. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.int
Return the natural ordering of two JavaClasses.private void
copy()
(package private) static void
void
dump
(DataOutputStream file) Dump Java class to output stream in binary format.void
Dump class to a file.void
dump
(OutputStream file) Dump Java class to output stream in binary format.void
Dump class to a file named fileName.boolean
Return value as defined by given BCELComparator strategy.Get all interfaces implemented by this JavaClass (transitively).byte[]
getBytes()
int
static BCELComparator
Field[]
int[]
String[]
Get interfaces directly implemented by this JavaClass.int
getMajor()
Method[]
int
getMinor()
Gets the ClassRepository which holds its definition.final byte
returns the super class name of this class.int
int
hashCode()
Return value as defined by given BCELComparator strategy.boolean
implementationOf
(JavaClass inter) private static String
final boolean
instanceOf
(JavaClass super_class) Equivalent to runtime "instanceof" operator.final boolean
final boolean
isClass()
final boolean
isNested()
final boolean
isSuper()
void
setAttributes
(Attribute[] attributes) void
setClassName
(String className) void
setClassNameIndex
(int classNameIndex) static void
setComparator
(BCELComparator comparator) void
setConstantPool
(ConstantPool constantPool) void
void
setFileName
(String fileName) Set File name of class, aka SourceFile attribute valuevoid
setInterfaceNames
(String[] interfaceNames) void
setInterfaces
(int[] interfaces) void
setMajor
(int major) void
setMethods
(Method[] methods) void
setMinor
(int minor) void
setRepository
(Repository repository) Sets the ClassRepository which loaded the JavaClass.void
setSourceFileName
(String sourceFileName) Set absolute path to file this class was read from.void
setSuperclassName
(String superclassName) void
setSuperclassNameIndex
(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
-
fileName
-
packageName
-
sourceFileName
-
classNameIndex
private int classNameIndex -
superclassNameIndex
private int superclassNameIndex -
className
-
superclassName
-
major
private int major -
minor
private int minor -
constantPool
-
interfaces
private int[] interfaces -
interfaceNames
-
fields
-
methods
-
attributes
-
annotations
-
source
private byte source -
isAnonymous
private boolean isAnonymous -
isNested
private boolean isNested -
computedNestedTypeStatus
private boolean computedNestedTypeStatus -
HEAP
public static final byte HEAP- See Also:
-
FILE
public static final byte FILE- See Also:
-
ZIP
public static final byte ZIP- See Also:
-
debug
private static final boolean debug -
bcelComparator
-
repository
In cases where we go ahead and create something, use the default SyntheticRepository, because we don't know any better.
-
-
Constructor Details
-
JavaClass
public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int access_flags, 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 versionaccess_flags
- Access rights defined by bit flagsconstantPool
- Array of constantsinterfaces
- Implemented interfacesfields
- Class fieldsmethods
- Class methodsattributes
- Class attributessource
- Read from file or generated in memory?
-
JavaClass
public JavaClass(int classNameIndex, int superclassNameIndex, String fileName, int major, int minor, int access_flags, 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 versionaccess_flags
- Access rights defined by bit flagsconstantPool
- Array of constantsinterfaces
- Implemented interfacesfields
- Class fieldsmethods
- Class methodsattributes
- Class attributes
-
-
Method Details
-
accept
Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class. I.e., the hierarchy of methods, fields, attributes, etc. spawns a tree of objects. -
Debug
-
dump
Dump class to a file.- Parameters:
file
- Output file- Throws:
IOException
-
dump
Dump class to a file named fileName.- Parameters:
_file_name
- Output file name- Throws:
IOException
-
getBytes
public byte[] getBytes()- Returns:
- class in binary format
-
dump
Dump Java class to output stream in binary format.- Parameters:
file
- Output stream- Throws:
IOException
-
dump
Dump Java class to output stream in binary format.- Parameters:
file
- Output stream- Throws:
IOException
-
getAttributes
- Returns:
- Attributes of the class.
-
getAnnotationEntries
- Returns:
- Annotations on the class
- Since:
- 6.0
-
getClassName
- Returns:
- Class name.
-
getPackageName
- Returns:
- Package name.
-
getClassNameIndex
public int 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
-
getInterfaceNames
- Returns:
- Names of implemented interfaces.
-
getInterfaceIndices
public int[] getInterfaceIndices()- Returns:
- Indices in constant pool of implemented interfaces.
-
getMajor
public int getMajor()- Returns:
- Major number of class file version.
-
getMethods
- Returns:
- Methods of the class.
-
getMethod
- Returns:
- A
Method
corresponding to java.lang.reflect.Method if any
-
getMinor
public int getMinor()- Returns:
- Minor number of class file version.
-
getSourceFileName
- Returns:
- sbsolute path to file where this class was read from
-
getSuperclassName
returns the super class name of this class. In the case that this class is java.lang.Object, it will return itself (java.lang.Object). This is probably incorrect but isn't fixed at this time to not break existing clients.- Returns:
- Superclass name.
-
getSuperclassNameIndex
public int getSuperclassNameIndex()- Returns:
- Class name index.
-
setAttributes
- Parameters:
attributes
- .
-
setClassName
- Parameters:
className
- .
-
setClassNameIndex
public void setClassNameIndex(int classNameIndex) - Parameters:
classNameIndex
- .
-
setConstantPool
- Parameters:
constantPool
- .
-
setFields
- Parameters:
fields
- .
-
setFileName
Set File name of class, aka SourceFile attribute value -
setInterfaceNames
- Parameters:
interfaceNames
- .
-
setInterfaces
public void setInterfaces(int[] interfaces) - Parameters:
interfaces
- .
-
setMajor
public void setMajor(int major) - Parameters:
major
- .
-
setMethods
- Parameters:
methods
- .
-
setMinor
public void setMinor(int minor) - Parameters:
minor
- .
-
setSourceFileName
Set absolute path to file this class was read from. -
setSuperclassName
- Parameters:
superclassName
- .
-
setSuperclassNameIndex
public void setSuperclassNameIndex(int superclassNameIndex) - Parameters:
superclassNameIndex
- .
-
toString
-
indent
-
copy
- Returns:
- deep copy of this class
-
isSuper
public final boolean isSuper() -
isClass
public final boolean isClass() -
isAnonymous
public final boolean isAnonymous()- Since:
- 6.0
-
isNested
public final boolean isNested()- Since:
- 6.0
-
computeNestedTypeStatus
private void computeNestedTypeStatus() -
getSource
public final byte getSource()- Returns:
- returns either HEAP (generated), FILE, or ZIP
-
getRepository
Gets the ClassRepository which holds its definition. By default this is the same as SyntheticRepository.getInstance(); -
setRepository
Sets the ClassRepository which loaded the JavaClass. Should be called immediately after parsing is done. -
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
-
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
-
getSuperClass
- Returns:
- the superclass for this JavaClass object, or null if this is java.lang.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
-
getInterfaces
Get interfaces directly implemented by this JavaClass.- Throws:
ClassNotFoundException
-
getAllInterfaces
Get all interfaces implemented by this JavaClass (transitively).- Throws:
ClassNotFoundException
-
getComparator
- Returns:
- Comparison strategy object
-
setComparator
- Parameters:
comparator
- Comparison strategy object
-
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. -
compareTo
Return the natural ordering of two JavaClasses. This ordering is based on the class name- Specified by:
compareTo
in interfaceComparable<JavaClass>
- Since:
- 6.0
-
hashCode
public int hashCode()Return value as defined by given BCELComparator strategy. By default return the hashcode of the class name.
-