diff options
Diffstat (limited to 'tests/new/IndeterminateArgsCE.java')
-rw-r--r-- | tests/new/IndeterminateArgsCE.java | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tests/new/IndeterminateArgsCE.java b/tests/new/IndeterminateArgsCE.java new file mode 100644 index 000000000..bee26a8dd --- /dev/null +++ b/tests/new/IndeterminateArgsCE.java @@ -0,0 +1,76 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import java.util.Arrays; + +/** @testcase PR#764 binding args with indeterminate prefix and suffix */ +public class IndeterminateArgsCE { + public static void main (String[] args) { + STarget c; + c = new STarget(); + c = new STarget("s1"); + c = new STarget("s1", "s2"); + c = new STarget("s1", "s2", "s3"); + c.f(); + c.f("s1"); + c.f("s1", "s2"); + c.f("s1", "s2", "s3"); + OTarget o; + o = new OTarget(); + o = new OTarget("o1"); + o = new OTarget("o1", "o2"); + o = new OTarget("o1", "o2", "o3"); + o.f(); + o.f("o1"); + o.f("o1", "o2"); + o.f("o1", "o2", "o3"); + } +} + +class OTarget { + OTarget() { } + OTarget(String s1) { } + OTarget(String s1, Object s2) { } // CE + OTarget(String s1, Object s2, String s3) { } // CE + + void f() { } + void f(String s1) { } + void f(String s1, Object s2) { } // CE + void f(String s1, Object s2, String s3) { } // CE +} +class STarget { + STarget() { } + STarget(String s1) { } + STarget(String s1, String s2) { } // CE + STarget(String s1, String s2, String s3) { } + + void f() { } + void f(String s1) { } + void f(String s1, String s2) { } // CE + void f(String s1, String s2, String s3) { } +} + +aspect A { + + void check(String pc, JoinPoint jp) { + Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes(); + //T.e(pc + ": " + Arrays.asList(types)); + } + + pointcut safeS() : target(STarget) && (call(new(..)) || call(* *(..))); + pointcut safeO() : target(OTarget) && (call(new(..)) || call(* *(..))); + + pointcut o1Anywhere() : args(.., Object, ..); + pointcut s1Anywhere() : args(.., String, ..); + pointcut bo1Anywhere(Object o) : args(.., o, ..); + pointcut bs1Anywhere(String s) : args(.., s, ..); + + before() : safeO() && o1Anywhere() { check ("o1Anywhere()", thisJoinPoint); } + before(Object o1) : safeO() && bo1Anywhere(o1) { check ("bo1Anywhere(o1)", thisJoinPoint); } + before() : safeS() && s1Anywhere() { check ("s1Anywhere()", thisJoinPoint); } + before(String s1) : safeS() && bs1Anywhere(s1) { check ("bs1Anywhere(s1)", thisJoinPoint); } +} + + |