diff options
5 files changed, 142 insertions, 0 deletions
diff --git a/tests/bugs1919/github_24/ExactlyMatchingAspect.aj b/tests/bugs1919/github_24/ExactlyMatchingAspect.aj new file mode 100644 index 000000000..8a78394c3 --- /dev/null +++ b/tests/bugs1919/github_24/ExactlyMatchingAspect.aj @@ -0,0 +1,9 @@ +public aspect ExactlyMatchingAspect { + after() : execution(public MaybeMissingClass MaybeMissingClass.*()) { + System.out.println(thisJoinPoint); + } + + after() : execution(public MaybeMissingClass[] MaybeMissingClass.*()) { + System.out.println(thisJoinPoint); + } +} diff --git a/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj b/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj new file mode 100644 index 000000000..999282873 --- /dev/null +++ b/tests/bugs1919/github_24/FuzzilyMatchingAspect.aj @@ -0,0 +1,9 @@ +public aspect FuzzilyMatchingAspect { + after() : execution(public MaybeMissing* MaybeMissing*.*()) { + System.out.println(thisJoinPoint); + } + + after() : execution(public MaybeMissing*[] MaybeMissing*.*()) { + System.out.println(thisJoinPoint); + } +} diff --git a/tests/bugs1919/github_24/MaybeMissingClass.java b/tests/bugs1919/github_24/MaybeMissingClass.java new file mode 100644 index 000000000..3fa5fa274 --- /dev/null +++ b/tests/bugs1919/github_24/MaybeMissingClass.java @@ -0,0 +1,16 @@ +public class MaybeMissingClass { + public static void main(String[] args) { + f1(); + f2(); + } + + public static MaybeMissingClass f1() { + System.out.println("MaybeMissingClass.f1"); + return null; + } + + public static MaybeMissingClass[] f2() { + System.out.println("MaybeMissingClass.f2"); + return null; + } +} diff --git a/tests/src/test/java/org/aspectj/systemtest/ajc1919/Bugs1919Tests.java b/tests/src/test/java/org/aspectj/systemtest/ajc1919/Bugs1919Tests.java index ae3c54398..c20f9f2cf 100644 --- a/tests/src/test/java/org/aspectj/systemtest/ajc1919/Bugs1919Tests.java +++ b/tests/src/test/java/org/aspectj/systemtest/ajc1919/Bugs1919Tests.java @@ -31,6 +31,22 @@ public class Bugs1919Tests extends XMLBasedAjcTestCase { runTest("inner aspect of interface is implicitly static"); } + public void testExactArrayTypeMatchCompiledTogether() { + runTest("exact array type matching, aspect compiled together with target class"); + } + + public void testExactArrayTypeMatchCompiledSeparately() { + runTest("exact array type matching, aspect compiled separately from target class"); + } + + public void testFuzzyArrayTypeMatchCompiledTogether() { + runTest("fuzzy array type matching, aspect compiled together with target class"); + } + + public void testFuzzyArrayTypeMatchCompiledSeparately() { + runTest("fuzzy array type matching, aspect compiled separately from target class"); + } + public static Test suite() { return XMLBasedAjcTestCase.loadSuite(Bugs1919Tests.class); } diff --git a/tests/src/test/resources/org/aspectj/systemtest/ajc1919/ajc1919.xml b/tests/src/test/resources/org/aspectj/systemtest/ajc1919/ajc1919.xml index f89455941..67c0b6328 100644 --- a/tests/src/test/resources/org/aspectj/systemtest/ajc1919/ajc1919.xml +++ b/tests/src/test/resources/org/aspectj/systemtest/ajc1919/ajc1919.xml @@ -222,4 +222,96 @@ </run> </ajc-test> + <!-- + When compiling aspect and target class together, matching works as expected, + see https://github.com/eclipse/org.aspectj/issues/24 + --> + <ajc-test dir="bugs1919/github_24" vm="1.5" title="exact array type matching, aspect compiled together with target class"> + <compile files="ExactlyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> + <!-- Even before the bugfix, in this case weaving worked as expected --> + <message kind="weave" text="method-execution(MaybeMissingClass MaybeMissingClass.f1())'"/> + <message kind="weave" text="method-execution(MaybeMissingClass[] MaybeMissingClass.f2())'"/> + </compile> + <run class="MaybeMissingClass"> + <stdout> + <line text="MaybeMissingClass.f1"/> + <line text="execution(MaybeMissingClass MaybeMissingClass.f1())"/> + <line text="MaybeMissingClass.f2"/> + <line text="execution(MaybeMissingClass[] MaybeMissingClass.f2())"/> + </stdout> + </run> + </ajc-test> + + <!-- + When compiling aspect and target class separately, too many joinpoints are matched, + see https://github.com/eclipse/org.aspectj/issues/24 + --> + <ajc-test dir="bugs1919/github_24" vm="1.5" title="exact array type matching, aspect compiled separately from target class"> + <compile files="ExactlyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> + <message kind="warning" text="no match for this type name: MaybeMissingClass [Xlint:invalidAbsoluteTypeName]"/> + <message kind="warning" text="no match for this type name: MaybeMissingClass [Xlint:invalidAbsoluteTypeName]"/> + <message kind="warning" text="no match for this type name: MaybeMissingClass [Xlint:invalidAbsoluteTypeName]"/> + <message kind="warning" text="no match for this type name: MaybeMissingClass [Xlint:invalidAbsoluteTypeName]"/> + <message kind="warning" text="advice defined in ExactlyMatchingAspect has not been applied [Xlint:adviceDidNotMatch]"/> + <message kind="warning" text="advice defined in ExactlyMatchingAspect has not been applied [Xlint:adviceDidNotMatch]"/> + </compile> + <compile files="MaybeMissingClass.java" options="-1.5 -showWeaveInfo" aspectpath="aspect.jar"> + <!-- Before the bugfix, f1 would be woven twice, f2 not at all--> + <message kind="weave" text="method-execution(MaybeMissingClass MaybeMissingClass.f1())'"/> + <message kind="weave" text="method-execution(MaybeMissingClass[] MaybeMissingClass.f2())'"/> + </compile> + <run class="MaybeMissingClass" classpath="aspect.jar"> + <stdout> + <line text="MaybeMissingClass.f1"/> + <line text="execution(MaybeMissingClass MaybeMissingClass.f1())"/> + <line text="MaybeMissingClass.f2"/> + <line text="execution(MaybeMissingClass[] MaybeMissingClass.f2())"/> + </stdout> + </run> + </ajc-test> + + <!-- + When compiling aspect and target class together, too many joinpoints are matched, + see https://github.com/eclipse/org.aspectj/issues/24 + --> + <ajc-test dir="bugs1919/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled together with target class"> + <compile files="FuzzilyMatchingAspect.aj MaybeMissingClass.java" options="-1.5 -showWeaveInfo"> + <!-- Before the bugfix, both f1 and f2 would be woven twice --> + <message kind="weave" text="method-execution(MaybeMissingClass MaybeMissingClass.f1())'"/> + <message kind="weave" text="method-execution(MaybeMissingClass[] MaybeMissingClass.f2())'"/> + </compile> + <run class="MaybeMissingClass"> + <stdout> + <line text="MaybeMissingClass.f1"/> + <line text="execution(MaybeMissingClass MaybeMissingClass.f1())"/> + <line text="MaybeMissingClass.f2"/> + <line text="execution(MaybeMissingClass[] MaybeMissingClass.f2())"/> + </stdout> + </run> + </ajc-test> + + <!-- + When compiling aspect and target class separately, too many joinpoints are matched, + see https://github.com/eclipse/org.aspectj/issues/24 + --> + <ajc-test dir="bugs1919/github_24" vm="1.5" title="fuzzy array type matching, aspect compiled separately from target class"> + <compile files="FuzzilyMatchingAspect.aj" options="-1.5 -showWeaveInfo" outjar="aspect.jar"> + <message kind="warning" text="advice defined in FuzzilyMatchingAspect has not been applied [Xlint:adviceDidNotMatch]"/> + <message kind="warning" text="advice defined in FuzzilyMatchingAspect has not been applied [Xlint:adviceDidNotMatch]"/> + </compile> + <compile files="MaybeMissingClass.java" options="-1.5 -showWeaveInfo" aspectpath="aspect.jar"> + <!-- Before the bugfix, both f1 and f2 would be woven twice --> + <message kind="weave" text="method-execution(MaybeMissingClass MaybeMissingClass.f1())'"/> + <message kind="weave" text="method-execution(MaybeMissingClass[] MaybeMissingClass.f2())'"/> + </compile> + <run class="MaybeMissingClass" classpath="aspect.jar"> + <stdout> + <line text="MaybeMissingClass.f1"/> + <line text="execution(MaybeMissingClass MaybeMissingClass.f1())"/> + <line text="MaybeMissingClass.f2"/> + <line text="execution(MaybeMissingClass[] MaybeMissingClass.f2())"/> + </stdout> + </run> + </ajc-test> + </suite> |