|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import org.aspectj.testing.Tester;
-
- public class AroundInnerCalls13 {
- public static void main(String[] args) {
- new Outer().foo();
-
- Tester.check("Outer.foo() calls Outer.Inner.mi()");
- Tester.check("Outer.foo() calls Outer.InnerRandom.nextHook(..)");
- Tester.check("Outer.InnerRandom.nextHook(..) calls Random.next(..)");
- Tester.check("Outer.Inner.mi() calls PrintStream.println(..)");
-
- Tester.check("X.toString()");
- Tester.check("Outer.foo() calls Random.nextInt(..)");
- }
- }
-
- class Outer {
- private class Inner extends Object {
- public void mi() {
- System.out.println(".");
- }
- }
-
- public void foo() {
- new Inner().mi();
- new InnerRandom().nextHook(2);
-
- new java.util.Random() { public String toString() { Tester.note("X.toString()"); return "X"; } }.nextInt(2);
- }
-
- private class InnerRandom extends java.util.Random {
- public int nextHook(int bits) {
- return next(bits);
- }
- }
- }
-
- aspect A {
- Object around(): call(* *(..)) && !within(A) {
- // System.out.println
- Tester.note
- (thisEnclosingJoinPointStaticPart.getSignature().toShortString() +
- " calls " + thisJoinPointStaticPart.getSignature().toShortString());
- return proceed();
- }
-
- before(Object caller, Object callee):
- this(caller) && target(callee) && call(* *(..)) && !within(A)
- {
- System.out.println(thisEnclosingJoinPointStaticPart.getSignature().toShortString() +
- " calls " + thisJoinPointStaticPart.getSignature().toShortString());
- System.out.println
- (caller + "." + thisEnclosingJoinPointStaticPart.getSignature().getName() +
- " calls " + callee + "." + thisJoinPoint.getSignature().getName());
- }
- }
|