blob: 0903eae271a738a35a45c752c016c37f08d93383 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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());
}
}
|