|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
This represents a piece of code in the program.
It is formed of a set of instructions and can be implemented at bytecode or source-code level.
Typically, a code in the program comes from method bodies (it can be init methods (instance or static) or regular methods (instance or static) with any kind of visibility modifiers (public, protected, private).
So, this class allows the client to retrieve code locators on
instructions within this code. This locators shall be used
conjointly whith an Instrumentor
implementation in order to perform aspetual transformations of the
program (before/after/around type).
The getLocator()
method returns the locator for the whole
method and can be used to implement callee-side transformations
before/after/around the callee method.
The other set of locating methods returns locators that allows the client to implement caller-side transformations (e.g. when the code accesses a field or calls a method).
Instrumentor
,
CodeLocator
,
Method.getBody()
Method Summary | |
CodeLocator |
getCallLocator(Method calleeMethod)
Returns a call locator for the given callee method. |
CodeLocator |
getCatchLocator(Class exceptionType)
Returns a exception catching locator in the current body. |
CodeLocator |
getLocator()
Returns the code locator that corresponds to this code. |
CodeLocator |
getReadLocator(Field readField)
Returns a field reading locator in the current body. |
CodeLocator |
getThrowLocator(Class exceptionType)
Returns a exception throwing locator in the current body. |
CodeLocator |
getWriteLocator(Field writtenField)
Returns a field writing locator in the current body. |
Method Detail |
public CodeLocator getLocator()
For instance, if a code is a set of instructions called
code
, then the locator will designate
<code>
.
This locator is typically used to locate a whole method body.
Method.getBody()
public CodeLocator getCallLocator(Method calleeMethod)
For instance, a call locator for method m()
designates the parts between <>
in the
following code.
[...] aLocalVariable.<m()>; [...] aMethodParameter.<m()>; [...] aField.<m()>; [...] <m()> // when m is a method of the class the current code belongs to [...]
If the given method is a static method, the locator follows
the same principles, as for constructors. For instance if the
current method is the init
method of class
C
:
[...] aVar = <new C()>; [...]
calleeMethod
- the method that is called from the current
codepublic CodeLocator getReadLocator(Field readField)
For instance, a field read locator for field f
designates the parts between <>
in the
following code.
[...] <f>.m(); [...] aVarOrFieldOrParam = <f>; [...]
readField
- the field that is read from the current codepublic CodeLocator getWriteLocator(Field writtenField)
For instance, a field write locator for field f
designates the parts between <>
in the
following code.
[...] <f=> aVarOrFieldOrParam; [...]
writtenField
- the field that is written from the current
codepublic CodeLocator getThrowLocator(Class exceptionType)
For instance, an exception throw locator for exception of
type E
designates the parts between
<>
in the following code.
[...] <throw> new E(); [...] throw new AnotherExceptionType(); [...]
exceptionType
- the type of the throwed exceptionpublic CodeLocator getCatchLocator(Class exceptionType)
For instance, an exception catch locator for exception of
type E
designates the parts between
<>
in the following code.
[...] try { [...] } catch(E e1) { <[...]> } catch(AnotherExceptionType e2) { [...] }; [...]
exceptionType
- the type of the throwed exception
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |