org.apache.bcel.classfile

Class JavaClass

Implemented Interfaces:
Cloneable, Comparable, Node, java.io.Serializable

public class JavaClass
extends AccessFlags
implements Cloneable, Node, Comparable

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.
Version:
$Id: JavaClass.java 386056 2006-03-15 11:31:56Z tcurdt $
Author:
M. Dahm
See Also:
ClassGen, Serialized Form

Field Summary

static byte
FILE
static byte
HEAP
static byte
ZIP
private static BCELComparator
_cmp
private Attribute[]
attributes
private String
class_name
private int
class_name_index
private ConstantPool
constant_pool
(package private) static boolean
debug
private Field[]
fields
private String
file_name
private String[]
interface_names
private int[]
interfaces
private int
major
private Method[]
methods
private int
minor
private String
package_name
private Repository
repository
In cases where we go ahead and create something, use the default SyntheticRepository, because we don't know any better.
(package private) static char
sep
private byte
source
private String
source_file_name
private String
superclass_name
private int
superclass_name_index

Fields inherited from class org.apache.bcel.classfile.AccessFlags

access_flags

Constructor Summary

JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes)
Constructor gets all contents as arguments.
JavaClass(int class_name_index, int superclass_name_index, String file_name, int major, int minor, int access_flags, ConstantPool constant_pool, int[] interfaces, Field[] fields, Method[] methods, Attribute[] attributes, byte source)
Constructor gets all contents as arguments.

Method Summary

(package private) static void
Debug(String str)
void
accept(Visitor v)
Called by objects that are traversing the nodes of the tree implicitely defined by the contents of a Java class.
int
compareTo(Object obj)
Return the natural ordering of two JavaClasses.
JavaClass
copy()
void
dump(DataOutputStream file)
Dump Java class to output stream in binary format.
void
dump(File file)
Dump class to a file.
void
dump(OutputStream file)
Dump Java class to output stream in binary format.
void
dump(String _file_name)
Dump class to a file named file_name.
boolean
equals(Object obj)
Return value as defined by given BCELComparator strategy.
JavaClass[]
getAllInterfaces()
Get all interfaces implemented by this JavaClass (transitively).
Attribute[]
getAttributes()
byte[]
getBytes()
String
getClassName()
int
getClassNameIndex()
static BCELComparator
getComparator()
ConstantPool
getConstantPool()
Field[]
getFields()
String
getFileName()
int[]
getInterfaceIndices()
String[]
getInterfaceNames()
JavaClass[]
getInterfaces()
Get interfaces directly implemented by this JavaClass.
int
getMajor()
Method
getMethod(java.lang.reflect.Method m)
Method[]
getMethods()
int
getMinor()
String
getPackageName()
Repository
getRepository()
Gets the ClassRepository which holds its definition.
byte
getSource()
String
getSourceFileName()
JavaClass
getSuperClass()
JavaClass[]
getSuperClasses()
String
getSuperclassName()
int
getSuperclassNameIndex()
int
hashCode()
Return value as defined by given BCELComparator strategy.
boolean
implementationOf(JavaClass inter)
private static String
indent(Object obj)
boolean
instanceOf(JavaClass super_class)
Equivalent to runtime "instanceof" operator.
boolean
isClass()
boolean
isSuper()
void
setAttributes(Attribute[] attributes)
void
setClassName(String class_name)
void
setClassNameIndex(int class_name_index)
static void
setComparator(BCELComparator comparator)
void
setConstantPool(ConstantPool constant_pool)
void
setFields(Field[] fields)
void
setFileName(String file_name)
Set File name of class, aka SourceFile attribute value
void
setInterfaceNames(String[] interface_names)
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 source_file_name)
Set absolute path to file this class was read from.
void
setSuperclassName(String superclass_name)
void
setSuperclassNameIndex(int superclass_name_index)
String
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, isVolatile, isVolatile, setAccessFlags, setFlag, setModifiers

Field Details

FILE

public static final byte FILE
Field Value:
2

HEAP

