Hi all. We have some existing aspects that use @DeclareParents to add an 
interface with a default implementation
to some classes. We have been using Spring to create proxies based on our 
aspects at runtime, however we have
hit some issues with code signing  (it's a Webstart app) so I'm trying to get 
compile-time weaving going instead.

I seem to be hitting some issues though. I'll leave the Eclipse AJDT issues 
aside for now, I'll just concentrate on
issues running the AspectJ compiler on its own.

Before I start - one odd thing I noticed is that when running both the 1.6.4 
compiler and the the latest development
one (from aspectj-DEVELOPMENT-20090612201410.jar), the compiler reports as 
being version 1.6.3, I don't know if that's
a source of problems or not:

>\development\aspectj1.6.4\bin\ajc -version
AspectJ Compiler 1.6.3 (1.6.3 - Built: Tuesday Dec 23, 2008 at 17:12:30 GMT) - 
Eclipse Compiler 0.785_R33x, 3.3

I have a couple of test aspects and a target file that should get woven 
accordingly (imports omitted for brevity):

package aspects;
@Aspect
public class ParentsAspect {

    @DeclareParents(value = "test.Foo", defaultImpl = DebugDefault.class)
    public Runnable runnable;

    public static class DebugDefault implements Runnable {
        public void run() {
            System.out.println("hi there from ParentsAspect");
        }
    }
}

@Aspect
public class MixinAspect {
    @DeclareMixin(value = "test.Foo")
    public static Runnable foo(Object target) {
        return new DebugDefault();
    }

    public static class DebugDefault implements Runnable {
        public void run() {
            System.out.println("Hi there from MixinAspect");
        }
    }
}

package test;
public class Foo {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(new 
Foo().getClass().getInterfaces()));
        ((Runnable) new Foo()).run();
    }
}

When I try to apply the parents aspect, I get the following (no warnings about 
versions from the dev build btw, but otherwise the same results):

>\development\aspectj1.6.4\bin\ajc -outjar aspects.jar 
>src\java\aspects\ParentsAspect.java -1.5
[warning] bad version number found in 
c:\Development\aspectj1.6.4\lib\aspectjrt.jar expected 1.6.3 found 1.6.4


1 warning

>\development\aspectj1.6.4\bin\ajc -aspectpath aspects.jar -outjar app.jar 
>src\java\test\Foo.java -showWeaveInfo -1.5
[warning] bad version number found in 
c:\Development\aspectj1.6.4\lib\aspectjrt.jar expected 1.6.3 found 1.6.4

C:\Development\eclipse-workspace\e3.4.2\AspectJTestAspect\src\java\test\Foo.java:12
 [error] The type Foo must implement
the inherited abstract method Runnable.run()
public class Foo {
             ^^

1 error, 1 warning

So it has picked up that Foo should implement Runnable, but hasn't supplied the 
implementation.

If I try the mixin aspect, I get no errors, no weave info and Foo has not had 
the aspect applied.

Interestingly, I get the first error for BOTH aspects in Eclipse using the 
AJDT, but only when Foo is in a different project to the aspects - when in the 
same project it works fine.

So, am I doing something fundamentally wrong? Am I using a dodgy compiler? (I 
downloaded the dev and 1.6.4 builds from eclipse.org yesterday) Something else 
strange going on?

Any help much appreciated.

Cheers

Tom
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to