Merge location step shorthand handling 28/81028/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 20 Mar 2019 11:19:08 +0000 (12:19 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 20 Mar 2019 11:20:10 +0000 (12:20 +0100)
This eliminates duplicate code by introducing parseStepShorthand()
and adjusting its two users to use it.

Change-Id: I0e4db3e9a7fd062e5085ce27f6ba6d21cf6cf668
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java

index e49f8c437a6b38533925cb19441ab365cb3158aa..1366bbe334012b186647af689f5d018a12ece3fe 100644 (file)
@@ -231,15 +231,7 @@ final class AntlrXPathParser implements YangXPathParser {
         verifyChildCount(abs, 2);
 
         final Deque<Step> steps = parseLocationPathSteps(getChild(abs, RelativeLocationPathContext.class, 1));
-        switch (getTerminalType(abs, 0)) {
-            case xpathParser.PATHSEP:
-                break;
-            case xpathParser.ABRPATH:
-                steps.addFirst(YangXPathAxis.DESCENDANT_OR_SELF.asStep());
-                break;
-            default:
-                throw illegalShape(abs);
-        }
+        parseStepShorthand(abs.getChild(0)).ifPresent(steps::addFirst);
 
         return YangLocationPath.of(true, steps);
     }
@@ -275,6 +267,8 @@ final class AntlrXPathParser implements YangXPathParser {
         }
 
         verifyChildCount(expr, 3);
+
+        // FIXME: this actually is a concatenation
         return parseOperator(expr.getChild(1)).exprWith(filter,
             parseRelativeLocationPath(getChild(expr, RelativeLocationPathContext.class, 2)));
     }
@@ -315,16 +309,7 @@ final class AntlrXPathParser implements YangXPathParser {
         steps.add(parseStep(nextContext(it, StepContext.class)));
 
         while (it.hasNext()) {
-            final ParseTree tree = it.next();
-            switch (verifyTerminal(tree).getSymbol().getType()) {
-                case xpathParser.PATHSEP:
-                    break;
-                case xpathParser.ABRPATH:
-                    steps.add(YangXPathAxis.DESCENDANT_OR_SELF.asStep());
-                    break;
-                default:
-                    throw illegalShape(tree);
-            }
+            parseStepShorthand(it.next()).ifPresent(steps::add);
 
             // Parse step and add it if it's not SELF_STEP
             final Step step = parseStep(nextContext(it, StepContext.class));
@@ -544,4 +529,15 @@ final class AntlrXPathParser implements YangXPathParser {
         final String str = verifyTerminal(tree).getText();
         return verifyNotNull(BINARY_OPERATORS.get(str), "Unhandled operator %s", str);
     }
+
+    private static Optional<Step> parseStepShorthand(final ParseTree tree) {
+        switch (verifyTerminal(tree).getSymbol().getType()) {
+            case xpathParser.PATHSEP:
+                return Optional.empty();
+            case xpathParser.ABRPATH:
+                return Optional.of(YangXPathAxis.DESCENDANT_OR_SELF.asStep());
+            default:
+                throw illegalShape(tree);
+        }
+    }
 }