]> source.dussan.org Git - aspectj.git/commitdiff
testcode for 137496: problem with join point matching on calls to parameterized methods
authoraclement <aclement>
Fri, 21 Apr 2006 17:55:11 +0000 (17:55 +0000)
committeraclement <aclement>
Fri, 21 Apr 2006 17:55:11 +0000 (17:55 +0000)
tests/bugs152/pr137496/B.java [new file with mode: 0644]
tests/bugs152/pr137496/D.java [new file with mode: 0644]
tests/bugs152/pr137496/E.java [new file with mode: 0644]
tests/bugs152/pr137496/F.java [new file with mode: 0644]
tests/bugs152/pr137496/G.java [new file with mode: 0644]
tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java
tests/src/org/aspectj/systemtest/ajc152/ajc152.xml

diff --git a/tests/bugs152/pr137496/B.java b/tests/bugs152/pr137496/B.java
new file mode 100644 (file)
index 0000000..5351ed3
--- /dev/null
@@ -0,0 +1,28 @@
+interface P<T> {
+  public T pm(T t);
+//  public String pm2(String t);
+}
+
+interface C extends P<String> {
+  public void cm();
+}
+
+class CImpl implements C {
+  public void cm() {}
+  public String pm(String s)  { System.err.println(s);return s;}
+//  public String pm2(String s) { return s;}
+}
+
+public class B {
+
+  public static void main(String []argv) {
+    C test = new CImpl();
+    test.pm("foo"); // manifests as 'Object pm(Object) call' due to type C being used
+//    test.pm2("foo");
+  }
+}
+
+aspect X {
+  before(): call(* pm(..)) { System.err.println("advice");}
+//  before(): call(* pm2(..)) {}
+}
\ No newline at end of file
diff --git a/tests/bugs152/pr137496/D.java b/tests/bugs152/pr137496/D.java
new file mode 100644 (file)
index 0000000..db6cad5
--- /dev/null
@@ -0,0 +1,28 @@
+interface P<T> {
+  public T pm(T t);
+  public String pm2(String t);
+}
+
+interface C extends P<String> {
+  public void cm();
+}
+
+class CImpl implements C {
+  public void cm() {}
+  public String pm(String s)  { System.err.println(s);return s;}
+  public String pm2(String s) { System.err.println(s);return s;}
+}
+
+public class D {
+
+  public static void main(String []argv) {
+    CImpl test = new CImpl();
+    test.pm("foo"); // manifests as 'String pm(String) call' due to type CImpl being used
+    test.pm2("foo");
+  }
+}
+
+aspect X {
+  before(): call(* pm(..)) { System.err.println("advice");}
+  before(): call(* pm2(..)) { System.err.println("advice2");}
+}
\ No newline at end of file
diff --git a/tests/bugs152/pr137496/E.java b/tests/bugs152/pr137496/E.java
new file mode 100644 (file)
index 0000000..2abfed9
--- /dev/null
@@ -0,0 +1,24 @@
+interface P<T> {
+  public T pm(T t);
+}
+
+interface C extends P<String> {
+  public void cm();
+}
+
+class CImpl implements C {
+  public void cm() {}
+  public String pm(String s)  { System.err.println(s);return s;}
+}
+
+public class E {
+
+  public static void main(String []argv) {
+    C test = new CImpl();
+    test.pm("foo"); // manifests as 'Object pm(Object) call' due to type C being used
+  }
+}
+
+aspect X {
+  before(): call(* pm(String)) { System.err.println("advice");} // matches?
+}
\ No newline at end of file
diff --git a/tests/bugs152/pr137496/F.java b/tests/bugs152/pr137496/F.java
new file mode 100644 (file)
index 0000000..6960646
--- /dev/null
@@ -0,0 +1,24 @@
+interface P<T> {
+  public T pm(T t);
+}
+
+interface C extends P<String> {
+  public void cm();
+}
+
+class CImpl implements C {
+  public void cm() {}
+  public String pm(String s)  { System.err.println(s);return s;}
+}
+
+public class F {
+
+  public static void main(String []argv) {
+    C test = new CImpl();
+    test.pm("foo"); // manifests as 'Object pm(Object) call' due to type C being used
+  }
+}
+
+aspect X {
+  before(): call(String pm(..)) { System.err.println("advice");} // matches?
+}
\ No newline at end of file
diff --git a/tests/bugs152/pr137496/G.java b/tests/bugs152/pr137496/G.java
new file mode 100644 (file)
index 0000000..fd566df
--- /dev/null
@@ -0,0 +1,24 @@
+interface P<T> {
+  public T pm(T t);
+}
+
+interface C extends P<String> {
+  public void cm();
+}
+
+class CImpl implements C {
+  public void cm() {}
+  public String pm(String s)  { System.err.println(s);return s;}
+}
+
+public class G {
+
+  public static void main(String []argv) {
+    C test = new CImpl();
+    test.pm("foo"); // manifests as 'Object pm(Object) call' due to type C being used
+  }
+}
+
+aspect X {
+  before(): call(* pm(Object)) { System.err.println("advice");} // no match...
+}
\ No newline at end of file
index bff94e8cd31d9f96f098ad30a38330de1cddd348..0e812f5d423f065082a0d5a00f5ea4f65ae135a3 100644 (file)
@@ -17,6 +17,11 @@ import org.aspectj.testing.XMLBasedAjcTestCase;
 
 public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
        
