Selaa lähdekoodia

Fix for pr92053: atargs causes a VerifyError: Unable to pop operand off an empty stack

tags/PRE_ANDY
aclement 19 vuotta sitten
vanhempi
commit
3f942a4c58

+ 23
- 0
tests/java5/annotations/binding/bugs/Test3.java Näytä tiedosto

@@ -0,0 +1,23 @@
import java.lang.annotation.*;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Ann {}

@Ann
class C{}

public class Test3 {

public static void main(String[] args) {
C a = new C();
abc(a);
}

static void abc(C y) {}
}


aspect Annotations {
before(Ann ann) : call(* Test3.*(..)) && @args(ann) { }
}

+ 4
- 0
tests/src/org/aspectj/systemtest/ajc150/AnnotationBinding.java Näytä tiedosto

@@ -393,5 +393,9 @@ public class AnnotationBinding extends XMLBasedAjcTestCase {
assertTrue("Should point to line 10 but doesnt: "+tgt,tgt.indexOf("|10|")!=-1);
}
}
public void testAnnotationBindingArgsVerifyError_pr92053() {
runTest("AtArgs causes a VerifyError: Unable to pop operand off an empty stack");
}
}

+ 5
- 0
tests/src/org/aspectj/systemtest/ajc150/ajc150.xml Näytä tiedosto

@@ -2149,5 +2149,10 @@
<compile files="ITDReturningParameterizedType.aj" options="-1.5"/>
<run class="ITDReturningParameterizedType"/>
</ajc-test>
<ajc-test dir="java5/annotations/binding/bugs" title="AtArgs causes a VerifyError: Unable to pop operand off an empty stack" vm="1.5">
<compile files="Test3.java" options="-1.5"/>
<run class="Test3"/>
</ajc-test>
</suite>

+ 11
- 17
weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java Näytä tiedosto

@@ -137,24 +137,18 @@ public class ArgsAnnotationPointcut extends NameBindingPointcut {
WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_ARG_TYPE,argType.getName()),
"",IMessage.ERROR,shadow.getSourceLocation(),null,new ISourceLocation[]{getSourceLocation()});
}
if (ap.matches(rArgType).alwaysTrue()) { // !!! ASC Can we ever take this branch?
// !!! AMC - Yes, if annotation is @Inherited
argsIndex++;
continue;
} else {

ResolvedTypeX rAnnType = ap.annotationType.resolve(shadow.getIWorld());
if (ap instanceof BindingAnnotationTypePattern) {
BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)ap;
Var annvar = shadow.getArgAnnotationVar(argsIndex,rAnnType);
state.set(btp.getFormalIndex(),annvar);
}
if (!ap.matches(rArgType).alwaysTrue()) {
// we need a test...
ResolvedTypeX rAnnType = ap.annotationType.resolve(shadow.getIWorld());
if (ap instanceof BindingAnnotationTypePattern) {
BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)ap;
Var annvar = shadow.getArgAnnotationVar(argsIndex,rAnnType);
state.set(btp.getFormalIndex(),annvar);
ret = Test.makeAnd(ret,Test.makeHasAnnotation(shadow.getArgVar(argsIndex),rAnnType));
argsIndex++;
} else {
ret = Test.makeAnd(ret,Test.makeHasAnnotation(shadow.getArgVar(argsIndex),rAnnType));
argsIndex++;
}
}
ret = Test.makeAnd(ret,Test.makeHasAnnotation(shadow.getArgVar(argsIndex),rAnnType));
}
argsIndex++;
}
}
return ret;

Loading…
Peruuta
Tallenna