From 0826ac2f735ecfa1d51cc297e155865e39e636c1 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 24 Jun 2020 14:04:31 +0200 Subject: [PATCH] Clean up AntlrXPathParser a bit This cleans up instantiation so we can better communicate parser state to the resulting expression. JIRA: YANGTOOLS-1115 Change-Id: I111926b76f88ca2c4023cdd41b77d56768c38497 Signed-off-by: Robert Varga --- .../yang/xpath/api/YangLiteralExpr.java | 2 +- .../yang/xpath/impl/AntlrXPathParser.java | 30 ++++++++++++------- .../xpath/impl/AntlrYangXPathExpression.java | 6 ++-- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/yang/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLiteralExpr.java b/yang/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLiteralExpr.java index efff7c6929..8aaf104db2 100644 --- a/yang/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLiteralExpr.java +++ b/yang/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLiteralExpr.java @@ -34,7 +34,7 @@ public final class YangLiteralExpr implements YangExpr { private final String literal; - protected YangLiteralExpr(final String literal) { + YangLiteralExpr(final String literal) { this.literal = requireNonNull(literal); } diff --git a/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java b/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java index 17be3ca2cf..5019031520 100644 --- a/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java +++ b/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java @@ -22,7 +22,6 @@ import static org.opendaylight.yangtools.yang.xpath.impl.ParseTreeUtils.verifyTr import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterators; import com.google.common.collect.Maps; -import java.util.AbstractMap.SimpleImmutableEntry; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; @@ -31,7 +30,6 @@ import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; import java.util.Set; import javax.xml.xpath.XPathExpressionException; @@ -113,8 +111,8 @@ abstract class AntlrXPathParser implements YangXPathParser { @Override public YangXPathExpression parseExpression(final String xpath) throws XPathExpressionException { - final Entry result = parseExpr(xpath); - return new AntlrYangXPathExpression.Base(mathMode, result.getKey(), result.getValue(), xpath); + final ParseExprResult result = parseExpr(xpath); + return new AntlrYangXPathExpression.Base(mathMode, result.minimumYangVersion, result.expression, xpath); } @Override @@ -150,8 +148,8 @@ abstract class AntlrXPathParser implements YangXPathParser { @Override public YangXPathExpression.QualifiedBound parseExpression(final String xpath) throws XPathExpressionException { - final Entry result = parseExpr(xpath); - return new AntlrYangXPathExpression.Qualified(mathMode, result.getKey(), result.getValue(), xpath, + final ParseExprResult result = parseExpr(xpath); + return new AntlrYangXPathExpression.Qualified(mathMode, result.minimumYangVersion, result.expression, xpath, namespaceContext); } @@ -179,10 +177,10 @@ abstract class AntlrXPathParser implements YangXPathParser { @Override public YangXPathExpression.UnqualifiedBound parseExpression(final String xpath) throws XPathExpressionException { - final Entry result = parseExpr(xpath); + final ParseExprResult result = parseExpr(xpath); - return new AntlrYangXPathExpression.Unqualified(mathMode, result.getKey(), result.getValue(), xpath, - namespaceContext, defaultNamespace); + return new AntlrYangXPathExpression.Unqualified(mathMode, result.minimumYangVersion, result.expression, + xpath, namespaceContext, defaultNamespace); } @Override @@ -197,6 +195,16 @@ abstract class AntlrXPathParser implements YangXPathParser { } } + private static final class ParseExprResult { + final YangVersion minimumYangVersion; + final YangExpr expression; + + ParseExprResult(final YangVersion minimumYangVersion, final YangExpr expression) { + this.minimumYangVersion = requireNonNull(minimumYangVersion); + this.expression = requireNonNull(expression); + } + } + private static final Map BINARY_OPERATORS = Maps.uniqueIndex( Arrays.asList(YangBinaryOperator.values()), YangBinaryOperator::toString); private static final Map NODE_TYPES = Maps.uniqueIndex(Arrays.asList( @@ -242,7 +250,7 @@ abstract class AntlrXPathParser implements YangXPathParser { } @SuppressWarnings("checkstyle:illegalCatch") - final Entry parseExpr(final String xpath) throws XPathExpressionException { + final ParseExprResult parseExpr(final String xpath) throws XPathExpressionException { // Create a parser and disconnect it from console error output final xpathLexer lexer = new xpathLexer(CharStreams.fromString(xpath)); final xpathParser parser = new xpathParser(new CommonTokenStream(lexer)); @@ -264,7 +272,7 @@ abstract class AntlrXPathParser implements YangXPathParser { } catch (RuntimeException e) { throw new XPathExpressionException(e); } - return new SimpleImmutableEntry<>(minimumYangVersion, expr); + return new ParseExprResult(minimumYangVersion, expr); } /** diff --git a/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrYangXPathExpression.java b/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrYangXPathExpression.java index 9021238353..aadd934156 100644 --- a/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrYangXPathExpression.java +++ b/yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrYangXPathExpression.java @@ -40,7 +40,7 @@ abstract class AntlrYangXPathExpression implements YangXPathExpression { } static class Qualified extends AntlrYangXPathExpression implements QualifiedBound { - final YangNamespaceContext namespaceContext; + private final YangNamespaceContext namespaceContext; Qualified(final YangXPathMathMode mathMode, final YangVersion yangVersion, final YangExpr rootExpr, final String origStr, final YangNamespaceContext namespaceContext) { @@ -48,7 +48,7 @@ abstract class AntlrYangXPathExpression implements YangXPathExpression { this.namespaceContext = requireNonNull(namespaceContext); } - YangNamespaceContext getNamespaceContext() { + final YangNamespaceContext namespaceContext() { return namespaceContext; } @@ -74,7 +74,7 @@ abstract class AntlrYangXPathExpression implements YangXPathExpression { @Override public Resolved interpretAsQName(final YangLiteralExpr expr) throws XPathExpressionException { - return Utils.interpretAsQName(getNamespaceContext(), defaultNamespace, expr); + return Utils.interpretAsQName(namespaceContext(), defaultNamespace, expr); } } -- 2.36.6