private static Matcher optimizeSinglePass(Matcher matcher) { return matcher .rewrite(Optimizer::mergeNext) .rewrite(Optimizer::removeTrueInSequence) .rewrite(Optimizer::sequenceWithFalseIsFalse) .rewrite(Optimizer::sequenceWithStuffAfterEndIsFalse) .rewrite(Optimizer::zeroOrMoreFalse) .rewrite(Optimizer::convertEmptyCharClassToFalse) .rewrite(Optimizer::convertSingleCharClassToSeq) .rewrite(Optimizer::removeStartFollowedByMatchAny) .rewrite(Optimizer::removeMatchAnyFollowedByStart) .rewrite(Optimizer::removeMatchAnyFollowedByIndexOf) .rewrite(Optimizer::removeSequentialMatchAny) .rewrite(Optimizer::flattenNestedSequences) .rewrite(Optimizer::flattenNestedOr) .rewrite(Optimizer::dedupOr) .rewrite(Optimizer::removeFalseBranchesFromOr) .rewrite(Optimizer::extractPrefixFromOr) .rewrite(Optimizer::inlineMatchAnyPrecedingOr) .rewrite(Optimizer::startsWithCharSeq) .rewrite(Optimizer::combineCharSeqAfterStartsWith) .rewrite(Optimizer::combineCharSeqAfterIndexOf) .rewrite(Optimizer::combineAdjacentCharSeqs) .rewrite(Optimizer::removeRepeatedStart) .rewrite(Optimizer::combineAdjacentStart) .rewrite(Optimizer::convertRepeatedAnyCharSeqToIndexOf) .rewriteEnd(Optimizer::removeTrailingMatchAny); }
private static Matcher optimizeSinglePass(Matcher matcher) { return matcher .rewrite(Optimizer::mergeNext) .rewrite(Optimizer::removeTrueInSequence) .rewrite(Optimizer::sequenceWithFalseIsFalse) .rewrite(Optimizer::sequenceWithStuffAfterEndIsFalse) .rewrite(Optimizer::zeroOrMoreFalse) .rewrite(Optimizer::convertEmptyCharClassToFalse) .rewrite(Optimizer::convertSingleCharClassToSeq) .rewrite(Optimizer::removeStartFollowedByMatchAny) .rewrite(Optimizer::removeMatchAnyFollowedByStart) .rewrite(Optimizer::removeMatchAnyFollowedByIndexOf) .rewrite(Optimizer::removeSequentialMatchAny) .rewrite(Optimizer::flattenNestedSequences) .rewrite(Optimizer::flattenNestedOr) .rewrite(Optimizer::dedupOr) .rewrite(Optimizer::removeFalseBranchesFromOr) .rewrite(Optimizer::extractPrefixFromOr) .rewrite(Optimizer::inlineMatchAnyPrecedingOr) .rewrite(Optimizer::startsWithCharSeq) .rewrite(Optimizer::combineCharSeqAfterStartsWith) .rewrite(Optimizer::combineCharSeqAfterIndexOf) .rewrite(Optimizer::combineAdjacentCharSeqs) .rewrite(Optimizer::removeRepeatedStart) .rewrite(Optimizer::combineAdjacentStart) .rewrite(Optimizer::convertRepeatedAnyCharSeqToIndexOf) .rewriteEnd(Optimizer::removeTrailingMatchAny); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewrite(f)); } return f.apply(OrMatcher.create(ms)); }
@Override default PatternMatcher ignoreCase() { Matcher m = rewrite(PatternUtils::ignoreCase); return new IgnoreCaseMatcher(m); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewrite(f)); } return f.apply(OrMatcher.create(ms)); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewrite(f)); } return f.apply(SeqMatcher.create(ms)); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new NegativeLookaheadMatcher(matcher.rewrite(f))); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { List<Matcher> ms = new ArrayList<>(); for (Matcher m : matchers) { ms.add(m.rewrite(f)); } return f.apply(SeqMatcher.create(ms)); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new IndexOfMatcher(pattern, next.rewrite(f))); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new NegativeLookaheadMatcher(matcher.rewrite(f))); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new IndexOfMatcher(pattern, next.rewrite(f))); }
@Override default PatternMatcher ignoreCase() { Matcher m = rewrite(PatternUtils::ignoreCase); return new IgnoreCaseMatcher(m); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new PositiveLookaheadMatcher(matcher.rewrite(f))); }
@Override public Matcher rewrite(Function<Matcher, Matcher> f) { return f.apply(new PositiveLookaheadMatcher(matcher.rewrite(f))); }