public static final byte HEAP
Field Value:
1

ZIP

public static final byte ZIP
Field Value:
3

_cmp

private static BCELComparator _cmp

attributes

private Attribute[] attributes

class_name

private String class_name

class_name_index

private int class_name_index

constant_pool

private ConstantPool constant_pool

debug

(package private) static boolean debug

fields

private Field[] fields

file_name

private String file_name

interface_names

private String[] interface_names

interfaces

private int[] interfaces

major

private int major

methods

private Method[] methods

minor

private int minor

package_name

private String package_name

repository

private Repository repository
In cases where we go ahead and create something, use the default SyntheticRepository, because we don't know any better.

sep

(package private) static char sep

source

private byte source

source_file_name

private String source_file_name

superclass_name

private String superclass_name

superclass_name_index

private int superclass_name_index

Constructor Details

JavaClass

public JavaClass(int class_name_index,
                 int superclass_name_index,
                 String file_name,
                 int major,
                 int minor,
                 int access_flags,
                 ConstantPool constant_pool,
                 int[] interfaces,
                 Field[] fields,
                 Method[] methods,
                 Attribute[] attributes)
Constructor gets all contents as arguments.
Parameters:
class_name_index - Class name
superclass_name_index - Superclass name
file_name - File name
major - Major compiler version
minor - Minor compiler version
access_flags - Access rights defined by bit flags
constant_pool - Array of constants
interfaces - Implemented interfaces
fields - Class fields
methods - Class methods
attributes - Class attributes

JavaClass

public JavaClass(int class_name_index,
                 int superclass_name_index,
                 String file_name,
                 int major,
                 int minor,
                 int access_flags,
                 ConstantPool constant_pool,
                 int[] interfaces,
                 Field[] fields,
                 Method[] methods,
                 Attribute[] attributes,
                 byte source)
Constructor gets all contents as arguments.
Parameters:
class_name_index - Index into constant pool referencing a ConstantClass that represents this class.
superclass_name_index - Index into constant pool referencing a ConstantClass that represents this class's superclass.
file_name - File name
major - Major compiler version
minor - Minor compiler version
access_flags - Access rights defined by bit flags
constant_pool - Array of constants
interfaces - Implemented interfaces
fields - Class fields
methods - Class methods
attributes - Class attributes
source - Read from file or generated in memory?

Method Details

Debug

(package private) static final void Debug(String str)

accept

public void accept(Visitor v)
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.
Specified by:
accept in interface Node
Parameters:
v - Visitor object

compareTo

public int compareTo(Object obj)
Return the natural ordering of two JavaClasses. This ordering is based on the class name

copy

public JavaClass copy()
Returns:
deep copy of this class

dump

public void dump(DataOutputStream file)
            throws IOException
Dump Java class to output stream in binary format.
Parameters:
file - Output stream

dump

public void dump(File file)
            throws IOException
Dump class to a file.
Parameters:
file - Output file

dump

public void dump(OutputStream file)
            throws IOException
Dump Java class to output stream in binary format.
Parameters:
file - Output stream

dump

public void dump(String _file_name)
            throws IOException
Dump class to a file named file_name.
Parameters:
_file_name - Output file name

equals

public boolean equals(Object obj)
Return value as defined by given BCELComparator strategy. By default two JavaClass objects are said to be equal when their class names are equal.
See Also:
java.lang.Object.equals(java.lang.Object)

getAllInterfaces

public JavaClass[] getAllInterfaces()
            throws ClassNotFoundException
Get all interfaces implemented by this JavaClass (transitively).

getAttributes

public Attribute[] getAttributes()
Returns:
Attributes of the class.

getBytes

public byte[] getBytes()
Returns:
class in binary format

getClassName

public String getClassName()
Returns:
Class name.

getClassNameIndex

public int getClassNameIndex()
Returns:
Class name index.

getComparator

public static BCELComparator getComparator()
Returns:
Comparison strategy object

getConstantPool

public ConstantPool getConstantPool()
Returns:
Constant pool.

