javassist

Class CtNewMethod

public class CtNewMethod extends Object

A collection of static methods for creating a CtMethod. An instance of this class does not make any sense.

See Also: addMethod

Method Summary
static CtMethodabstractMethod(CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, CtClass declaring)
Creates a public abstract method.
static CtMethodcopy(CtMethod src, CtClass declaring, ClassMap map)
Creates a copy of a method.
static CtMethodcopy(CtMethod src, String name, CtClass declaring, ClassMap map)
Creates a copy of a method with a new name.
static CtMethoddelegator(CtMethod delegate, CtClass declaring)
Creates a method forwarding to a delegate in a super class.
static CtMethodgetter(String methodName, CtField field)
Creates a public getter method.
static CtMethodmake(String src, CtClass declaring)
Compiles the given source code and creates a method.
static CtMethodmake(String src, CtClass declaring, String delegateObj, String delegateMethod)
Compiles the given source code and creates a method.
static CtMethodmake(CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, String body, CtClass declaring)
Creates a public (non-static) method.
static CtMethodmake(int modifiers, CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, String body, CtClass declaring)
Creates a method.
static CtMethodsetter(String methodName, CtField field)
Creates a public setter method.
static CtMethodwrapped(CtClass returnType, String mname, CtClass[] parameterTypes, CtClass[] exceptionTypes, CtMethod body, CtMethod.ConstParameter constParam, CtClass declaring)
Creates a wrapped method.

Method Detail

abstractMethod

public static CtMethod abstractMethod(CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, CtClass declaring)
Creates a public abstract method.

Parameters: returnType the type of the returned value mname the method name parameters a list of the parameter types exceptions a list of the exception types declaring the class to which the created method is added.

See Also: (CtClass,String,CtClass[],CtClass)

copy

public static CtMethod copy(CtMethod src, CtClass declaring, ClassMap map)
Creates a copy of a method. This method is provided for creating a new method based on an existing method.

Parameters: src the source method. declaring the class to which the created method is added. map the hashtable associating original class names with substituted names. It can be null.

See Also: CtMethod

copy

public static CtMethod copy(CtMethod src, String name, CtClass declaring, ClassMap map)
Creates a copy of a method with a new name. This method is provided for creating a new method based on an existing method.

Parameters: src the source method. name the name of the created method. declaring the class to which the created method is added. map the hashtable associating original class names with substituted names. It can be null.

See Also: CtMethod

delegator

public static CtMethod delegator(CtMethod delegate, CtClass declaring)
Creates a method forwarding to a delegate in a super class. The created method calls a method specified by delegate with all the parameters passed to the created method. If the delegate method returns a value, the created method returns that value to the caller. The delegate method must be declared in a super class.

The following method is an example of the created method.

The name of the created method can be changed by setName().

Parameters: delegate the method that the created method forwards to. declaring the class to which the created method is added.

getter

public static CtMethod getter(String methodName, CtField field)
Creates a public getter method. The getter method returns the value of the specified field in the class to which this method is added. The created method is initially not static even if the field is static. Change the modifiers if the method should be static.

Parameters: methodName the name of the getter field the field accessed.

make

public static CtMethod make(String src, CtClass declaring)
Compiles the given source code and creates a method. The source code must include not only the method body but the whole declaration, for example,

Parameters: src the source text. declaring the class to which the created method is added.

make

public static CtMethod make(String src, CtClass declaring, String delegateObj, String delegateMethod)
Compiles the given source code and creates a method. The source code must include not only the method body but the whole declaration, for example,

If the source code includes $proceed(), then it is compiled into a method call on the specified object.

Parameters: src the source text. declaring the class to which the created method is added. delegateObj the source text specifying the object that is called on by $proceed(). delegateMethod the name of the method that is called by $proceed().

make

public static CtMethod make(CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, String body, CtClass declaring)
Creates a public (non-static) method. The created method cannot be changed to a static method later.

Parameters: returnType the type of the returned value. mname the method name. parameters a list of the parameter types. exceptions a list of the exception types. body the source text of the method body. It must be a block surrounded by {}. If it is null, the created method does nothing except returning zero or null. declaring the class to which the created method is added.

make

public static CtMethod make(int modifiers, CtClass returnType, String mname, CtClass[] parameters, CtClass[] exceptions, String body, CtClass declaring)
Creates a method.

Parameters: modifiers access modifiers. returnType the type of the returned value. mname the method name. parameters a list of the parameter types. exceptions a list of the exception types. body the source text of the method body. It must be a block surrounded by {}. If it is null, the created method does nothing except returning zero or null. declaring the class to which the created method is added.

See Also: Modifier

setter

public static CtMethod setter(String methodName, CtField field)
Creates a public setter method. The setter method assigns the value of the first parameter to the specified field in the class to which this method is added. The created method is not static even if the field is static. You may not change it to be static by setModifiers() in CtBehavior.

Parameters: methodName the name of the setter field the field accessed.

wrapped

public static CtMethod wrapped(CtClass returnType, String mname, CtClass[] parameterTypes, CtClass[] exceptionTypes, CtMethod body, CtMethod.ConstParameter constParam, CtClass declaring)
Creates a wrapped method. The wrapped method receives parameters in the form of an array of Object.

The body of the created method is a copy of the body of a method specified by body. However, it is wrapped in parameter-conversion code.

The method specified by body must have this singature:

The type of the cvalue depends on constParam. If constParam is null, the signature must be:

The method body copied from body is wrapped in parameter-conversion code, which converts parameters specified by parameterTypes into an array of Object. The returned value is also converted from the Object type to the type specified by returnType. Thus, the resulting method body is as follows:

The variables p0, p2, ... represent formal parameters of the created method. The value of cvalue is specified by constParam.

If the type of a parameter or a returned value is a primitive type, then the value is converted into a wrapper object such as java.lang.Integer. If the type of the returned value is void, the returned value is discarded.

Example:

where the class Sample is as follows:

This program produces a class intVector:

Note that the type of the parameter to add() depends only on the value of argTypes passed to CtNewMethod.wrapped(). Thus, it is easy to modify this program to produce a StringVector class, which is a vector containing only String objects, and other vector classes.

Parameters: returnType the type of the returned value. mname the method name. parameterTypes a list of the parameter types. exceptionTypes a list of the exception types. body the method body (must not be a static method). constParam the constant parameter (maybe null). declaring the class to which the created method is added.

Javassist, a Java-bytecode translator toolkit.
Copyright (C) 1999-2006 Shigeru Chiba. All Rights Reserved.