diff options
author | aclement <aclement> | 2006-07-05 12:48:36 +0000 |
---|---|---|
committer | aclement <aclement> | 2006-07-05 12:48:36 +0000 |
commit | d16403655828b58d1ffbdb8d9ab4457c097bd746 (patch) | |
tree | 96525ec2b0467d2fa087166d8e74111fef39e87a /weaver/src | |
parent | 54934badeea099373c8988195fc6d359e04e4c7a (diff) | |
download | aspectj-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.java | 21 |
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; } |