From 49a014e5d12793e46a06915df021a07a521d1c06 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 14 Aug 2020 11:09:05 +0200 Subject: [PATCH] Take advantage of keyword tokenization 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 --- .../rfc7950/repo/StatementContextVisitor.java | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java index 734f13526d..8f2659f97e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/StatementContextVisitor.java @@ -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) { -- 2.36.6