abstract aspect GenericAbstractAspect{ abstract protected pointcut pc(); before() : pc() {} } aspect Concrete extends GenericAbstractAspect { // should get circular dependency error message from this protected pointcut pc() : pc(); } aspect Concrete2 extends GenericAbstractAspect { // this should compile as expected protected pointcut pc() : p1(); pointcut p1() : call(void Concrete2.foo(..)); } aspect Concrete3 extends GenericAbstractAspect { // should get circular dependency error message from this protected pointcut pc() : pc1(); pointcut pc1() : pc2(); pointcut pc2() : pc(); }