summaryrefslogtreecommitdiffstats
path: root/tests/new
diff options
context:
space:
mode:
authorehilsdal <ehilsdal>2003-11-18 02:43:31 +0000
committerehilsdal <ehilsdal>2003-11-18 02:43:31 +0000
commit393f65bdec7a0822eddd55af22a8f7fce9bc58cd (patch)
tree673ea8f88d6f7554a80df486bee560b2b3a95948 /tests/new
parent07cdee49d842cfc761a24c92e611042812719699 (diff)
downloadaspectj-393f65bdec7a0822eddd55af22a8f7fce9bc58cd.tar.gz
aspectj-393f65bdec7a0822eddd55af22a8f7fce9bc58cd.zip
Work on Bugzilla 42668: effect of an after returning type incompatible with a join point return type
* fix to semantics document to describe correct semantics * checkin of failing coverage test case for correct semantics
Diffstat (limited to 'tests/new')
-rw-r--r--tests/new/AfterReturningParamMatching.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/new/AfterReturningParamMatching.java b/tests/new/AfterReturningParamMatching.java
new file mode 100644
index 000000000..062bfa541
--- /dev/null
+++ b/tests/new/AfterReturningParamMatching.java
@@ -0,0 +1,72 @@
+import org.aspectj.testing.Tester;
+
+// this test verifies the matching behaivor for after returning with a typed parameter.
+
+public class AfterReturningParamMatching {
+ public static void main(String[] args) {
+ goBoolean(false);
+ Tester.checkAndClearEvents(new String[] { "Object" });
+
+ goByte(1);
+ Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object"});
+
+ goInt(2);
+ Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object" });
+
+ goLong(3);
+ Tester.checkAndClearEvents(new String[] { "byte", "int", "long", "Object" });
+
+ goObject(new Object());
+ Tester.checkAndClearEvents(new String[] { "Object" });
+
+ goObject(new Integer(4));
+ Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" });
+
+ goObject(null);
+ Tester.checkAndClearEvents(new String[] { "Object" });
+
+ goNumber(new Long(5));
+ Tester.checkAndClearEvents(new String[] { "Object", "Number" });
+
+ goNumber(new Integer(6));
+ Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" });
+
+ goNumber(null);
+ Tester.checkAndClearEvents(new String[] { "Object", "Number" });
+
+ goInteger(new Integer(7));
+ Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" });
+
+ goInteger(null);
+ Tester.checkAndClearEvents(new String[] { "Object", "Number", "Integer" });
+
+ }
+ static boolean goBoolean(boolean b) { return b; }
+ static byte goByte(int i) { return (byte) i; }
+ static int goInt(int i) { return i; }
+ static long goLong(int i) { return (long) i; }
+
+ static Object goObject(Object o) { return o; }
+ static Number goNumber(Number o) { return o; }
+ static Integer goInteger(Integer o) { return o; }
+}
+
+aspect A {
+
+ pointcut methodsInQuestion():
+ call(* goBoolean(*)) ||
+ call(* goByte(*)) ||
+ call(* goInt(*)) ||
+ call(* goLong(*)) ||
+ call(* goObject(*)) ||
+ call(* goNumber(*)) ||
+ call(* goInteger(*));
+
+ after() returning(byte b): methodsInQuestion() { Tester.event("byte"); }
+ after() returning(int b): methodsInQuestion() { Tester.event("int"); }
+ after() returning(long b): methodsInQuestion() { Tester.event("long"); }
+ after() returning(Object b): methodsInQuestion() { Tester.event("Object"); }
+ after() returning(Number b): methodsInQuestion() { Tester.event("Number"); }
+ after() returning(Integer b): methodsInQuestion() { Tester.event("Integer"); }
+
+} \ No newline at end of file