All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aopalliance.reflect.Code Maven / Gradle / Ivy

There is a newer version: 8.16.0
Show newest version

package org.aopalliance.reflect;

/**
 * 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 {@link org.aopalliance.instrument.Instrumentor} * implementation in order to perform aspetual transformations of the * program (before/after/around type). * *

The {@link #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). * * @see org.aopalliance.instrument.Instrumentor * @see CodeLocator * @see Method#getBody() */ public interface Code { /** * Returns the code locator that corresponds to this code. * *

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. * * @see Method#getBody() */ CodeLocator getLocator(); /** * Returns a call locator for the given callee method. * *

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()>;
    * [...]
    * 
* * @param calleeMethod the method that is called from the current * code */ CodeLocator getCallLocator(Method calleeMethod); /** * Returns a field reading locator in the current body. * *

For instance, a field read locator for field f * designates the parts between <> in the * following code. * *

    * [...]
    * <f>.m();
    * [...]
    * aVarOrFieldOrParam = <f>;
    * [...]
    * 
* * @param readField the field that is read from the current code */ CodeLocator getReadLocator(Field readField); /** * Returns a field writing locator in the current body. * *

For instance, a field write locator for field f * designates the parts between <> in the * following code. * *

    * [...]
    * <f=> aVarOrFieldOrParam;
    * [...]
    * 
* * @param writtenField the field that is written from the current * code */ CodeLocator getWriteLocator(Field writtenField); /** * Returns a exception throwing locator in the current body. * *

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();
    * [...]
    * 
* * @param exceptionType the type of the throwed exception */ CodeLocator getThrowLocator(Class exceptionType); /** * Returns a exception catching locator in the current body. * *

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) { [...] };
    * [...]
    * 
* * @param exceptionType the type of the throwed exception */ CodeLocator getCatchLocator(Class exceptionType); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy