summaryrefslogtreecommitdiffstats
path: root/weaver/src
diff options
context:
space:
mode:
authoraclement <aclement>2006-07-05 12:48:36 +0000
committeraclement <aclement>2006-07-05 12:48:36 +0000
commitd16403655828b58d1ffbdb8d9ab4457c097bd746 (patch)
tree96525ec2b0467d2fa087166d8e74111fef39e87a /weaver/src
parent54934badeea099373c8988195fc6d359e04e4c7a (diff)
downloadaspectj-d16403655828b58d1ffbdb8d9ab4457c097bd746.tar.gz
aspectj-d16403655828b58d1ffbdb8d9ab4457c097bd746.zip
pr145693 - fix for part 1
Diffstat (limited to 'weaver/src')
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java b/weaver/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java
index 01f4c3888..1053dbe82 100644
--- a/weaver/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/ConcreteCflowPointcut.java
@@ -19,6 +19,8 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.bridge.Message;
import org.aspectj.util.FuzzyBoolean;
import org.aspectj.weaver.IntMap;
import org.aspectj.weaver.Member;
@@ -27,6 +29,7 @@ import org.aspectj.weaver.NameMangler;
import org.aspectj.weaver.ResolvedType;
import org.aspectj.weaver.Shadow;
import org.aspectj.weaver.UnresolvedType;
+import org.aspectj.weaver.WeaverMessages;
import org.aspectj.weaver.ast.Expr;
import org.aspectj.weaver.ast.Test;
import org.aspectj.weaver.bcel.BcelCflowAccessVar;
@@ -55,6 +58,24 @@ public class ConcreteCflowPointcut extends Pointcut {
protected FuzzyBoolean matchInternal(Shadow shadow) {
//??? this is not maximally efficient
+ // Check we'll be able to do the residue!
+
+ // this bit is for pr145693 - we cannot match at all if one of the types is missing, we will be unable
+ // to create the residue
+ if (slots != null) {
+ for (Iterator i = slots.iterator(); i.hasNext();) {
+ Slot slot = (Slot) i.next();
+ ResolvedType rt = slot.formalType;
+ if (rt.isMissing()) {
+ ISourceLocation[] locs = new ISourceLocation[]{getSourceLocation()};
+ Message m = new Message(
+ WeaverMessages.format(WeaverMessages.MISSING_TYPE_PREVENTS_MATCH,rt.getName()),
+ "",Message.WARNING,shadow.getSourceLocation(),null,locs);
+ rt.getWorld().getMessageHandler().handleMessage(m);
+ return FuzzyBoolean.NO;
+ }
+ }
+ }
return FuzzyBoolean.MAYBE;
}