Take advantage of keyword tokenization 52/92152/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 14 Aug 2020 09:09:05 +0000 (11:09 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 14 Aug 2020 12:06:47 +0000 (14:06 +0200)
Now that the tokenization has been fixed, we can rely on keyword
context to provide us with neatly split prefix and local name --
hence we do not need to perform concat/split.

Change-Id: I5d8e37d2267fefa3c5eafc542e00df33142a0bae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java

index 734f13526d7fe4154cb7ea899aa90495c148a635..8f2659f97ed44f509b9ff07d08ea03b5051dcf92 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.repo;
 import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.base.VerifyException;
 import java.util.Optional;
 import org.antlr.v4.runtime.Token;
 import org.antlr.v4.runtime.tree.ParseTree;
@@ -24,7 +25,6 @@ import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.Statemen
 import org.opendaylight.yangtools.yang.parser.spi.source.DeclarationInTextSource;
 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter.ResumedStatement;
@@ -61,31 +61,30 @@ class StatementContextVisitor {
      * @return valid QName for declared statement to be written, or null
      */
     QName getValidStatementDefinition(final KeywordContext keyword, final StatementSourceReference ref) {
-        final String keywordText = keyword.getText();
-        final int firstColon = keywordText.indexOf(':');
-        if (firstColon == -1) {
-            final StatementDefinition def = stmtDef.get(QName.create(YangConstants.RFC6020_YIN_MODULE, keywordText));
-            return def != null ? def.getStatementName() : null;
-        }
-
-        SourceException.throwIf(firstColon == keywordText.length() - 1
-                || keywordText.indexOf(':', firstColon + 1) != -1, ref, "Malformed statement '%s'", keywordText);
+        switch (keyword.getChildCount()) {
+            case 1:
+                final StatementDefinition def = stmtDef.get(QName.create(YangConstants.RFC6020_YIN_MODULE,
+                    keyword.getChild(0).getText()));
+                return def != null ? def.getStatementName() : null;
+            case 3:
+                if (prefixes == null) {
+                    // No prefixes to look up from
+                    return null;
+                }
 
-        if (prefixes == null) {
-            // No prefixes to look up from
-            return null;
-        }
+                final String prefix = keyword.getChild(0).getText();
+                final QNameModule qNameModule = prefixes.get(prefix);
+                if (qNameModule == null) {
+                    // Failed to look the namespace
+                    return null;
+                }
 
-        final String prefix = keywordText.substring(0, firstColon);
-        final QNameModule qNameModule = prefixes.get(prefix);
-        if (qNameModule == null) {
-            // Failed to look the namespace
-            return null;
+                final String localName = keyword.getChild(2).getText();
+                final StatementDefinition foundStmtDef = resolveStatement(qNameModule, localName);
+                return foundStmtDef != null ? foundStmtDef.getStatementName() : null;
+            default:
+                throw new VerifyException("Unexpected shape of " + keyword);
         }
-
-        final String localName = keywordText.substring(firstColon + 1);
-        final StatementDefinition foundStmtDef = resolveStatement(qNameModule, localName);
-        return foundStmtDef != null ? foundStmtDef.getStatementName() : null;
     }
 
     StatementDefinition resolveStatement(final QNameModule module, final String localName) {