java.lang.VerifyError in generated code Bug was that a portion of ReferencePointcut.concretize was not behaving functionally but was mutating state.tags/V1_1_1
@@ -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> |
@@ -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(*) {} | |||
} |
@@ -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++) { |