]> source.dussan.org Git - aspectj.git/commitdiff
204505: testcode and fix: poorly documented method in ResolvedMemberImpl now creates...
authoraclement <aclement>
Tue, 19 Feb 2008 22:01:34 +0000 (22:01 +0000)
committeraclement <aclement>
Tue, 19 Feb 2008 22:01:34 +0000 (22:01 +0000)
tests/bugs160/pr204505/Bug.java [new file with mode: 0644]
tests/bugs160/pr204505/GenericInterfaceWithGenericArgumentPointcutBug.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc160/Ajc160Tests.java
tests/src/org/aspectj/systemtest/ajc160/ajc160.xml

diff --git a/tests/bugs160/pr204505/Bug.java b/tests/bugs160/pr204505/Bug.java
new file mode 100644 (file)
index 0000000..e1e1ec5
--- /dev/null
@@ -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 (file)
index 0000000..f355eb6
--- /dev/null
@@ -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++;
+               }
+       }
+}
+
+
+
index 56a16772b8fa82861354b76d669ef9a538e6dce7..3b635dd4b790403ddcfb3252e26a9cdebb5e6a4c 100644 (file)
@@ -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"); }
index 7fc993fc2ecae14e38175d2e35d5b54f6af8fe83..8d42258217ab7efc5d451f93a817b2856abddb51 100644 (file)
@@ -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"/>