public class pr115250 { public static void main(String[] args) { test(); } public static void test() { new C(); } static class C { C() { System.err.println("C.new() running"); } } // properly get compiler error wrt return type of join point static aspect Normal { C around() : execution(C.new()) { return proceed(); } } // no compiler error wrt return type of join point static abstract aspect SS { abstract protected pointcut creation(); Target around() : creation() { // expect CE for execution(C.new()); System.err.println("Advice running"); return proceed(); } } static aspect A extends SS { protected pointcut creation() : execution(C.new()); } }