Skip to content

Commit 2ed9dd1

Browse files
committed
cached bool parser
1 parent 797980a commit 2ed9dd1

2 files changed

Lines changed: 31 additions & 16 deletions

File tree

src/main/java/com/github/sidhant92/boolparser/parser/antlr/BoolParser.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,18 @@
44
import org.antlr.v4.runtime.CommonTokenStream;
55
import org.antlr.v4.runtime.tree.ParseTree;
66
import org.antlr.v4.runtime.tree.ParseTreeWalker;
7-
import com.github.benmanes.caffeine.cache.Cache;
8-
import com.github.benmanes.caffeine.cache.Caffeine;
97
import com.github.sidhant92.boolparser.domain.Node;
108
import com.github.sidhant92.boolparser.operator.OperatorFactory;
119
import com.github.sidhant92.boolparser.parser.BoolExpressionParser;
1210
import io.vavr.control.Try;
1311

1412
public class BoolParser implements BoolExpressionParser {
15-
private boolean useCache;
16-
17-
private Cache<String, Node> cache;
18-
1913
private final ParseTreeWalker parseTreeWalker = new ParseTreeWalker();
2014

2115
public BoolParser() {
2216
OperatorFactory.initialize();
2317
}
2418

25-
public BoolParser(final int maxCacheSize) {
26-
OperatorFactory.initialize();
27-
this.useCache = true;
28-
this.cache = Caffeine.newBuilder().maximumSize(maxCacheSize).build();
29-
}
30-
3119
@Override
3220
public Try<Node> parseExpression(final String expression, final String defaultField) {
3321
return Try.of(() -> getNode(expression, defaultField));
@@ -39,13 +27,10 @@ public Try<Node> parseExpression(final String expression) {
3927
}
4028

4129
private Node getNode(final String expression, final String defaultField) {
42-
if (useCache) {
43-
return cache.get(expression, ex -> parse(ex, defaultField));
44-
}
4530
return parse(expression, defaultField);
4631
}
4732

48-
private Node parse(final String expression, final String defaultField) {
33+
protected Node parse(final String expression, final String defaultField) {
4934
final BooleanExpressionLexer filterLexer = new BooleanExpressionLexer(CharStreams.fromString(expression));
5035
final CommonTokenStream commonTokenStream = new CommonTokenStream(filterLexer);
5136
final BooleanExpressionParser filterParser = new BooleanExpressionParser(commonTokenStream);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.sidhant92.boolparser.parser.antlr;
2+
3+
import com.github.benmanes.caffeine.cache.Cache;
4+
import com.github.benmanes.caffeine.cache.Caffeine;
5+
import com.github.sidhant92.boolparser.domain.Node;
6+
import com.github.sidhant92.boolparser.operator.OperatorFactory;
7+
import io.vavr.control.Try;
8+
9+
public class CachedBoolParser extends BoolParser {
10+
private final Cache<String, Node> cache;
11+
12+
public CachedBoolParser(final int maxCacheSize) {
13+
OperatorFactory.initialize();
14+
this.cache = Caffeine.newBuilder().maximumSize(maxCacheSize).build();
15+
}
16+
17+
@Override
18+
public Try<Node> parseExpression(final String expression, final String defaultField) {
19+
return Try.of(() -> getNode(expression, defaultField));
20+
}
21+
22+
@Override
23+
public Try<Node> parseExpression(final String expression) {
24+
return Try.of(() -> getNode(expression, null));
25+
}
26+
27+
private Node getNode(final String expression, final String defaultField) {
28+
return cache.get(expression, ex -> super.parse(ex, defaultField));
29+
}
30+
}

0 commit comments

Comments
 (0)