Clean up AntlrXPathParser a bit 23/90623/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 24 Jun 2020 12:04:31 +0000 (14:04 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 24 Jun 2020 12:05:05 +0000 (14:05 +0200)
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 <robert.varga@pantheon.tech>
yang/yang-xpath-api/src/main/java/org/opendaylight/yangtools/yang/xpath/api/YangLiteralExpr.java
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrYangXPathExpression.java

index efff7c6929ae6f0bea91b81a8a64532ba34a9815..8aaf104db2f7c3deeb620b2cae1be8d9e24926a1 100644 (file)
@@ -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);
     }
 
index 17be3ca2cf515f224b16bfae3d7cfa8764c489bb..501903152088df18613383fc0d4603e3d77b5b57 100644 (file)
@@ -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<YangVersion, YangExpr> 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<YangVersion, YangExpr> 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<YangVersion, YangExpr> 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<String, YangBinaryOperator> BINARY_OPERATORS = Maps.uniqueIndex(
         Arrays.asList(YangBinaryOperator.values()), YangBinaryOperator::toString);
     private static final Map<String, YangXPathNodeType> NODE_TYPES = Maps.uniqueIndex(Arrays.asList(
@@ -242,7 +250,7 @@ abstract class AntlrXPathParser implements YangXPathParser {
     }
 
     @SuppressWarnings("checkstyle:illegalCatch")
-    final Entry<YangVersion, YangExpr> 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);
     }
 
     /**
index 90212383534997b54bd664e5bed47bbb2b49dfb7..aadd9341565b5e2360729973560b0135349ed758 100644 (file)
@@ -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);
         }
     }