diff options
author | aclement <aclement> | 2008-02-19 22:01:34 +0000 |
---|---|---|
committer | aclement <aclement> | 2008-02-19 22:01:34 +0000 |
commit | b91e3abfe2d9fcafac1eabaefab0f1c3ba8ae55a (patch) | |
tree | 60d40a96b0cbc61d888867ab0784723c87a3a5e2 /tests | |
parent | 876e7d62bb8cd5313377adaf02db372a1e539b82 (diff) | |
download | aspectj-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')
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"/> |