getFields

public Field[] 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

public String getFileName()
Returns:
File name of class, aka SourceFile attribute value

getInterfaceIndices

public int[] getInterfaceIndices()
Returns:
Indices in constant pool of implemented interfaces.

getInterfaceNames

public String[] getInterfaceNames()
Returns:
Names of implemented interfaces.

getInterfaces

public JavaClass[] getInterfaces()
            throws ClassNotFoundException
Get interfaces directly implemented by this JavaClass.

getMajor

public int getMajor()
Returns:
Major number of class file version.

getMethod

public Method getMethod(java.lang.reflect.Method m)
Returns:
A org.apache.bcel.classfile.Method corresponding to java.lang.reflect.Method if any

getMethods

public Method[] getMethods()
Returns:
Methods of the class.

getMinor

public int getMinor()
Returns:
Minor number of class file version.

getPackageName

public String getPackageName()
Returns:
Package name.

getRepository

public Repository getRepository()
Gets the ClassRepository which holds its definition. By default this is the same as SyntheticRepository.getInstance();

getSource

public final byte getSource()
Returns:
returns either HEAP (generated), FILE, or ZIP

getSourceFileName

public String getSourceFileName()
Returns:
sbsolute path to file where this class was read from

getSuperClass

public JavaClass getSuperClass()
            throws ClassNotFoundException
Returns:
the superclass for this JavaClass object, or null if this is java.lang.Object

getSuperClasses

public JavaClass[] getSuperClasses()
            throws ClassNotFoundException
Returns:
list of super classes of this class in ascending order, i.e., java.lang.Object is always the last element

getSuperclassName

public String getSuperclassName()
Returns:
Superclass name.

getSuperclassNameIndex

public int getSuperclassNameIndex()
Returns:
Class name index.

hashCode

public int hashCode()
Return value as defined by given BCELComparator strategy. By default return the hashcode of the class name.
See Also:
java.lang.Object.hashCode()

implementationOf

public boolean implementationOf(JavaClass inter)
            throws ClassNotFoundException
Returns:
true, if this class is an implementation of interface inter

indent

private static final String indent(Object obj)

instanceOf

public final boolean instanceOf(JavaClass super_class)
            throws ClassNotFoundException
Equivalent to runtime "instanceof" operator.
Returns:
true if this JavaClass is derived from the super class

isClass

public final boolean isClass()

isSuper

public final boolean isSuper()

setAttributes

public void setAttributes(Attribute[] attributes)
Parameters:
attributes - .

setClassName

public void setClassName(String class_name)
Parameters:
class_name - .

setClassNameIndex

public void setClassNameIndex(int class_name_index)
Parameters:
class_name_index - .

setComparator

public static void setComparator(BCELComparator comparator)
Parameters:
comparator - Comparison strategy object

setConstantPool

public void setConstantPool(ConstantPool constant_pool)
Parameters:
constant_pool - .

setFields

public void setFields(Field[] fields)
Parameters:
fields - .

setFileName

public void setFileName(String file_name)
Set File name of class, aka SourceFile attribute value

setInterfaceNames

public void setInterfaceNames(String[] interface_names)
Parameters:
interface_names - .

setInterfaces

public void setInterfaces(int[] interfaces)
Parameters:
interfaces - .

setMajor

public void setMajor(int major)
Parameters:
major - .

setMethods

public void setMethods(Method[] methods)
Parameters:
methods - .

setMinor

public void setMinor(int minor)
Parameters:
minor - .

setRepository

public void setRepository(Repository repository)
Sets the ClassRepository which loaded the JavaClass. Should be called immediately after parsing is done.

setSourceFileName

public void setSourceFileName(String source_file_name)
Set absolute path to file this class was read from.

setSuperclassName

public void setSuperclassName(String superclass_name)
Parameters:
superclass_name - .

setSuperclassNameIndex

public void setSuperclassNameIndex(int superclass_name_index)
Parameters:
superclass_name_index - .

toString

public String toString()
Returns:
String representing class contents.