diff options
author | aclement <aclement> | 2006-04-25 07:29:29 +0000 |
---|---|---|
committer | aclement <aclement> | 2006-04-25 07:29:29 +0000 |
commit | c4d2a21b1609ca7473dedce2d855815146cb017f (patch) | |
tree | c5e4fc65e247f4b1576e1998a2f48c34f0ada93e | |
parent | 6b2526fdda56e30d8a151ca0b9bd16ecb690d3d0 (diff) | |
download | aspectj-c4d2a21b1609ca7473dedce2d855815146cb017f.tar.gz aspectj-c4d2a21b1609ca7473dedce2d855815146cb017f.zip |
test and another part of the fix for 137496
-rw-r--r-- | tests/bugs152/pr137496/H.java | 28 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java | 1 | ||||
-rw-r--r-- | tests/src/org/aspectj/systemtest/ajc152/ajc152.xml | 11 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelShadow.java | 6 |
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( |