aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authoraclement <aclement>2008-02-19 22:01:34 +0000
committeraclement <aclement>2008-02-19 22:01:34 +0000
commitb91e3abfe2d9fcafac1eabaefab0f1c3ba8ae55a (patch)
tree60d40a96b0cbc61d888867ab0784723c87a3a5e2 /tests
parent876e7d62bb8cd5313377adaf02db372a1e539b82 (diff)
downloadaspectj-b91e3abfe2d9fcafac1eabaefab0f1c3ba8ae55a.tar.gz
aspectj-b91e3abfe2d9fcafac1eabaefab0f1c3ba8ae55a.zip
204505: testcode and fix: poorly documented method in ResolvedMemberImpl now creates a sig based on the erasure of the type variable rather than using the type variable itself. Passes this case but could be related situations that fail...
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs160/pr204505/Bug.java16
-rw-r--r--tests/bugs160/pr204505/GenericInterfaceWithGenericArgumentPointcutBug.java88
-rw-r--r--tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc160/ajc160.xml12
4 files changed, 119 insertions, 1 deletions
diff --git a/tests/bugs160/pr204505/Bug.java b/tests/bugs160/pr204505/Bug.java
new file mode 100644
index 000000000..e1e1ec55e
--- /dev/null
+++ b/tests/bugs160/pr204505/Bug.java
@@ -0,0 +1,16 @@
+import java.util.*;
+
+interface GenericIFace<B> {
+ public void save(B bean);
+ public void saveAll(Collection<B> beans);
+}
+
+class C<A> implements GenericIFace<A> {
+ public void save(A bean) {}
+ public void saveAll(Collection<A> bean) {}
+}
+
+aspect X {
+ before(): execution(* GenericIFace.save*(..)) { }
+// before(): execution(* GenericIFace+.save*(..)) { }
+}
diff --git a/tests/bugs160/pr204505/GenericInterfaceWithGenericArgumentPointcutBug.java b/tests/bugs160/pr204505/GenericInterfaceWithGenericArgumentPointcutBug.java
new file mode 100644
index 000000000..f355eb6ee
--- /dev/null
+++ b/tests/bugs160/pr204505/GenericInterfaceWithGenericArgumentPointcutBug.java
@@ -0,0 +1,88 @@
+package mypackage;
+
+import java.util.Collection;
+import junit.framework.TestCase;
+
+/**
+ * A test case depicting the scenario where a parameterized interface includes a method
+ * that takes a parameterized object. A interface-based pointcut (that does not include
+ * '+') fails to select such a method.
+ *
+ * @author Ramnivas Laddad
+ *
+ */
+public class GenericInterfaceWithGenericArgumentPointcutBug extends TestCase {
+ private GenericInterface<String> testObject = new GenericImpl<String>();
+
+ public static void main(String[] args) throws Exception {
+ GenericInterfaceWithGenericArgumentPointcutBug instance = new GenericInterfaceWithGenericArgumentPointcutBug();
+ instance.setUp();
+ instance.testGenericInterfaceGenericArgExecution();
+ instance.setUp();
+ instance.testGenericInterfaceNonGenericArgExecution();
+ instance.setUp();
+ instance.testgenericInterfaceSubtypeGenericArgExecution();
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ TestAspect.aspectOf().genericInterfaceNonGenericArgExecutionCount = 0;
+ TestAspect.aspectOf().genericInterfaceGenericArgExecutionCount = 0;
+ TestAspect.aspectOf().genericInterfaceSubtypeGenericArgExecutionCount = 0;
+ }
+
+ public void testGenericInterfaceNonGenericArgExecution() {
+ testObject.save("");
+ assertEquals(1, TestAspect.aspectOf().genericInterfaceNonGenericArgExecutionCount);
+ }
+
+ public void testGenericInterfaceGenericArgExecution() {
+ testObject.saveAll(null);
+ assertEquals(1, TestAspect.aspectOf().genericInterfaceGenericArgExecutionCount);
+ }
+
+ public void testgenericInterfaceSubtypeGenericArgExecution() {
+ testObject.saveAll(null);
+ assertEquals(1, TestAspect.aspectOf().genericInterfaceSubtypeGenericArgExecutionCount);
+ }
+
+ static interface GenericInterface<T> {
+ public void save(T bean);
+ public void saveAll(Collection<T> beans);
+ }
+
+ static class GenericImpl<T> implements GenericInterface<T> {
+ public void save(T bean) {}
+ public void saveAll(Collection<T> beans) {}
+ }
+
+ static aspect TestAspect {
+ int genericInterfaceNonGenericArgExecutionCount;
+ int genericInterfaceGenericArgExecutionCount;
+ int genericInterfaceSubtypeGenericArgExecutionCount;
+
+ pointcut genericInterfaceNonGenericArgExecution()
+ : execution(* GenericInterface.save(..));
+
+ pointcut genericInterfaceGenericArgExecution()
+ : execution(* GenericInterface.saveAll(..));
+
+ pointcut genericInterfaceSubtypeGenericArgExecution()
+ : execution(* GenericInterface+.saveAll(..));
+
+ before() : genericInterfaceNonGenericArgExecution() {
+ genericInterfaceNonGenericArgExecutionCount++;
+ }
+
+ before() : genericInterfaceGenericArgExecution() {
+ genericInterfaceGenericArgExecutionCount++;
+ }
+
+ before() : genericInterfaceSubtypeGenericArgExecution() {
+ genericInterfaceSubtypeGenericArgExecutionCount++;
+ }
+ }
+}
+
+
+
diff --git a/tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java b/tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java
index 56a16772b..3b635dd4b 100644
--- a/tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java
@@ -19,9 +19,11 @@ import junit.framework.Test;
* These are tests for AspectJ1.6.0
*/
public class Ajc160Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
-
+
public void testBoundsCheckShouldFail_pr219298() { runTest("bounds check failure");}
public void testBoundsCheckShouldFail_pr219298_2() { runTest("bounds check failure - 2");}
+ public void testGenericMethodMatching_pr204505_1() { runTest("generics method matching - 1");}
+ public void testGenericMethodMatching_pr204505_2() { runTest("generics method matching - 2");}
public void testDecFieldProblem_pr218167() { runTest("dec field problem");}
public void testGenericsSuperITD_pr206911() { runTest("generics super itd"); }
public void testGenericsSuperITD_pr206911_2() { runTest("generics super itd - 2"); }
diff --git a/tests/src/org/aspectj/systemtest/ajc160/ajc160.xml b/tests/src/org/aspectj/systemtest/ajc160/ajc160.xml
index 7fc993fc2..8d4225821 100644
--- a/tests/src/org/aspectj/systemtest/ajc160/ajc160.xml
+++ b/tests/src/org/aspectj/systemtest/ajc160/ajc160.xml
@@ -3,6 +3,18 @@
<!-- AspectJ v1.6.0 Tests -->
<suite>
+ <ajc-test dir="bugs160/pr204505" title="generics method matching - 1">
+ <compile options="-1.5 -showWeaveInfo" files="Bug.java">
+ <message kind="weave" text="execution(void C.save(java.lang.Object))"/>
+ <message kind="weave" text="execution(void C.saveAll(java.util.Collection))"/>
+ </compile>
+ </ajc-test>
+
+ <ajc-test dir="bugs160/pr204505" title="generics method matching - 2">
+ <compile options="-1.5" files="GenericInterfaceWithGenericArgumentPointcutBug.java"/>
+ <run class="mypackage.GenericInterfaceWithGenericArgumentPointcutBug"/>
+ </ajc-test>
+
<ajc-test dir="bugs160/pr219298" title="bounds check failure">
<compile options="-1.5" files="TestMarkers.java">
<message kind="error" line="11" text="Bound mismatch: The type TestMarkers.SubGenericsType is not a valid substitute for the bounded"/>