void init(String newMatchExpression, Matcher newMatcher) {
this.matcher = newMatcher;
this.matchExpression = newMatchExpression;
setVerbose(newMatcher.getVerbose());
InitErrorListener errorListener = new InitErrorListener();
CodePointCharStream input = CharStreams.fromString(this.matchExpression);
UserAgentTreeWalkerLexer lexer = new UserAgentTreeWalkerLexer(input);
lexer.addErrorListener(errorListener);
CommonTokenStream tokens = new CommonTokenStream(lexer);
UserAgentTreeWalkerParser parser = new UserAgentTreeWalkerParser(tokens);
parser.addErrorListener(errorListener);
// parser.setTrace(true);
ParserRuleContext requiredPattern = parseWalkerExpression(parser);
if (requiredPattern == null) {
throw new InvalidParserConfigurationException("NO pattern ?!?!?");
}
// We couldn't ditch the double quotes around the fixed values in the parsing phase.
// So we ditch them here. We simply walk the tree and modify some of the tokens.
new UnQuoteValues().visit(requiredPattern);
// Now we create an evaluator instance
evaluator = new TreeExpressionEvaluator(requiredPattern, matcher, verbose);
// Is a fixed value (i.e. no events will ever be fired)?
String fixedValue = evaluator.getFixedValue();
if (fixedValue != null) {
setFixedValue(fixedValue);
mustHaveMatches = false;
matches = new MatchesList(0);
return; // Not interested in any patterns
}
mustHaveMatches = !evaluator.usesIsNull();
int informs = calculateInformPath("agent", requiredPattern);
// If this is based on a variable we do not need any matches from the hashmap.
if (mustHaveMatches && informs == 0) {
mustHaveMatches = false;
}
int listSize = 0;
if (informs > 0) {
listSize = 1;
}
this.matches = new MatchesList(listSize);
}
MatcherAction.java 文件源码
java
阅读 23
收藏 0
点赞 0
评论 0
项目:yauaa
作者:
评论列表
文章目录