Do not compile augment/refine/deviate paths
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / Utils.java
index 5e56fecc7edf4efdc5fab31d23b386712af7d618..e4c43e0c30e2c935857dad5b55a5e0f95e4496aa 100644 (file)
@@ -115,10 +115,6 @@ public final class Utils {
         return keyNodes;
     }
 
-    public static List<String> splitPathToNodeNames(final String path) {
-        return SLASH_SPLITTER.splitToList(path);
-    }
-
     private static void compileXPath(final StmtContext<?, ?, ?> ctx, final String path) {
         final XPath xPath = XPATH_FACTORY.get().newXPath();
 
@@ -185,25 +181,20 @@ public final class Utils {
         return false;
     }
 
-    public static Iterable<QName> parseXPath(final StmtContext<?, ?, ?> ctx, final String path) {
-
-        String trimmedPath = trimSingleLastSlashFromXPath(path);
-
-        compileXPath(ctx, trimmedPath);
-
-        List<String> nodeNames = splitPathToNodeNames(trimmedPath);
-        List<QName> qNames = new ArrayList<>(nodeNames.size());
-
-        for (String nodeName : nodeNames) {
+    static SchemaNodeIdentifier nodeIdentifierFromPath(final StmtContext<?, ?, ?> ctx, final String path) {
+        // FIXME: is the path trimming really necessary??
+        final List<QName> qNames = new ArrayList<>();
+        for (String nodeName : SLASH_SPLITTER.split(trimSingleLastSlashFromXPath(path))) {
             try {
                 final QName qName = Utils.qNameFromArgument(ctx, nodeName);
                 qNames.add(qName);
             } catch (Exception e) {
-                throw new IllegalArgumentException(e);
+                throw new IllegalArgumentException(
+                    String.format("Failed to parse node '%s' in path '%s'", nodeName, path), e);
             }
         }
 
-        return qNames;
+        return SchemaNodeIdentifier.create(qNames, PATH_ABS.matcher(path).matches());
     }
 
     public static String stringFromStringContext(final YangStatementParser.ArgumentContext context) {