summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2006-04-25 07:29:29 +0000
committeraclement <aclement>2006-04-25 07:29:29 +0000
commitc4d2a21b1609ca7473dedce2d855815146cb017f (patch)
treec5e4fc65e247f4b1576e1998a2f48c34f0ada93e
parent6b2526fdda56e30d8a151ca0b9bd16ecb690d3d0 (diff)
downloadaspectj-c4d2a21b1609ca7473dedce2d855815146cb017f.tar.gz
aspectj-c4d2a21b1609ca7473dedce2d855815146cb017f.zip
test and another part of the fix for 137496
-rw-r--r--tests/bugs152/pr137496/H.java28
-rw-r--r--tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java1
-rw-r--r--tests/src/org/aspectj/systemtest/ajc152/ajc152.xml11
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java6
4 files changed, 45 insertions, 1 deletions
diff --git a/tests/bugs152/pr137496/H.java b/tests/bugs152/pr137496/H.java
new file mode 100644
index 000000000..b0c3dd6c5
--- /dev/null
+++ b/tests/bugs152/pr137496/H.java
@@ -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 H {
+
+ 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 {
+ Object around(): call(* pm(..)) { System.err.println("advice"); return null;}
+// before(): call(* pm2(..)) {}
+} \ No newline at end of file
diff --git a/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java b/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java
index 87a912be1..4f33cca93 100644
--- a/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java
@@ -27,6 +27,7 @@ public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
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 testPointcutsAndGenerics_pr137496_6() { runTest("pointcuts and generics - H");}
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"); }
diff --git a/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml b/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml
index cc57b9562..cb7cd1fe1 100644
--- a/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml
+++ b/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml
@@ -119,6 +119,17 @@
</run>
</ajc-test>
+ <ajc-test dir="bugs152/pr137496" title="pointcuts and generics - H">
+ <compile files="H.java" options="-1.5 -showWeaveInfo">
+ <message kind="weave" text="Join point 'method-call(java.lang.Object C.pm(java.lang.Object))' in Type 'H' (H.java:20) advised by around advice from 'X' (H.java:26)"/>
+ </compile>
+ <run class="H">
+ <stderr>
+ <line text="advice"/>
+ </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">
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index 21cfb1b27..b201b039c 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -3179,7 +3179,11 @@ public class BcelShadow extends Shadow {
if (getKind() == PreInitialization) {
returnType = UnresolvedType.OBJECTARRAY;
} else {
- returnType = getReturnType();
+
+ if (getKind() == ConstructorCall) returnType = getSignature().getDeclaringType();
+ else if (getKind() == FieldSet) returnType = ResolvedType.VOID;
+ else returnType = getSignature().getReturnType().resolve(world);
+// returnType = getReturnType(); // for this and above lines, see pr137496
}
return
new LazyMethodGen(