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