--- /dev/null
+public abstract aspect Base pertypewithin(*) {
+ before(): execution(* *(..)) && !within(Base+) {
+ System.err.println("advice fired "+thisJoinPoint.getSourceLocation().getWithinType());
+ }
+}
+
--- /dev/null
+public abstract aspect Base2 pertypewithin(*) {
+ abstract pointcut scope();
+
+ before(): execution(* *(..)) && !within(Base2+) && scope() {
+ System.err.println("advice fired "+thisJoinPoint.getSourceLocation().getWithinType());
+ }
+}
+
--- /dev/null
+public class Code {
+ public static void main(String[] argv) {
+ new Dode().foo();
+ }
+}
--- /dev/null
+public class Dode {
+ public void foo() {}
+}
--- /dev/null
+<aspectj>
+ <aspects>
+ <concrete-aspect name="SubAspect" extends="Base" >
+ <pointcut name="scope" expression="within(*)"/>
+ </concrete-aspect>
+ </aspects>
+ <!-- weaver options="-verbose -showWeaveInfo -debug"-->
+ <weaver options="">
+ </weaver>
+</aspectj>
--- /dev/null
+<aspectj>
+ <aspects>
+ <concrete-aspect name="SubAspect" extends="Base" perclause="pertypewithin(D*)">
+
+ </concrete-aspect>
+ </aspects>
+ <weaver>
+ </weaver>
+</aspectj>
--- /dev/null
+<aspectj>
+ <aspects>
+ <concrete-aspect name="SubAspect" extends="Base2" perclause="pertypewithin(*)">
+ <pointcut name="scope" expression="within(D*)"/>
+ </concrete-aspect>
+ </aspects>
+ <!-- weaver options="-verbose -showWeaveInfo -debug"-->
+ <weaver options="">
+ </weaver>
+</aspectj>
--- /dev/null
+<aspectj>
+ <aspects>
+ <concrete-aspect name="SubAspect" extends="Base2" perclause="persausage(*)">
+ <pointcut name="scope" expression="within(D*)"/>
+ </concrete-aspect>
+ </aspects>
+ <!-- weaver options="-verbose -showWeaveInfo -debug"-->
+ <weaver options="">
+ </weaver>
+</aspectj>
--- /dev/null
+aop1 - ptw base aspect with concrete aspect including single pointcut
+aop2 - ptw sub aspect limiting application to D* type (no xml pointcut)
+aop3 - ptw sub aspect, concretized scope in sub aspect