diff options
author | acolyer <acolyer> | 2005-03-10 13:00:42 +0000 |
---|---|---|
committer | acolyer <acolyer> | 2005-03-10 13:00:42 +0000 |
commit | 922aeaa57dcb071c5a3007827c2268d707e557f2 (patch) | |
tree | d321aa33c41841eb9853d131f0eb5d1dd11162db /weaver/src | |
parent | 074251e1666235f1eb62e5406821e8d05178ce9a (diff) | |
download | aspectj-922aeaa57dcb071c5a3007827c2268d707e557f2.tar.gz aspectj-922aeaa57dcb071c5a3007827c2268d707e557f2.zip |
fixes for annotation type pattern bugs uncovered in 150 tests
Diffstat (limited to 'weaver/src')
3 files changed, 10 insertions, 6 deletions
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java index 1c2f7f443..42635aa78 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java @@ -900,11 +900,14 @@ public class BcelWeaver implements IWeaver { if (element instanceof BcelAdvice) { // This will stop us incorrectly reporting deow Checkers BcelAdvice ba = (BcelAdvice)element; if (!ba.hasMatchedSomething()) { - Annotation[] anns = ((BcelMethod)ba.getSignature()).getAnnotations(); - // Check if they want to suppress the warning on this piece of advice - if (!Utility.isSuppressing(anns,"adviceDidNotMatch")) { - world.getLint().adviceDidNotMatch.signal(ba.getDeclaringAspect().getNameAsIdentifier(),element.getSourceLocation()); - } + BcelMethod meth = ((BcelMethod)ba.getSignature()); + if (meth != null) { + Annotation[] anns = meth.getAnnotations(); + // Check if they want to suppress the warning on this piece of advice + if (!Utility.isSuppressing(anns,"adviceDidNotMatch")) { + world.getLint().adviceDidNotMatch.signal(ba.getDeclaringAspect().getNameAsIdentifier(),element.getSourceLocation()); + } + } } } } diff --git a/weaver/src/org/aspectj/weaver/patterns/AnnotationPatternList.java b/weaver/src/org/aspectj/weaver/patterns/AnnotationPatternList.java index cca0c32c3..df3833009 100644 --- a/weaver/src/org/aspectj/weaver/patterns/AnnotationPatternList.java +++ b/weaver/src/org/aspectj/weaver/patterns/AnnotationPatternList.java @@ -82,6 +82,7 @@ public class AnnotationPatternList extends PatternNode { } else { // match the argument type at argsIndex with the ExactAnnotationTypePattern // we know it is exact because nothing else is allowed in args + if (someArgs[argsIndex].isPrimitive()) return FuzzyBoolean.NO; // can never match ExactAnnotationTypePattern ap = (ExactAnnotationTypePattern)typePatterns[i]; FuzzyBoolean matches = ap.matchesRuntimeType(someArgs[argsIndex]); if (matches == FuzzyBoolean.NO) { diff --git a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java index fdc09557d..dfb97e743 100644 --- a/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java +++ b/weaver/src/org/aspectj/weaver/patterns/ArgsAnnotationPointcut.java @@ -147,7 +147,7 @@ public class ArgsAnnotationPointcut extends NameBindingPointcut { if (ap instanceof BindingAnnotationTypePattern) { BindingAnnotationTypePattern btp = (BindingAnnotationTypePattern)ap; Var annvar = shadow.getArgAnnotationVar(argsIndex,rAnnType); - state.set(argsIndex,annvar); + state.set(btp.getFormalIndex(),annvar); ret = Test.makeAnd(ret,Test.makeHasAnnotation(shadow.getArgVar(argsIndex),rAnnType)); argsIndex++; } else { |