Переглянути джерело

fix and test for Bugzilla Bug 43194

	  	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
jhugunin 20 роки тому
джерело
коміт
fc0d2af02c

+ 6
- 0
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>

+ 25
- 0
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(*) {}
}

+ 1
- 1
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++) {

Завантаження…
Відмінити
Зберегти