diff options
Diffstat (limited to 'tests/design/calls/Simple.java')
-rw-r--r-- | tests/design/calls/Simple.java | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/tests/design/calls/Simple.java b/tests/design/calls/Simple.java new file mode 100644 index 000000000..f1277bde0 --- /dev/null +++ b/tests/design/calls/Simple.java @@ -0,0 +1,173 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.*; + +public class Simple { + public static void main(String[] args) { + new Simple().fromInstanceMethod("a1", 1); + //Tester.printEvents(); + Tester.checkAndClearEvents(new String[] { + "this(simple)", + "call(C.*)", + "args(..,a1)", + "C.toStaticMethod(a1)", + + "this(simple)", + "call(SubC.*)", + "args(..,a1)", + "SubC.toStaticMethod(a1)", + + "this(simple)&&target(c)", + "target(c)", + "this(simple)", + "call(C.*)", + "args(..,a1)", + "C.toInstanceMethod(a1)", + + "this(simple)&&target(subc)", + "target(subc)", + "this(simple)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "args(..,a1)", + "SubC.toInstanceMethod(a1)", + + "this(simple)&&target(subc)", + "target(subc)", + "this(simple)", + "call(C.*)", + "call(SubC.*)", + "call(SubC.*)&&target(C)", + "call(C.*)&&target(SubC)", + "args(..,a1)", + "SubC.toInstanceMethod(a1)", + + //??? these events are not expected because advice on call join points + // isn't run when the calls are made reflectively -- Change from 1.0 to 1.1 + //"call(C.*)", + //"call(C.*)&&target(SubC)", + //"args(..,a1)", + "SubC.toInstanceMethod(a1)", + }); + Simple.fromStaticMethod("a2"); + //Tester.printEvents(); + Tester.checkAndClearEvents(new String[] { + "call(C.*)", + "args(..,a2)", + "C.toStaticMethod(a2)", + + "call(SubC.*)", + "args(..,a2)", + "SubC.toStaticMethod(a2)", + + "target(c)", + "call(C.*)", + "args(..,a2)", + "C.toInstanceMethod(a2)", + + "target(subc)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "args(..,a2)", + "SubC.toInstanceMethod(a2)", + + "target(subc)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "SubC.toInstanceMethod(2)", + }); + } + + public static void fromStaticMethod(String s) { + C.toStaticMethod(s); + SubC.toStaticMethod(s); + C c = new C(); + c.toInstanceMethod(0, s); + c = new SubC(); + c.toInstanceMethod(0, s); + c.toInstanceMethod(0, new Integer(2)); + } + + public void fromInstanceMethod(String s, int v) { + C.toStaticMethod(s); + SubC.toStaticMethod(s); + C c = new C(); + c.toInstanceMethod(v, s); + c = new SubC(); + c.toInstanceMethod(v, s); + SubC subc = new SubC(); + subc.toInstanceMethod(v, s); + doReflectiveCall(subc, v, s); + } + + void doReflectiveCall(C c, int v, String s) { + try { + Method m = + C.class.getMethod("toInstanceMethod", + new Class[] {Integer.TYPE, Object.class}); + m.invoke(c, new Object[] {new Integer(v), s}); + } catch (Exception e) { + Tester.event("unexpected exception: " + e); + } + } + + public String toString() { return "simple"; } +} + + +class C { + public static void toStaticMethod(Object s) { + Tester.event("C.toStaticMethod("+s+")"); + } + + public void toInstanceMethod(int value, Object str) { + Tester.event("C.toInstanceMethod("+str+")"); + } + public String toString() { return "c"; } +} + +class SubC extends C { + public static void toStaticMethod(Object s) { + Tester.event("SubC.toStaticMethod("+s+")"); + } + + public void toInstanceMethod(int x, Object str) { + Tester.event("SubC.toInstanceMethod("+str+")"); + } + public String toString() { return "subc"; } +} + +aspect A { + before(C c, Simple s): this(s) && target(c) { + Tester.event("this("+s+")&&target("+c+")"); + } + + before(C c): target(c) && within(Simple) { + Tester.event("target("+c+")"); + } + + before(Simple s): this(s) && call(* C+.*(..)) { + Tester.event("this("+s+")"); + } + + before(): call(* C.*(..)) { + Tester.event("call(C.*)"); + } + + before(): call(* SubC.*(..)) { + Tester.event("call(SubC.*)"); + } + + before(): call(* SubC.*(..)) && target(C) { + Tester.event("call(SubC.*)&&target(C)"); + } + + before(): call(* C.*(..)) && target(SubC) { + Tester.event("call(C.*)&&target(SubC)"); + } + + before(String s): args(.., s) && call(* C+.*(..)) { + //System.out.println(thisJoinPoint); + Tester.event("args(..,"+s+")"); + } +} |