javassist
public abstract class CtClass extends Object
Field Summary | |
---|---|
static CtClass | booleanType
The CtClass object representing
the boolean type. |
static CtClass | byteType
The CtClass object representing
the byte type. |
static CtClass | charType
The CtClass object representing
the char type. |
static CtClass | doubleType
The CtClass object representing
the double type. |
static CtClass | floatType
The CtClass object representing
the float type. |
static CtClass | intType
The CtClass object representing
the int type. |
static CtClass | longType
The CtClass object representing
the long type. |
static CtClass | shortType
The CtClass object representing
the short type. |
static String | version
The version number of this release. |
static CtClass | voidType
The CtClass object representing
the void type. |
Method Summary | |
---|---|
void | addConstructor(CtConstructor c)
Adds a constructor. |
void | addField(CtField f)
Adds a field.
|
void | addField(CtField f, String init)
Adds a field with an initial value.
|
void | addField(CtField f, CtField.Initializer init)
Adds a field with an initial value.
|
void | addInterface(CtClass anInterface)
Adds an interface.
|
void | addMethod(CtMethod m)
Adds a method. |
void | debugWriteFile()
Writes a class file as writeFile() does although this
method does not prune or freeze the class after writing the class
file. |
void | defrost()
Defrosts the class so that the class can be modified again.
|
void | detach()
Removes this CtClass object from the
ClassPool .
|
AccessorMaker | getAccessorMaker()
Undocumented method. |
Object[] | getAnnotations()
Returns the annotations associated with this class.
|
byte[] | getAttribute(String name)
Obtains an attribute with the given name.
|
Object[] | getAvailableAnnotations()
Returns the annotations associated with this class.
|
ClassFile | getClassFile()
Returns a class file for this class.
|
ClassFile | getClassFile2()
Returns a class file for this class (read only).
|
CtConstructor | getClassInitializer()
Gets the class initializer (static constructor)
declared in the class.
|
ClassPool | getClassPool()
Returns a ClassPool for this class. |
CtClass | getComponentType()
If this object represents an array, this method returns the component
type of the array. |
CtConstructor | getConstructor(String desc)
Returns the constructor with the given signature,
which is represented by a character string
called method descriptor.
|
CtConstructor[] | getConstructors()
Returns an array containing CtConstructor objects
representing all the non-private constructors of the class. |
CtBehavior[] | getDeclaredBehaviors()
Gets all the constructors and methods declared in the class. |
CtConstructor | getDeclaredConstructor(CtClass[] params)
Returns a constructor receiving the specified parameters.
|
CtConstructor[] | getDeclaredConstructors()
Gets all the constructors declared in the class.
|
CtField | getDeclaredField(String name)
Retrieves the field with the specified name among the fields
declared in the class.
|
CtField[] | getDeclaredFields()
Gets all the fields declared in the class. |
CtMethod | getDeclaredMethod(String name, CtClass[] params)
Retrieves the method with the specified name and parameter types
among the methods declared in the class.
|
CtMethod | getDeclaredMethod(String name)
Retrieves the method with the specified name among the methods
declared in the class. |
CtMethod[] | getDeclaredMethods()
Gets all methods declared in the class. |
CtClass | getDeclaringClass()
If this class is a member class or interface of another class,
then the class enclosing this class is returned.
|
CtMethod | getEnclosingMethod()
Returns the immediately enclosing method of this class.
|
CtField | getField(String name)
Returns the field with the specified name. |
CtField[] | getFields()
Returns an array containing CtField objects
representing all the non-private fields of the class.
|
CtClass[] | getInterfaces()
Obtains the class objects representing the interfaces implemented
by the class or, if this object represents an interface, the interfaces
extended by that interface. |
CtMethod | getMethod(String name, String desc)
Returns the method with the given name and signature.
|
CtMethod[] | getMethods()
Returns an array containing CtMethod objects
representing all the non-private methods of the class.
|
int | getModifiers()
Returns the modifiers for this class, encoded in an integer.
|
String | getName()
Obtains the fully-qualified name of the class. |
CtClass[] | getNestedClasses()
Returns an array of nested classes declared in the class.
|
String | getPackageName()
Obtains the package name. |
Collection | getRefClasses()
Returns a collection of the names of all the classes
referenced in this class.
|
String | getSimpleName()
Obtains the not-qualified class name. |
CtClass | getSuperclass()
Obtains the class object representing the superclass of the
class.
|
URL | getURL()
Returns the uniform resource locator (URL) of the class file. |
void | instrument(CodeConverter converter)
Applies the given converter to all methods and constructors
declared in the class. |
void | instrument(ExprEditor editor)
Modifies the bodies of all methods and constructors
declared in the class. |
boolean | isAnnotation()
Determines whether this object represents an annotation type.
|
boolean | isArray()
Returns true if this object represents an array type. |
boolean | isEnum()
Determines whether this object represents an enum.
|
boolean | isFrozen()
Returns true if the class has been loaded or written out
and thus it cannot be modified any more.
|
boolean | isInterface()
Determines whether this object represents a class or an interface.
|
boolean | isModified()
Returns true if the definition of the class has been modified. |
boolean | isPrimitive()
Returns true if this object represents a primitive
Java type: boolean, byte, char, short, int, long, float, double,
or void. |
static void | main(String[] args)
Prints the version number and the copyright notice.
|
CtConstructor | makeClassInitializer()
Makes an empty class initializer (static constructor).
|
CtClass | makeNestedClass(String name, boolean isStatic)
Makes a new public nested class. |
String | makeUniqueName(String prefix)
Makes a unique member name. |
void | prune()
Discards unnecessary attributes, in particuar,
CodeAttribute s (method bodies) of the class,
to minimize the memory footprint.
|
void | removeConstructor(CtConstructor c)
Removes a constructor declared in this class.
|
void | removeField(CtField f)
Removes a field declared in this class.
|
void | removeMethod(CtMethod m)
Removes a method declared in this class.
|
void | replaceClassName(String oldName, String newName)
Substitutes newName for all occurrences of a class
name oldName in the class file.
|
void | replaceClassName(ClassMap map)
Changes class names appearing in the class file according to the
given map .
|
void | setAttribute(String name, byte[] data)
Adds a named attribute.
|
void | setInterfaces(CtClass[] list)
Sets implemented interfaces. |
void | setModifiers(int mod)
Sets the modifiers.
|
void | setName(String name)
Sets the class name
|
void | setSuperclass(CtClass clazz)
Changes a super class unless this object represents an interface.
|
boolean | stopPruning(boolean stop)
Disallows (or allows) automatically pruning this CtClass
object.
|
boolean | subclassOf(CtClass superclass)
Determines whether the class directly or indirectly extends
the given class. |
boolean | subtypeOf(CtClass clazz)
Returns true if this class extends or implements
clazz . |
byte[] | toBytecode()
Converts this class to a class file.
|
void | toBytecode(DataOutputStream out)
Converts this class to a class file.
|
Class | toClass()
Converts this class to a java.lang.Class object.
|
Class | toClass(ClassLoader loader, ProtectionDomain domain)
Converts this class to a java.lang.Class object.
|
Class | toClass(ClassLoader loader)
Converts this class to a java.lang.Class object.
|
String | toString()
Converts the object to a string. |
void | writeFile()
Writes a class file represented by this CtClass
object in the current directory.
|
void | writeFile(String directoryName)
Writes a class file represented by this CtClass
object on a local disk.
|
CtClass
object representing
the boolean
type.CtClass
object representing
the byte
type.CtClass
object representing
the char
type.CtClass
object representing
the double
type.CtClass
object representing
the float
type.CtClass
object representing
the int
type.CtClass
object representing
the long
type.CtClass
object representing
the short
type.CtClass
object representing
the void
type.makeClassInitializer()
.
See Also: makeClassInitializer
The CtField
belonging to another
CtClass
cannot be directly added to this class.
Only a field created for this class can be added.
See Also: CtField
The CtField
belonging to another
CtClass
cannot be directly added to this class.
Only a field created for this class can be added.
The initial value is given as an expression written in Java. Any regular Java expression can be used for specifying the initial value. The followings are examples.
cc.addField(f, "0") // the initial value is 0. cc.addField(f, "i + 1") // i + 1. cc.addField(f, "new Point()"); // a Point object.
Here, the type of variable cc
is CtClass
.
The type of f
is CtField
.
Parameters: init an expression for the initial value.
The CtField
belonging to another
CtClass
cannot be directly added to this class.
Only a field created for this class can be added.
For example,
CtClass cc = ...; addField(new CtField(CtClass.intType, "i", cc), CtField.Initializer.constant(1));
This code adds an int
field named "i". The
initial value of this field is 1.
Parameters: init specifies the initial value of the field.
See Also: CtField
Parameters: anInterface the added interface.
writeFile()
does although this
method does not prune or freeze the class after writing the class
file. Note that, once writeFile()
or toBytecode()
is called, it cannot be called again since the class is pruned and frozen.
This method would be useful for debugging.To avoid changes that will be never reflected, the class is frozen to be unmodifiable if it is loaded or written out. This method should be called only in a case that the class will be reloaded or written out later again.
If defrost()
will be called later, pruning
must be disallowed in advance.
CtClass
object from the
ClassPool
.
After this method is called, any method cannot be called on the
removed CtClass
object.
If get()
in ClassPool
is called
with the name of the removed method,
the ClassPool
will read the class file again
and constructs another CtClass
object representing
the same class.
@Author
is associated
with this class, the returned array contains an Author
object. The member values can be obtained by calling methods on
the Author
object.
Returns: an array of annotation-type objects.
Since: 3.1
See Also: getAnnotations
This is a convenient method mainly for obtaining
a user-defined attribute. For dealing with attributes, see the
javassist.bytecode
package. For example, the following
expression returns all the attributes of a class file.
getClassFile().getAttributes()
Parameters: name attribute name
See Also: AttributeInfo
getAnnotations()
except that, if any annotations are not on the classpath,
they are not included in the returned array.
Returns: an array of annotation-type objects.
Since: 3.3
See Also: getAnnotations getAvailableAnnotations
This method is not available if isFrozen()
is true.
getClassFile()
.
The ClassFile
object obtained by this method
is read only. Changes to this object might not be reflected
on a class file generated by toBytecode()
,
toClass()
, etc.
This method is available even if isFrozen()
is true. However, if the class is frozen, it might be also
pruned.
See Also: getClassFile isFrozen prune
null
if
no class initializer is not declared.
See Also: makeClassInitializer CtConstructor
ClassPool
for this class.null
.javassist.bytecode.Descriptor
.
Parameters: desc method descriptor
See Also: Descriptor
CtConstructor
objects
representing all the non-private constructors of the class.Parameters: params parameter types.
See Also: CtConstructor
Note: this method does not search the superclasses.
Note: the result does not include inherited fields.
Note: this method does not search the superclasses.
Parameters: name method name params parameter types
See Also: CtMethod
Note: this method does not search the superclasses.
See Also: CtMethod
See Also: CtMethod
Returns: null if this class is a top-level class or an anonymous class.
Returns: null if this class is not a local class or an anonymous class.
CtField
objects
representing all the non-private fields of the class.
That array includes non-private fields inherited from the
superclasses.Parameters: name method name desc method descriptor
See Also: getSignature Descriptor
CtMethod
objects
representing all the non-private methods of the class.
That array includes pon-private methods inherited from the
superclasses.javassist.Modifier
.
If the class is a static nested class (a.k.a. static inner class),
the returned modifiers include Modifier.STATIC
.
See Also: Modifier
Since: 3.2
null
.This method may return null
.
java.lang.Object
class and thus it does not have
the super class.
If this object represents an interface, this method
always returns the java.lang.Object
class.
To obtain the super interfaces
extended by that interface, call getInterfaces()
.
instrument()
on every CtMethod
and CtConstructor
object
in the class.
Parameters: converter specifies how to modify.
instrument()
on every CtMethod
and CtConstructor
object
in the class.
Parameters: editor specifies how to modify.
true
if this object represents an annotation type.
Since: 3.2
true
if this object represents an array type.true
if this object represents an enum.
Since: 3.2
true
if this object represents an interface.true
if this object represents a primitive
Java type: boolean, byte, char, short, int, long, float, double,
or void.The following command invokes this method:
java -jar javassist.jar
See Also: getClassInitializer
CtClass
, which encloses the nested class, is modified
since a class file includes a list of nested classes.
The current implementation only supports a static nested class.
isStatic
must be true.
Parameters: name the simple name of the nested class. isStatic true if the nested class is static.
Parameters: prefix the prefix of the member name.
CodeAttribute
s (method bodies) of the class,
to minimize the memory footprint.
After calling this method, the class is read only.
It cannot be modified any more.
Furthermore, toBytecode()
,
writeFile()
, toClass()
,
or instrument()
cannot be called.
However, the method names and signatures in the class etc.
are still accessible.
toBytecode()
, writeFile()
, and
toClass()
internally call this method.
See Also: toBytecode toClass writeFile instrument
CtClass
Parameters: c removed constructor.
Throws: NotFoundException if the constructor is not found.
Parameters: f removed field.
Throws: NotFoundException if the field is not found.
Parameters: m removed method.
Throws: NotFoundException if the method is not found.
newName
for all occurrences of a class
name oldName
in the class file.
Parameters: oldName replaced class name newName substituted class name
map
.
All the class names appearing in the class file are tested
with map
to determine whether each class name is
replaced or not. Thus this method can be used for collecting
all the class names in the class file. To do that, first define
a subclass of ClassMap
so that get()
records all the given parameters. Then, make an instance of
that subclass as an empty hash-table. Finally, pass that instance
to this method. After this method finishes, that instance would
contain all the class names appearing in the class file.
Parameters: map the hashtable associating replaced class names with substituted names.
This is a convenient method mainly for adding
a user-defined attribute. For dealing with attributes, see the
javassist.bytecode
package. For example, the following
expression adds an attribute info
to a class file.
getClassFile().addAttribute(info)
Parameters: name attribute name data attribute value
See Also: AttributeInfo
Parameters: list a list of the CtClass
objects
representing interfaces, or
null
if the class implements
no interfaces.
If the class is a nested class, this method also modifies the class declaring that nested class (i.e. the enclosing class is modified).
Parameters: mod modifiers encoded by
javassist.Modifier
See Also: Modifier
Parameters: name fully-qualified name
If this object represents an interface, this method is equivalent
to addInterface()
; it appends clazz
to
the list of the super interfaces extended by that interface.
Note that an interface can extend multiple super interfaces.
CtClass
object.
Javassist can automatically prune a CtClass
object
when toBytecode()
(or toClass()
,
writeFile()
) is called.
Since a ClassPool
holds all instances of CtClass
even after toBytecode()
(or toClass()
,
writeFile()
) is called, pruning may significantly
save memory consumption.
If ClassPool.doPruning
is true, the automatic pruning
is on by default. Otherwise, it is off.
Parameters: stop disallow pruning if true. Otherwise, allow.
Returns: the previous status of pruning. true if pruning is already stopped.
This method returns true if the given class is identical to the class represented by this object.
true
if this class extends or implements
clazz
. It also returns true
if
this class is the same as clazz
.Returns: the contents of the class file.
This method dose not close the output stream in the end.
Parameters: out the output stream that a class file is written to.
java.lang.Class
object.
Once this method is called, further modifications are not
allowed any more.
To load the class, this method uses the context class loader
of the current thread. If the program is running on some application
server, the context class loader might be inappropriate to load the
class.
This method is provided for convenience. If you need more complex functionality, you should write your own class loader.
Note: this method calls toClass()
in ClassPool
.
Warining: A Class object returned by this method may not work with a security manager or a signed jar file because a protection domain is not specified.
java.lang.Class
object.
Once this method is called, further modifications are not allowed
any more.
The class file represented by this CtClass
is
loaded by the given class loader to construct a
java.lang.Class
object. Since a private method
on the class loader is invoked through the reflection API,
the caller must have permissions to do that.
An easy way to obtain ProtectionDomain
object is
to call getProtectionDomain()
in java.lang.Class
. It returns the domain that
the class belongs to.
This method is provided for convenience. If you need more complex functionality, you should write your own class loader.
Note: this method calls toClass()
in ClassPool
.
Parameters: loader the class loader used to load this class.
If it is null, the class loader returned by
getClassLoader is used. domain the protection domain that the class belongs to.
If it is null, the default domain created
by java.lang.ClassLoader
is used.
Since: 3.3
See Also: ClassPool
Deprecated: Replaced by toClass
Converts this class to ajava.lang.Class
object.
Warining: A Class object returned by this method may not work with a security manager or a signed jar file because a protection domain is not specified.
CtClass
object in the current directory.
Once this method is called, further modifications are not
possible any more.CtClass
object on a local disk.
Once this method is called, further modifications are not
possible any more.
Parameters: directoryName it must end without a directory separator.