+  public void testPointcutsAndGenerics_pr137496_1() { runTest("pointcuts and generics - B");}
+  public void testPointcutsAndGenerics_pr137496_2() { runTest("pointcuts and generics - D");}
+  public void testPointcutsAndGenerics_pr137496_3() { runTest("pointcuts and generics - E");}
+  public void testPointcutsAndGenerics_pr137496_4() { runTest("pointcuts and generics - F");}
+  public void testPointcutsAndGenerics_pr137496_5() { runTest("pointcuts and generics - G");}
   public void testAspectLibrariesAndASM_pr135001() { runTest("aspect libraries and asm");}
   public void testStackOverflow_pr136258() { runTest("stack overflow");}
   public void testIncorrectOverridesEvaluation13() { runTest("incorrect overrides evaluation - 1.3"); }
index 7ee33b7669bb372a1e389ffe72e03e94a8a4530d..2c9bd484bc06182f929b71b57e152a44e035ebed 100644 (file)
       <run class="StatisticsTypeImpl"/>
     </ajc-test>
     
+    <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - B">
+      <compile files="B.java" options="-1.5 -showWeaveInfo">
+        <!--message kind="weave" text="Join point 'method-call(java.lang.String C.pm(java.lang.String))' in Type 'B' (B.java:20) advised by before advice from 'X' (B.java:26)"/-->
+        <message kind="weave" text="Join point 'method-call(java.lang.Object C.pm(java.lang.Object))' in Type 'B' (B.java:20) advised by before advice from 'X' (B.java:26)"/>
+        <!--message kind="weave" text="Join point 'method-call(java.lang.String C.pm2(java.lang.String))' in Type 'B' (B.java:21) advised by before advice from 'X' (B.java:27)"/-->
+      </compile>
+      <run class="B">
+        <stderr>
+          <line text="advice"/>
+          <line text="foo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+    
+    <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - D">
+      <compile files="D.java" options="-1.5 -showWeaveInfo">
+               <message kind="weave" text="Join point 'method-call(java.lang.String CImpl.pm(java.lang.String))' in Type 'D' (D.java:20) advised by before advice from 'X' (D.java:26)"/>
+               <message kind="weave" text="Join point 'method-call(java.lang.String CImpl.pm2(java.lang.String))' in Type 'D' (D.java:21) advised by before advice from 'X' (D.java:27)"/>
+      </compile>
+      <run class="D">
+        <stderr>
+          <line text="advice"/>
+          <line text="foo"/>
+          <line text="advice2"/>
+          <line text="foo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+    
+    <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - E">
+      <compile files="E.java" options="-1.5 -showWeaveInfo">
+       <message kind="weave" text="Join point 'method-call(java.lang.Object C.pm(java.lang.Object))' in Type 'E' (E.java:18) advised by before advice from 'X' (E.java:23)"/>
+      </compile>
+      <run class="E">
+        <stderr>
+          <line text="advice"/>
+          <line text="foo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+    
+    
+    <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - F">
+      <compile files="F.java" options="-1.5 -showWeaveInfo">
+        <message kind="weave" text="Join point 'method-call(java.lang.Object C.pm(java.lang.Object))' in Type 'F' (F.java:18) advised by before advice from 'X' (F.java:23)"/>
+      </compile>
+      <run class="F">
+        <stderr>
+          <line text="advice"/>
+          <line text="foo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+    
+    <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - G">
+      <compile files="G.java" options="-1.5 -showWeaveInfo">
+        <message kind="warning" line="23" text="advice defined in X has not been applied [Xlint:adviceDidNotMatch]"/>
+      </compile>
+      <run class="G">
+        <stderr>
+          <line text="foo"/>
+        </stderr>
+      </run>
+    </ajc-test>
+    
     <ajc-test dir="bugs152/binaryDecp" title="incorrect overrides evaluation - 1.3">
       <compile files="SubClassLoader.java,SubSubClassLoader.java" options="-1.3" outjar="lib.jar"/>
       <compile files="X.aj" inpath="lib.jar" options="-showWeaveInfo">