]> source.dussan.org Git - aspectj.git/commitdiff
262905: recursive non matching cflow pointcut: dont report rogue non-matches
authoraclement <aclement>
Fri, 30 Jan 2009 22:20:15 +0000 (22:20 +0000)
committeraclement <aclement>
Fri, 30 Jan 2009 22:20:15 +0000 (22:20 +0000)
weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java

index f207dd1d7f8400aad2d2cae58822c4dfca08ada9..7ba56af665ebc53d0787bccfe23f1d675924eb21 100644 (file)
@@ -54,6 +54,7 @@ import org.aspectj.bridge.context.ContextToken;
 import org.aspectj.util.FileUtil;
 import org.aspectj.util.FuzzyBoolean;
 import org.aspectj.weaver.Advice;
+import org.aspectj.weaver.AdviceKind;
 import org.aspectj.weaver.AnnotationAJ;
 import org.aspectj.weaver.AnnotationOnTypeMunger;
 import org.aspectj.weaver.BCException;
@@ -1328,21 +1329,20 @@ public class BcelWeaver {
 
                        for (Iterator iter = l.iterator(); iter.hasNext();) {
                                ShadowMunger element = (ShadowMunger) iter.next();
-                               if (element instanceof BcelAdvice) { // This will stop us
-                                       // incorrectly reporting
-                                       // deow Checkers
+                               // This will stop us incorrectly reporting deow checkers:
+                               if (element instanceof BcelAdvice) {
                                        BcelAdvice ba = (BcelAdvice) element;
+                                       if (ba.getKind() == AdviceKind.CflowEntry || ba.getKind() == AdviceKind.CflowBelowEntry) {
+                                               continue;
+                                       }
                                        if (!ba.hasMatchedSomething()) {
                                                // Because we implement some features of AJ itself by
                                                // creating our own kind of mungers, you sometimes
                                                // find that ba.getSignature() is not a BcelMethod - for
                                                // example it might be a cflow entry munger.
                                                if (ba.getSignature() != null) {
-
-                                                       // check we haven't already warned on this advice
-                                                       // and line
-                                                       // (cflow creates multiple mungers for the same
-                                                       // advice)
+                                                       // check we haven't already warned on this advice and line
+                                                       // (cflow creates multiple mungers for the same advice)
                                                        AdviceLocation loc = new AdviceLocation(ba);
                                                        if (alreadyWarnedLocations.contains(loc)) {
                                                                continue;
@@ -1353,13 +1353,7 @@ public class BcelWeaver {
                                                        if (!(ba.getSignature() instanceof BcelMethod)
                                                                        || !Utility.isSuppressing(ba.getSignature(), "adviceDidNotMatch")) {
                                                                world.getLint().adviceDidNotMatch.signal(ba.getDeclaringAspect().toString(), new SourceLocation(
-                                                                               element.getSourceLocation().getSourceFile(), element.getSourceLocation().getLine()));// element
-                                                               // .
-                                                               // getSourceLocation
-                                                               // (
-                                                               // )
-                                                               // )
-                                                               // ;
+                                                                               element.getSourceLocation().getSourceFile(), element.getSourceLocation().getLine()));
                                                        }
                                                }
                                        }