@@ -180,4 +180,9 @@ public class BasicTokenSource implements ITokenSource { | |||
this.sourceContext = context; | |||
} | |||
@Override | |||
public boolean hasMoreTokens() { | |||
return index < tokens.length; | |||
} | |||
} |
@@ -23,4 +23,5 @@ public interface ITokenSource { | |||
public int getIndex(); | |||
public void setIndex(int newIndex); | |||
public ISourceContext getSourceContext(); | |||
public boolean hasMoreTokens(); | |||
} |
@@ -97,6 +97,10 @@ public class PatternParser { | |||
eat(")"); | |||
return new PerCflow(entry, isBelow); | |||
} | |||
public boolean moreToParse() { | |||
return tokenSource.hasMoreTokens(); | |||
} | |||
private PerClause parsePerObject(boolean isThis) { | |||
parseIdentifier(); | |||
@@ -330,6 +334,16 @@ public class PatternParser { | |||
String message = parsePossibleStringSequence(true); | |||
return new DeclareErrorOrWarning(isError, pointcut, message); | |||
} | |||
public Pointcut parsePointcut(boolean shouldConsumeAllInput) { | |||
Pointcut p = parsePointcut(); | |||
if (shouldConsumeAllInput && tokenSource.hasMoreTokens()) { | |||
throw new ParserException( | |||
"Found unexpected data after parsing pointcut", | |||
tokenSource.next()); | |||
} | |||
return p; | |||
} | |||
public Pointcut parsePointcut() { | |||
Pointcut p = parseAtomicPointcut(); | |||
@@ -343,7 +357,7 @@ public class PatternParser { | |||
return p; | |||
} | |||
private Pointcut parseNotOrPointcut() { | |||
Pointcut p = parseAtomicPointcut(); | |||
if (maybeEat("&&")) { |
@@ -325,7 +325,7 @@ public class PointcutParser { | |||
try { | |||
PatternParser parser = new PatternParser(expression); | |||
parser.setPointcutDesignatorHandlers(pointcutDesignators, world); | |||
Pointcut pc = parser.parsePointcut(); | |||
Pointcut pc = parser.parsePointcut(); // more correctly: parsePointcut(true) | |||
validateAgainstSupportedPrimitives(pc, expression); | |||
IScope resolutionScope = buildResolutionScope((inScope == null ? Object.class : inScope), formalParameters); | |||
pc = pc.resolve(resolutionScope); |