Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Adding fields to a Class

Example:
--- Test.java ---
public class Test {

  public static void main(String[] argv) {
    A a = new A();
    B b = new B();
    if (a instanceof X.TLInterface) System.out.println("A has it");
    if (b instanceof X.TLInterface) System.out.println("B has it");
  }
}

class A {}
class B {
  public void run() {}
}

aspect X {
  interface TLInterface {}

  ThreadLocal TLInterface.local;

  declare parents: hasmethod(public void run(..)) implements TLInterface;

}
---------------

C:\temp>ajc -XhasMember Test.java -showWeaveInfo
Type 'X$TLInterface' (Test.java) has intertyped field from 'X'
(Test.java:'java.lang.ThreadLocal X$TLInterface.local')

Extending interface set for type 'B' (Test.java) to include
'X$TLInterface' (Test.java)

Type 'B' (Test.java) has intertyped field from 'X'
(Test.java:'java.lang.ThreadLocal X$TLInterface.local')


Andy.

2008/7/7 100ji <itz100ji@xxxxxxxxx>:
> Hi all,
>
> I want to add a ThreadLocal field to all the classes that contain the
> run method using aspects. Currently, I have the following aspect code
> that gives me a list of all classes that have the run method.
>
> public aspect AddTaintVarToThread {
>       pointcut startThreads(): execution(void *.run());
>
>       before(Object o) : startThreads() && target(o){
>       System.out.println("Hurray! Thread advice works!" +
> o.getClass().getName());
>       }
> }
>
> Once I get the class name, can I add a field to the class inside a
> method call in aspectj? Or more specifically, can I perform a
> inter-type declaration inside the advice? If I can't do it this way,
> are there better ways? I tried googling list archives but found
> nothing. Any pointers will prove helpful.
>
> TIA,
> -S-
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top