aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/ajcTests.xml6
-rw-r--r--tests/bugs/AdviceInteraction.java25
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java2
3 files changed, 32 insertions, 1 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml
index 39dd3b146..9fd028f8f 100644
--- a/tests/ajcTests.xml
+++ b/tests/ajcTests.xml
@@ -6757,4 +6757,10 @@
<compile files="ParentsAndPointcuts.java"/>
<run class="ParentsAndPointcuts"/>
</ajc-test>
+
+ <ajc-test dir="bugs" pr="43194"
+ title="Non-functional concretezation of ReferencePointcut">
+ <compile files="AdviceInteraction.java"/>
+ <run class="AdviceInteraction"/>
+ </ajc-test>
</suite>
diff --git a/tests/bugs/AdviceInteraction.java b/tests/bugs/AdviceInteraction.java
new file mode 100644
index 000000000..1d72ad593
--- /dev/null
+++ b/tests/bugs/AdviceInteraction.java
@@ -0,0 +1,25 @@
+public class AdviceInteraction {
+ public static void main(String [] args) {
+ new C().m1();
+ }
+}
+
+class C {
+ public void m1() {}
+ public void m2() {}
+}
+
+aspect A {
+ pointcut exec1(C c): this(c) && execution(void m1());
+ pointcut execs(C c): exec1(c);
+
+ before (): execs(*) {}
+ before (C c): execs(c) {}
+
+ // This ordering works correctly
+ pointcut exec2(C c): this(c) && execution(void m2());
+ pointcut execs2(C c): exec2(c);
+
+ before (C c): execs2(c) {}
+ before (): execs2(*) {}
+} \ No newline at end of file
diff --git a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
index 907836447..8781641c7 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ReferencePointcut.java
@@ -249,7 +249,7 @@ public class ReferencePointcut extends Pointcut {
//System.err.println("start: " + searchStart);
ResolvedTypeX[] parameterTypes = searchStart.getWorld().resolve(pointcutDec.getParameterTypes());
- arguments = arguments.resolveReferences(bindings);
+ TypePatternList arguments = this.arguments.resolveReferences(bindings);
IntMap newBindings = new IntMap();
for (int i=0,len=arguments.size(); i < len; i++) {