Package javassist.tools.reflect
Class Reflection
- java.lang.Object
-
- javassist.tools.reflect.Reflection
-
- All Implemented Interfaces:
Translator
public class Reflection extends java.lang.Object implements Translator
The class implementing the behavioral reflection mechanism.If a class is reflective, then all the method invocations on every instance of that class are intercepted by the runtime metaobject controlling that instance. The methods inherited from the super classes are also intercepted except final methods. To intercept a final method in a super class, that super class must be also reflective.
To do this, the original class file representing a reflective class:
class Person { public int f(int i) { return i + 1; } public int value; }
is modified so that it represents a class:
class Person implements Metalevel { public int _original_f(int i) { return i + 1; } public int f(int i) { delegate to the metaobject } public int value; public int _r_value() { read "value" } public void _w_value(int v) { write "value" } public ClassMetaobject _getClass() { return a class metaobject } public Metaobject _getMetaobject() { return a metaobject } public void _setMetaobject(Metaobject m) { change a metaobject } }
- See Also:
ClassMetaobject
,Metaobject
,Loader
,Compiler
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.String
classMetaobjectClassName
(package private) static java.lang.String
classobjectAccessor
(package private) static java.lang.String
classobjectField
protected ClassPool
classPool
protected CodeConverter
converter
(package private) static java.lang.String
metaobjectClassName
(package private) static java.lang.String
metaobjectField
(package private) static java.lang.String
metaobjectGetter
(package private) static java.lang.String
metaobjectSetter
protected CtClass[]
readParam
(package private) static java.lang.String
readPrefix
protected CtMethod
trapMethod
protected CtMethod
trapRead
protected CtMethod
trapStaticMethod
protected CtMethod
trapWrite
(package private) static java.lang.String
writePrefix
-
Constructor Summary
Constructors Constructor Description Reflection()
Constructs a newReflection
object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private CtMethod
findOriginal(CtMethod m, boolean dontSearch)
private boolean
isExcluded(java.lang.String name)
boolean
makeReflective(java.lang.Class clazz, java.lang.Class metaobject, java.lang.Class metaclass)
Produces a reflective class.boolean
makeReflective(java.lang.String classname, java.lang.String metaobject, java.lang.String metaclass)
Produces a reflective class.boolean
makeReflective(CtClass clazz, CtClass metaobject, CtClass metaclass)
Produces a reflective class.private boolean
modifyClassfile(CtClass clazz, CtClass metaobject, CtClass metaclass)
void
onLoad(ClassPool pool, java.lang.String classname)
Inserts hooks for intercepting accesses to the fields declared in reflective classes.private void
processFields(CtClass clazz)
private void
processMethods(CtClass clazz, boolean dontSearch)
private void
processMethods0(int mod, CtClass clazz, CtMethod m, int identifier, boolean dontSearch)
void
rebuildClassFile(ClassFile cf)
private void
registerReflectiveClass(CtClass clazz)
Registers a reflective class.void
start(ClassPool pool)
Initializes the object.
-
-
-
Field Detail
-
classobjectField
static final java.lang.String classobjectField
- See Also:
- Constant Field Values
-
classobjectAccessor
static final java.lang.String classobjectAccessor
- See Also:
- Constant Field Values
-
metaobjectField
static final java.lang.String metaobjectField
- See Also:
- Constant Field Values
-
metaobjectGetter
static final java.lang.String metaobjectGetter
- See Also:
- Constant Field Values
-
metaobjectSetter
static final java.lang.String metaobjectSetter
- See Also:
- Constant Field Values
-
readPrefix
static final java.lang.String readPrefix
- See Also:
- Constant Field Values
-
writePrefix
static final java.lang.String writePrefix
- See Also:
- Constant Field Values
-
metaobjectClassName
static final java.lang.String metaobjectClassName
- See Also:
- Constant Field Values
-
classMetaobjectClassName
static final java.lang.String classMetaobjectClassName
- See Also:
- Constant Field Values
-
trapMethod
protected CtMethod trapMethod
-
trapStaticMethod
protected CtMethod trapStaticMethod
-
trapRead
protected CtMethod trapRead
-
trapWrite
protected CtMethod trapWrite
-
readParam
protected CtClass[] readParam
-
classPool
protected ClassPool classPool
-
converter
protected CodeConverter converter
-
-
Method Detail
-
isExcluded
private boolean isExcluded(java.lang.String name)
-
start
public void start(ClassPool pool) throws NotFoundException
Initializes the object.- Specified by:
start
in interfaceTranslator
- Parameters:
pool
- theClassPool
that this translator should use.- Throws:
NotFoundException
- if aCtClass
cannot be found.- See Also:
Loader
-
onLoad
public void onLoad(ClassPool pool, java.lang.String classname) throws CannotCompileException, NotFoundException
Inserts hooks for intercepting accesses to the fields declared in reflective classes.- Specified by:
onLoad
in interfaceTranslator
- Parameters:
pool
- theClassPool
that this translator should use.classname
- the name of the class being loaded.- Throws:
CannotCompileException
- if the code transformation by this method fails.NotFoundException
- if aCtClass
cannot be found.- See Also:
Loader
-
makeReflective
public boolean makeReflective(java.lang.String classname, java.lang.String metaobject, java.lang.String metaclass) throws CannotCompileException, NotFoundException
Produces a reflective class. If the super class is also made reflective, it must be done before the sub class.- Parameters:
classname
- the name of the reflective classmetaobject
- the class name of metaobjects.metaclass
- the class name of the class metaobject.- Returns:
false
if the class is already reflective.- Throws:
CannotCompileException
NotFoundException
- See Also:
Metaobject
,ClassMetaobject
-
makeReflective
public boolean makeReflective(java.lang.Class clazz, java.lang.Class metaobject, java.lang.Class metaclass) throws CannotCompileException, NotFoundException
Produces a reflective class. If the super class is also made reflective, it must be done before the sub class.- Parameters:
clazz
- the reflective class.metaobject
- the class of metaobjects. It must be a subclass ofMetaobject
.metaclass
- the class of the class metaobject. It must be a subclass ofClassMetaobject
.- Returns:
false
if the class is already reflective.- Throws:
CannotCompileException
NotFoundException
- See Also:
Metaobject
,ClassMetaobject
-
makeReflective
public boolean makeReflective(CtClass clazz, CtClass metaobject, CtClass metaclass) throws CannotCompileException, CannotReflectException, NotFoundException
Produces a reflective class. It modifies the givenCtClass
object and makes it reflective. If the super class is also made reflective, it must be done before the sub class.- Parameters:
clazz
- the reflective class.metaobject
- the class of metaobjects. It must be a subclass ofMetaobject
.metaclass
- the class of the class metaobject. It must be a subclass ofClassMetaobject
.- Returns:
false
if the class is already reflective.- Throws:
CannotCompileException
CannotReflectException
NotFoundException
- See Also:
Metaobject
,ClassMetaobject
-
registerReflectiveClass
private void registerReflectiveClass(CtClass clazz)
Registers a reflective class. The field accesses to the instances of this class are instrumented.
-
modifyClassfile
private boolean modifyClassfile(CtClass clazz, CtClass metaobject, CtClass metaclass) throws CannotCompileException, NotFoundException
-
processMethods
private void processMethods(CtClass clazz, boolean dontSearch) throws CannotCompileException, NotFoundException
-
processMethods0
private void processMethods0(int mod, CtClass clazz, CtMethod m, int identifier, boolean dontSearch) throws CannotCompileException, NotFoundException
-
findOriginal
private CtMethod findOriginal(CtMethod m, boolean dontSearch) throws NotFoundException
- Throws:
NotFoundException
-
processFields
private void processFields(CtClass clazz) throws CannotCompileException, NotFoundException
-
rebuildClassFile
public void rebuildClassFile(ClassFile cf) throws BadBytecode
- Throws:
BadBytecode
-
-