aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/bugs1919/github_24/ExactlyMatchingAspect.aj9
-rw-r--r--tests/bugs1919/github_24/FuzzilyMatchingAspect.aj9
-rw-r--r--tests/bugs1919/github_24/MaybeMissingClass.java16
-rw-r--r--tests/src/test/java/org/aspectj/systemtest/ajc1919/Bugs1919Tests.java16
-rw-r--r--tests/src/test/resources/org/aspectj/systemtest/ajc1919/ajc1919.xml92
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>