Community
Participate
Working Groups
I put my general aspect with an abstract pointcut into one package. The application-specific (concrete) aspect should be located in another package: // File aspects/AbstractAspect.java package aspects; public abstract aspect AbstractAspect { abstract pointcut myPointcut(); before(): myPointcut() { System.out.println("before myPointcut."); } } // File myApp.ConcreteAspect.java package myApp; public aspect ConcreteAspect extends aspects.AbstractAspect { pointcut myPointcut(): execution( void myApp.RunTest.say(String)); } // File myApp/RunTest.java package myApp; public class RunTest{ public static void main(String[] args){ say( "Hello"); } public static void say(String msg){ System.out.println(msg); } } The ajc-compilers in version 1.1.1 and 1.2rc1 don't compile it: [jb@SHARK test]$ /usr/local/java/aspectj-1.2rc1/bin/ajc -classpath .:/usr/local/java/aspectj-1.2rc1/lib/aspectjrt.jar @default.lst /home/jb/projects/test/aspects/AbstractAspect.java:5 error inherited abstract pointcut aspects.AbstractAspect.myPointcut() is not made concrete in myApp.ConcreteAspect abstract pointcut myPointcut(); ^^^^^^^^^^ /home/jb/projects/test/myApp/ConcreteAspect.java:4 error inherited abstract pointcut aspects.AbstractAspect.myPointcut() is not made concrete in myApp.ConcreteAspect public aspect ConcreteAspect extends aspects.AbstractAspect ^^^^^^^^^^^^^ 2 errors If you move ConcreteAspect into the same package as the abstract aspect it works fine.
Sorry, I found out that I have to declare the abstract pointcut as public.