BUG-7052: Move qnameFromArgument to StmtContextUtils 06/58706/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 8 Jun 2017 00:09:44 +0000 (02:09 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 12 Jun 2017 11:24:58 +0000 (13:24 +0200)
This has no dependencies on RFC6020, move it to common statement
utilities. Also takes all utility methods used by it.

This removes {BuildGlobal,Substatement}Context->rfc6020.Utils and
rfc6020.Utils -> reactor.RootStatementContext dependencies, which
by defition is Good.

Change-Id: I9ff90a0be8c4eaee2c085c9333a71c12619d2d7c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 742be43770eb77e1898466d3d887422cc9127e40)

37 files changed:
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AnyxmlStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ArgumentStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/AugmentStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BaseStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BitStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/CaseStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ChoiceStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ContainerStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ExtensionStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/FeatureStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/GroupingStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IdentityStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IfFeatureStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/InputStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/KeyStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafListStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/LeafStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ListStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModuleStatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/NotificationStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/OutputStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/RpcStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/StmtNamespaceContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/SubmoduleStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypedefStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/AugmentEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/ImportEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/UnknownEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/YangDataEffectiveStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/ActionStatementImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc7950/AnydataStatementImpl.java

index 2877fc374f705636c7035a48cbb9e4cb98ac7b93..9e7aa45ce8c87b75f31dccea295c61539f6725e5 100644 (file)
@@ -9,34 +9,46 @@ package org.opendaylight.yangtools.yang.parser.spi.meta;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
 import com.google.common.collect.Iterables;
 import java.util.Collection;
+import java.util.Date;
+import java.util.Optional;
 import java.util.Set;
 import java.util.function.Predicate;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.common.YangVersion;
+import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
+import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
+import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier;
+import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
+import org.opendaylight.yangtools.yang.parser.spi.source.ModuleIdentifierToModuleQName;
+import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.UnknownStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangDataStatementImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public final class StmtContextUtils {
-    private static final Logger LOG = LoggerFactory.getLogger(StmtContextUtils.class);
-
     public static final Splitter LIST_KEY_SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults();
 
     private StmtContextUtils() {
@@ -474,4 +486,125 @@ public final class StmtContextUtils {
                     statementDef.getStatementName(), leafStmtCtx.getStatementArgument());
         });
     }
+
+    public static QName qnameFromArgument(StmtContext<?, ?, ?> ctx, final String value) {
+        if (Strings.isNullOrEmpty(value)) {
+            return ctx.getPublicDefinition().getStatementName();
+        }
+
+        String prefix;
+        QNameModule qNameModule = null;
+        String localName = null;
+
+        final String[] namesParts = value.split(":");
+        switch (namesParts.length) {
+        case 1:
+            localName = namesParts[0];
+            qNameModule = StmtContextUtils.getRootModuleQName(ctx);
+            break;
+        default:
+            prefix = namesParts[0];
+            localName = namesParts[1];
+            qNameModule = StmtContextUtils.getModuleQNameByPrefix(ctx, prefix);
+            // in case of unknown statement argument, we're not going to parse it
+            if (qNameModule == null
+                    && ctx.getPublicDefinition().getDeclaredRepresentationClass()
+                    .isAssignableFrom(UnknownStatementImpl.class)) {
+                localName = value;
+                qNameModule = StmtContextUtils.getRootModuleQName(ctx);
+            }
+            if (qNameModule == null
+                    && ctx.getCopyHistory().getLastOperation() == CopyType.ADDED_BY_AUGMENTATION) {
+                ctx = ctx.getOriginalCtx();
+                qNameModule = StmtContextUtils.getModuleQNameByPrefix(ctx, prefix);
+            }
+            break;
+        }
+
+        qNameModule = InferenceException.throwIfNull(qNameModule, ctx.getStatementSourceReference(),
+            "Cannot resolve QNameModule for '%s'", value);
+
+        final QNameModule resultQNameModule;
+        if (qNameModule.getRevision() == null) {
+            resultQNameModule = QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV)
+                .intern();
+        } else {
+            resultQNameModule = qNameModule;
+        }
+
+        return ctx.getFromNamespace(QNameCacheNamespace.class, QName.create(resultQNameModule, localName));
+    }
+
+    public static QNameModule getRootModuleQName(final StmtContext<?, ?, ?> ctx) {
+        if (ctx == null) {
+            return null;
+        }
+
+        final StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
+        final QNameModule qNameModule;
+
+        if (producesDeclared(rootCtx, ModuleStatement.class)) {
+            qNameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
+        } else if (producesDeclared(rootCtx, SubmoduleStatement.class)) {
+            final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
+                BelongsToStatement.class);
+            qNameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
+        } else {
+            qNameModule = null;
+        }
+
+        Preconditions.checkArgument(qNameModule != null, "Failed to look up root QNameModule for %s", ctx);
+        if (qNameModule.getRevision() != null) {
+            return qNameModule;
+        }
+
+        return QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV).intern();
+    }
+
+    public static QNameModule getModuleQNameByPrefix(final StmtContext<?, ?, ?> ctx, final String prefix) {
+        final ModuleIdentifier modId = ctx.getRoot().getFromNamespace(ImpPrefixToModuleIdentifier.class, prefix);
+        final QNameModule qNameModule = ctx.getFromNamespace(ModuleIdentifierToModuleQName.class, modId);
+
+        if (qNameModule == null && producesDeclared(ctx.getRoot(), SubmoduleStatement.class)) {
+            final String moduleName = ctx.getRoot().getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
+            return ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
+        }
+        return qNameModule;
+    }
+
+    public static SourceIdentifier createSourceIdentifier(final StmtContext<?, ?, ?> root) {
+        final QNameModule qNameModule = root.getFromNamespace(ModuleCtxToModuleQName.class, root);
+        if (qNameModule != null) {
+            // creates SourceIdentifier for a module
+            return RevisionSourceIdentifier.create((String) root.getStatementArgument(),
+                qNameModule.getFormattedRevision());
+        }
+
+        // creates SourceIdentifier for a submodule
+        final Date revision = Optional.ofNullable(getLatestRevision(root.declaredSubstatements()))
+                .orElse(SimpleDateFormatUtil.DEFAULT_DATE_REV);
+        final String formattedRevision = SimpleDateFormatUtil.getRevisionFormat().format(revision);
+        return RevisionSourceIdentifier.create((String) root.getStatementArgument(), formattedRevision);
+    }
+
+    public static Date getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {
+        Date revision = null;
+        for (final StmtContext<?, ?, ?> subStmt : subStmts) {
+            if (subStmt.getPublicDefinition().getDeclaredRepresentationClass().isAssignableFrom(RevisionStatement
+                    .class)) {
+                if (revision == null && subStmt.getStatementArgument() != null) {
+                    revision = (Date) subStmt.getStatementArgument();
+                } else if (subStmt.getStatementArgument() != null && ((Date) subStmt.getStatementArgument()).compareTo
+                        (revision) > 0) {
+                    revision = (Date) subStmt.getStatementArgument();
+                }
+            }
+        }
+        return revision;
+    }
+
+    public static boolean isUnknownNode(final StmtContext<?, ?, ?> stmtCtx) {
+        return stmtCtx != null && stmtCtx.getPublicDefinition().getDeclaredRepresentationClass()
+                .isAssignableFrom(UnknownStatementImpl.class);
+    }
 }
index c255fbf379be89ab50a90b1e4610248cf5935255..246b71a50e2b33c492df88df7c55cc6bb4d5256f 100644 (file)
@@ -52,6 +52,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules.SupportedModules;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
@@ -61,7 +62,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamesp
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.PhaseCompletionProgress;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -242,7 +242,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh
 
     private SomeModifiersUnresolvedException propagateException(final SourceSpecificContext source,
             final RuntimeException cause) throws SomeModifiersUnresolvedException {
-        final SourceIdentifier sourceId = Utils.createSourceIdentifier(source.getRoot());
+        final SourceIdentifier sourceId = StmtContextUtils.createSourceIdentifier(source.getRoot());
         if (!(cause instanceof SourceException)) {
             /*
              * This should not be happening as all our processing should provide SourceExceptions.
@@ -348,7 +348,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh
 
             if (!addedCause) {
                 addedCause = true;
-                final SourceIdentifier sourceId = Utils.createSourceIdentifier(failedSource.getRoot());
+                final SourceIdentifier sourceId = StmtContextUtils.createSourceIdentifier(failedSource.getRoot());
                 buildFailure = new SomeModifiersUnresolvedException(currentPhase, sourceId, sourceEx);
             } else {
                 buildFailure.addSuppressed(sourceEx);
index 2710f0802ad025bb3fc26f1f233b8f40487acc7a..b736a23c2821c699618816a9042623e9c68ef4d5 100644 (file)
@@ -46,7 +46,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespac
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -233,7 +232,7 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
         Verify.verify(maybeParentPath.isPresent(), "Parent %s does not have a SchemaPath", parent);
         final SchemaPath parentPath = maybeParentPath.get();
 
-        if (Utils.isUnknownNode(this)) {
+        if (StmtContextUtils.isUnknownNode(this)) {
             return parentPath.createChild(getPublicDefinition().getStatementName());
         }
         if (argument instanceof QName) {
@@ -255,8 +254,8 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
         if (argument instanceof String) {
             // FIXME: This may yield illegal argument exceptions
             final StmtContext<?, ?, ?> originalCtx = getOriginalCtx();
-            final QName qname = originalCtx != null ? Utils.qNameFromArgument(originalCtx, (String) argument) : Utils
-                    .qNameFromArgument(this, (String) argument);
+            final QName qname = originalCtx != null ? StmtContextUtils.qnameFromArgument(originalCtx, (String) argument)
+                    : StmtContextUtils.qnameFromArgument(this, (String) argument);
             return parentPath.createChild(qname);
         }
         if (argument instanceof SchemaNodeIdentifier
index 6a9d016de61a3b057c448d6e083a4214f520708b..00e26594eab733cc2fcf6e12a8f6d7ad9a2e6f51 100644 (file)
@@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.AnyxmlSchemaLocationNamespace;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.AnyXmlEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.YangModeledAnyXmlEffectiveStatementImpl;
@@ -63,7 +64,7 @@ public class AnyxmlStatementImpl extends AbstractDeclaredStatement<QName> implem
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 0eca7b96b46b770684802eea22971226deda41d4..aeb42411ad91f5eec48ae179c32cf234465f3630 100644 (file)
@@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ArgumentEffectiveStatementImpl;
 
 public class ArgumentStatementImpl extends AbstractDeclaredStatement<QName>
@@ -41,7 +42,7 @@ public class ArgumentStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index e99dd91b0ddfa6f24388b71bf109d95ca2bcad49..50e6a73e33d33e3e3d306ceb4c6d0c11a79a2870 100644 (file)
@@ -175,7 +175,7 @@ public class AugmentStatementImpl extends AbstractDeclaredStatement<SchemaNodeId
                     if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) {
                         final StatementContextBase<?, ?, ?> targetNode = Utils.findNode(getSearchRoot(augmentNode),
                                 augmentNode.getStatementArgument());
-                        if (Utils.isUnknownNode(targetNode)) {
+                        if (StmtContextUtils.isUnknownNode(targetNode)) {
                             augmentNode.setIsSupportedToBuildEffective(false);
                             LOG.warn(
                                     "Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}",
index e0c5b7a5ef17392104ad1d3885d179aa86032cf8..64bf93e35e15a1a5c4b5f103a6dd24fcd7a5504e 100644 (file)
@@ -49,7 +49,7 @@ public class BaseStatementImpl extends AbstractDeclaredStatement<QName> implemen
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index a433cd722932af08706607a8ffd7c4353f237a45..2446145c46585a4af1d2c18780ade364b9d11490 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BitEffectiveStatementImpl;
 
 public class BitStatementImpl extends AbstractDeclaredStatement<QName> implements BitStatement {
@@ -46,7 +47,7 @@ public class BitStatementImpl extends AbstractDeclaredStatement<QName> implement
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index cd9d176507ed01839fd55bbfa661aee34c27f4f9..53b199660a0ff3263a9f1aa38ceac1ffc2fea8a2 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.CaseEffectiveStatementImpl;
 
 public class CaseStatementImpl extends AbstractDeclaredStatement<QName> implements CaseStatement {
@@ -56,7 +57,7 @@ public class CaseStatementImpl extends AbstractDeclaredStatement<QName> implemen
         }
 
         @Override public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 5918274c6a041885d166871fed2c96e835283ab9..7118280dc33f8ec29c8dd64530e4a287d8c18572 100644 (file)
@@ -30,6 +30,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.ImplicitSubstatement;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
@@ -70,7 +71,7 @@ public class ChoiceStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index b0d84057aa909bbdda198b0dfc978177c2b52033..0c0e4004f55a6a76d5e893de0425fe0bd6fe339a 100644 (file)
@@ -31,6 +31,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ContainerEffectiveStatementImpl;
 
 public class ContainerStatementImpl extends AbstractDeclaredStatement<QName> implements ContainerStatement {
@@ -67,7 +68,7 @@ public class ContainerStatementImpl extends AbstractDeclaredStatement<QName> imp
 
         @Override
         public QName parseArgumentValue(final StmtContext<?,?,?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx,value);
+            return StmtContextUtils.qnameFromArgument(ctx,value);
         }
 
         @Override
index 888167da9f7e8a930b31de70c837e53c6b11cf38..761f11c81db098a913bf6cfa4b8cfcd55b32580e 100644 (file)
@@ -45,7 +45,7 @@ public class ExtensionStatementImpl extends AbstractDeclaredStatement<QName> imp
 
         @Override
         public QName parseArgumentValue(final StmtContext<?,?,?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 588db9d3d6ce4485c9392dfb8a29167a3cab027f..7b13e2117f1a5b4e2d4007eced2b47036fc44e95 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.FeatureEffectiveStatementImpl;
 
 public class FeatureStatementImpl extends AbstractDeclaredStatement<QName>
@@ -48,7 +49,7 @@ public class FeatureStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 0ec64220dead1fc42a2a3545ea40f78c4385c69c..a18a15f6a07ee7ef0b22f8dd5939919cdfcb6753 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.GroupingEffectiveStatementImpl;
 
 public class GroupingStatementImpl extends AbstractDeclaredStatement<QName>
@@ -61,7 +62,7 @@ public class GroupingStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 65b5c7f96b3756e2d2aa9324a4f53745f3bf2f34..997d5d271b14e60ac5046981f3c65752a3992d07 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IdentityEffectiveStatementImpl;
 
 public class IdentityStatementImpl extends AbstractDeclaredStatement<QName>
@@ -48,7 +49,7 @@ public class IdentityStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 15fb9d79b8500e83257e1025aa1f9cc859bd946f..93354e0371a24a56a25e4e6f1f06c5f6f1edca37 100644 (file)
@@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.IfFeatureEffectiveStatementImpl;
 
@@ -55,7 +56,7 @@ public class IfFeatureStatementImpl extends AbstractDeclaredStatement<Predicate<
             if(YangVersion.VERSION_1_1.equals(ctx.getRootVersion())) {
                 return parseIfFeatureExpression(ctx, value);
             } else {
-                final QName qName = Utils.qNameFromArgument(ctx, value);
+                final QName qName = StmtContextUtils.qnameFromArgument(ctx, value);
                 return setQNames -> setQNames.contains(qName);
             }
         }
@@ -126,7 +127,7 @@ public class IfFeatureStatementImpl extends AbstractDeclaredStatement<Predicate<
 
             @Override
             public Predicate<Set<QName>> visitIdentifier_ref_arg(final Identifier_ref_argContext ctx) {
-                final QName featureQName = Utils.qNameFromArgument(stmtCtx, ctx.getText());
+                final QName featureQName = StmtContextUtils.qnameFromArgument(stmtCtx, ctx.getText());
                 return setQNames -> setQNames.contains(featureQName);
             }
         }
index 9b9dd4d14fb6d271a27b577851d004ef1da83c17..51f472a7458fce43d70d77239a5c3eddd89bf42e 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.InputEffectiveStatementImpl;
 
 public class InputStatementImpl extends AbstractDeclaredStatement<QName>
@@ -53,7 +54,7 @@ public class InputStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, "input");
+            return StmtContextUtils.qnameFromArgument(ctx, "input");
         }
 
         @Override
index 0ba28ac4015304447bf2b73ac226f1182367c703..1ee3476225b761348b01d9685f2fec961791b9f7 100644 (file)
@@ -46,7 +46,7 @@ public class KeyStatementImpl extends AbstractDeclaredStatement<Collection<Schem
             final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder();
             int tokens = 0;
             for (String keyToken : StmtContextUtils.LIST_KEY_SPLITTER.split(value)) {
-                builder.add(SchemaNodeIdentifier.create(false, Utils.qNameFromArgument(ctx, keyToken)));
+                builder.add(SchemaNodeIdentifier.create(false, StmtContextUtils.qnameFromArgument(ctx, keyToken)));
                 tokens++;
             }
 
index 4ecdcd616038425d6339bc248ca652bd1e84dbba..da7643f8111bc4427eee5a4b603f3a89b0ec49ab 100644 (file)
@@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.LeafListEffectiveStatementImpl;
 
 public class LeafListStatementImpl extends AbstractDeclaredStatement<QName>
@@ -74,7 +75,7 @@ public class LeafListStatementImpl extends AbstractDeclaredStatement<QName>
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value)
                 {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index c88236ac562ab02508d4e5605c6e27ba8e2bafdf..c51ea80e038a2819a459ef286b0893c43ffbb688 100644 (file)
@@ -60,7 +60,7 @@ public class LeafStatementImpl extends AbstractDeclaredStatement<QName> implemen
         }
 
         @Override public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx,value);
+            return StmtContextUtils.qnameFromArgument(ctx,value);
         }
 
         @Override
index 2a20d072b4051e94f9b09eb6442a297f2a2b7599..dbed38ce36ff9d93104c5fd43f9279625f96845e 100644 (file)
@@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.ListEffectiveStatementImpl;
 
 public class ListStatementImpl extends AbstractDeclaredStatement<QName>
@@ -79,7 +80,7 @@ public class ListStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 643fead841d64a8f9710ac2d7164b2e4dcf7c390..8a3211ca2e2188ee8c9acd6f85f93220941136c4 100644 (file)
@@ -34,6 +34,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleName
 import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleIdentifier;
@@ -116,7 +117,8 @@ public class ModuleStatementSupport extends
 
         stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt);
 
-        Optional<Date> revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements()));
+        Optional<Date> revisionDate = Optional.ofNullable(StmtContextUtils.getLatestRevision(
+            stmt.declaredSubstatements()));
         if (!revisionDate.isPresent()) {
             revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV);
         }
@@ -136,7 +138,8 @@ public class ModuleStatementSupport extends
         SourceException.throwIf(!moduleNs.isPresent(), stmt.getStatementSourceReference(),
             "Namespace of the module [%s] is missing", stmt.getStatementArgument());
 
-        Optional<Date> revisionDate = Optional.ofNullable(Utils.getLatestRevision(stmt.declaredSubstatements()));
+        Optional<Date> revisionDate = Optional.ofNullable(StmtContextUtils.getLatestRevision(
+            stmt.declaredSubstatements()));
         if (!revisionDate.isPresent()) {
             revisionDate = Optional.of(SimpleDateFormatUtil.DEFAULT_DATE_REV);
         }
index 933e3e9b78b0a5a3edfa4eaaf0d6948b44d546ea..cf2d9de4fed985c90a81757b9ec7281229a5003e 100644 (file)
@@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.NotificationEffectiveStatementImpl;
 
 public class NotificationStatementImpl extends AbstractDeclaredStatement<QName>
@@ -62,7 +63,7 @@ public class NotificationStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 53d1f327f58ca28069c789fd1f5ba83588fa5b7a..a5febeca13fc9cb9597930e3cb21acb57bfc6bbe 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.OutputEffectiveStatementImpl;
 
 public class OutputStatementImpl extends AbstractDeclaredStatement<QName> implements OutputStatement {
@@ -51,7 +52,7 @@ public class OutputStatementImpl extends AbstractDeclaredStatement<QName> implem
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, "output");
+            return StmtContextUtils.qnameFromArgument(ctx, "output");
         }
 
         @Override
index e7785ee7a5e70e3ce923d3a0f1cd2a444d489791..cbb49bfa45d90f46fc4dc0df3e889cd21eb436e7 100644 (file)
@@ -64,7 +64,7 @@ public class RpcStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index 91b17389009e46e97365ce8ae3aa4296c4192ff5..6baeebcb871346464a0a59eded5e444afbc8cc17 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Iterator;
 import javax.xml.namespace.NamespaceContext;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 /**
  * A {@link NamespaceContext} implementation based on the set of imports and local module namespace.
@@ -67,7 +68,7 @@ final class StmtNamespaceContext implements NamespaceContext {
             return localNamespaceURI();
         }
 
-        final QNameModule module = Utils.getModuleQNameByPrefix(ctx, prefix);
+        final QNameModule module = StmtContextUtils.getModuleQNameByPrefix(ctx, prefix);
         return module == null ? null : module.getNamespace().toString();
     }
 
index 968fd4f92ad8c8e8d96e7448ab86dcaa644b9b1d..c9323b1e8c5c21e10c4247e78457105f43def2a9 100644 (file)
@@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.SubmoduleEffectiveStatementImpl;
@@ -121,9 +122,9 @@ public class SubmoduleStatementImpl extends AbstractRootStatement<SubmoduleState
             stmt.addToNs(BelongsToPrefixToModuleName.class, prefix, belongsToModuleName);
         }
 
-        private ModuleIdentifier getSubmoduleIdentifier(
+        private static ModuleIdentifier getSubmoduleIdentifier(
                 final Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> stmt) {
-            final Date maybeDate = Utils.getLatestRevision(stmt.declaredSubstatements());
+            final Date maybeDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements());
             final Optional<Date> revisionDate = maybeDate != null ? Optional.of(maybeDate) : DEFAULT_REVISION;
 
             final ModuleIdentifier submoduleIdentifier = ModuleIdentifierImpl.create(stmt.getStatementArgument(),
index 968b93c884a43c44b446779852e9c3ce9d2fde88..86f4ef8c58be7bd7e54ceda86ad8d626904f1559 100644 (file)
@@ -46,6 +46,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.TypeDefEffectiveStatementImpl;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type.BinaryTypeEffectiveStatementImpl;
@@ -158,7 +159,7 @@ public class TypeStatementImpl extends AbstractDeclaredStatement<String>
                 typeStmt = BuiltinEffectiveStatements.UINT64;
                 break;
             default:
-                final QName qname = Utils.qNameFromArgument(ctx, ctx.getStatementArgument());
+                final QName qname = StmtContextUtils.qnameFromArgument(ctx, ctx.getStatementArgument());
                 final StmtContext<?, TypedefStatement, TypedefEffectiveStatement> typedef =
                         ctx.getFromNamespace(TypeNamespace.class, qname);
                 SourceException.throwIfNull(typedef, ctx.getStatementSourceReference(), "Type '%s' not found", qname);
@@ -215,7 +216,7 @@ public class TypeStatementImpl extends AbstractDeclaredStatement<String>
                 return;
             }
 
-            final QName typeQName = Utils.qNameFromArgument(stmt, stmt.getStatementArgument());
+            final QName typeQName = StmtContextUtils.qnameFromArgument(stmt, stmt.getStatementArgument());
             final ModelActionBuilder typeAction = stmt.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL);
             final Prerequisite<StmtContext<?, ?, ?>> typePrereq = typeAction.requiresCtx(stmt, TypeNamespace.class,
                     typeQName, ModelProcessingPhase.EFFECTIVE_MODEL);
index 1f2ae7182ceda2ae1fbefcab85704e5aeb0e12b4..282a613403638b55f12af7fad845bb6c218af058 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.parser.spi.TypeNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.TypeDefEffectiveStatementImpl;
 
@@ -51,7 +52,7 @@ public class TypedefStatementImpl extends AbstractDeclaredStatement<QName> imple
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index fa0372278854b748b7c03bbdea5514fbc85b7e7a..860fd2d1033537dc4b90dca5c111ef404de9f7be 100644 (file)
@@ -77,7 +77,7 @@ public class UsesStatementImpl extends AbstractDeclaredStatement<QName> implemen
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
@@ -368,7 +368,7 @@ public class UsesStatementImpl extends AbstractDeclaredStatement<QName> implemen
             return targetCtx.getFromNamespace(ModuleCtxToModuleQName.class, targetCtx);
         }
         if (targetCtx.getPublicDefinition() == YangStmtMapping.AUGMENT) {
-            return Utils.getRootModuleQName(targetCtx);
+            return StmtContextUtils.getRootModuleQName(targetCtx);
         }
 
         final Object targetStmtArgument = targetCtx.getStatementArgument();
index 632fd9788934d116e095fc9cc5d33a03f3e8bce3..bce189b6df16bcfba55e29b3868356a72e543fb7 100644 (file)
@@ -9,21 +9,16 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
 import static org.opendaylight.yangtools.yang.common.YangConstants.RFC6020_YANG_NAMESPACE;
 import static org.opendaylight.yangtools.yang.common.YangConstants.YANG_XPATH_FUNCTIONS_PREFIX;
-import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf;
 
 import com.google.common.base.CharMatcher;
-import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableBiMap;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Optional;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -35,34 +30,15 @@ import javax.xml.xpath.XPathFactory;
 import org.antlr.v4.runtime.tree.TerminalNode;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
 import org.opendaylight.yangtools.yang.common.YangVersion;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.Status;
-import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Relative;
-import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
-import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
-import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
-import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
-import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
-import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModuleName;
-import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToModuleIdentifier;
-import org.opendaylight.yangtools.yang.parser.spi.source.ModuleCtxToModuleQName;
-import org.opendaylight.yangtools.yang.parser.spi.source.ModuleIdentifierToModuleQName;
-import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNameToModuleQName;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.RootStatementContext;
 import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -116,7 +92,7 @@ public final class Utils {
         for (final String keyToken : keyTokens) {
 
             final SchemaNodeIdentifier.Relative keyNode = (Relative) SchemaNodeIdentifier.Relative.create(false,
-                    Utils.qNameFromArgument(ctx, keyToken));
+                    StmtContextUtils.qnameFromArgument(ctx, keyToken));
             keyNodes.add(keyNode);
         }
 
@@ -204,7 +180,7 @@ public final class Utils {
         final List<QName> qNames = new ArrayList<>();
         for (final String nodeName : SLASH_SPLITTER.split(trimSingleLastSlashFromXPath(path))) {
             try {
-                final QName qName = Utils.qNameFromArgument(ctx, nodeName);
+                final QName qName = StmtContextUtils.qnameFromArgument(ctx, nodeName);
                 qNames.add(qName);
             } catch (final RuntimeException e) {
                 throw new SourceException(ctx.getStatementSourceReference(), e,
@@ -290,102 +266,12 @@ public final class Utils {
         }
     }
 
-    public static QName qNameFromArgument(StmtContext<?, ?, ?> ctx, final String value) {
-        if (Strings.isNullOrEmpty(value)) {
-            return ctx.getPublicDefinition().getStatementName();
-        }
-
-        String prefix;
-        QNameModule qNameModule = null;
-        String localName = null;
-
-        final String[] namesParts = value.split(":");
-        switch (namesParts.length) {
-        case 1:
-            localName = namesParts[0];
-            qNameModule = getRootModuleQName(ctx);
-            break;
-        default:
-            prefix = namesParts[0];
-            localName = namesParts[1];
-            qNameModule = getModuleQNameByPrefix(ctx, prefix);
-            // in case of unknown statement argument, we're not going to parse it
-            if (qNameModule == null
-                    && ctx.getPublicDefinition().getDeclaredRepresentationClass()
-                    .isAssignableFrom(UnknownStatementImpl.class)) {
-                localName = value;
-                qNameModule = getRootModuleQName(ctx);
-            }
-            if (qNameModule == null
-                    && ctx.getCopyHistory().getLastOperation() == CopyType.ADDED_BY_AUGMENTATION) {
-                ctx = ctx.getOriginalCtx();
-                qNameModule = getModuleQNameByPrefix(ctx, prefix);
-            }
-            break;
-        }
-
-        qNameModule = InferenceException.throwIfNull(qNameModule, ctx.getStatementSourceReference(),
-            "Cannot resolve QNameModule for '%s'", value);
-
-        final QNameModule resultQNameModule;
-        if (qNameModule.getRevision() == null) {
-            resultQNameModule = QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV)
-                .intern();
-        } else {
-            resultQNameModule = qNameModule;
-        }
-
-        return ctx.getFromNamespace(QNameCacheNamespace.class, QName.create(resultQNameModule, localName));
-    }
-
-    public static QNameModule getModuleQNameByPrefix(final StmtContext<?, ?, ?> ctx, final String prefix) {
-        final ModuleIdentifier modId = ctx.getRoot().getFromNamespace(ImpPrefixToModuleIdentifier.class, prefix);
-        final QNameModule qNameModule = ctx.getFromNamespace(ModuleIdentifierToModuleQName.class, modId);
-
-        if (qNameModule == null && StmtContextUtils.producesDeclared(ctx.getRoot(), SubmoduleStatement.class)) {
-            final String moduleName = ctx.getRoot().getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
-            return ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
-        }
-        return qNameModule;
-    }
-
-    public static QNameModule getRootModuleQName(final StmtContext<?, ?, ?> ctx) {
-        if (ctx == null) {
-            return null;
-        }
-
-        final StmtContext<?, ?, ?> rootCtx = ctx.getRoot();
-        final QNameModule qNameModule;
-
-        if (StmtContextUtils.producesDeclared(rootCtx, ModuleStatement.class)) {
-            qNameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
-        } else if (StmtContextUtils.producesDeclared(rootCtx, SubmoduleStatement.class)) {
-            final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
-                BelongsToStatement.class);
-            qNameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
-        } else {
-            qNameModule = null;
-        }
-
-        Preconditions.checkArgument(qNameModule != null, "Failed to look up root QNameModule for %s", ctx);
-        if (qNameModule.getRevision() != null) {
-            return qNameModule;
-        }
-
-        return QNameModule.create(qNameModule.getNamespace(), SimpleDateFormatUtil.DEFAULT_DATE_REV).intern();
-    }
-
     @Nullable
     public static StatementContextBase<?, ?, ?> findNode(final StmtContext<?, ?, ?> rootStmtCtx,
             final SchemaNodeIdentifier node) {
         return (StatementContextBase<?, ?, ?>) rootStmtCtx.getFromNamespace(SchemaNodeIdentifierBuildNamespace.class, node);
     }
 
-    public static boolean isUnknownNode(final StmtContext<?, ?, ?> stmtCtx) {
-        return stmtCtx != null && stmtCtx.getPublicDefinition().getDeclaredRepresentationClass()
-                .isAssignableFrom(UnknownStatementImpl.class);
-    }
-
     static String internBoolean(final String input) {
         if ("true".equals(input)) {
             return "true";
@@ -396,36 +282,6 @@ public final class Utils {
         }
     }
 
-    public static Status parseStatus(final String value) {
-        switch (value) {
-            case "current":
-                return Status.CURRENT;
-            case "deprecated":
-                return Status.DEPRECATED;
-            case "obsolete":
-                return Status.OBSOLETE;
-            default:
-                LOG.warn("Invalid 'status' statement: {}", value);
-                return null;
-        }
-    }
-
-    public static Date getLatestRevision(final Iterable<? extends StmtContext<?, ?, ?>> subStmts) {
-        Date revision = null;
-        for (final StmtContext<?, ?, ?> subStmt : subStmts) {
-            if (subStmt.getPublicDefinition().getDeclaredRepresentationClass().isAssignableFrom(RevisionStatement
-                    .class)) {
-                if (revision == null && subStmt.getStatementArgument() != null) {
-                    revision = (Date) subStmt.getStatementArgument();
-                } else if (subStmt.getStatementArgument() != null && ((Date) subStmt.getStatementArgument()).compareTo
-                        (revision) > 0) {
-                    revision = (Date) subStmt.getStatementArgument();
-                }
-            }
-        }
-        return revision;
-    }
-
     /**
      * Replaces illegal characters of QName by the name of the character (e.g.
      * '?' is replaced by "QuestionMark" etc.).
@@ -446,19 +302,4 @@ public final class Utils {
     public static boolean belongsToTheSameModule(final QName targetStmtQName, final QName sourceStmtQName) {
         return targetStmtQName.getModule().equals(sourceStmtQName.getModule());
     }
-
-    public static SourceIdentifier createSourceIdentifier(final RootStatementContext<?, ?, ?> root) {
-        final QNameModule qNameModule = root.getFromNamespace(ModuleCtxToModuleQName.class, root);
-        if (qNameModule != null) {
-            // creates SourceIdentifier for a module
-            return RevisionSourceIdentifier.create((String) root.getStatementArgument(),
-                qNameModule.getFormattedRevision());
-        }
-
-        // creates SourceIdentifier for a submodule
-        final Date revision = Optional.ofNullable(Utils.getLatestRevision(root.declaredSubstatements()))
-                .orElse(SimpleDateFormatUtil.DEFAULT_DATE_REV);
-        final String formattedRevision = SimpleDateFormatUtil.getRevisionFormat().format(revision);
-        return RevisionSourceIdentifier.create((String) root.getStatementArgument(), formattedRevision);
-    }
 }
index 989a85490456aceefafe9a416686507fea98fc3a..f97300282e2c07e0303b4940fdb628b406a061dc 100644 (file)
@@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 public final class AugmentEffectiveStatementImpl extends
         AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement> implements
@@ -53,7 +53,7 @@ public final class AugmentEffectiveStatementImpl extends
 
         this.targetPath = ctx.getStatementArgument().asSchemaPath();
 
-        final QNameModule rootModuleQName = Utils.getRootModuleQName(ctx);
+        final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx);
         this.namespace = rootModuleQName.getNamespace();
         this.revision = rootModuleQName.getRevision();
 
index 70d968d97c4feb199e9bb97fa71982d18064b7b0..4390debe0dec043ef5664b32d6776988a3cfd8cf 100644 (file)
@@ -18,9 +18,9 @@ import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.MissingSubstatementException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.ImpPrefixToSemVerModuleIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
 public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase<String, ImportStatement> implements
         ModuleImport {
@@ -67,7 +67,7 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase
          * When 'revision-date' of an import is not specified in yang source, we
          * need to find revision of imported module.
          */
-        final QNameModule importedModule = Utils.getModuleQNameByPrefix(ctx, this.prefix);
+        final QNameModule importedModule = StmtContextUtils.getModuleQNameByPrefix(ctx, this.prefix);
         SourceException.throwIfNull(importedModule, ctx.getStatementSourceReference(),
                 "Unable to find import of module %s with prefix %s.", this.moduleName, this.prefix);
         return importedModule.getRevision();
index 3277dde016b6a3b2984166782ab76817ab3529aa..7d636cee022e5a6712a55529a060baa1b005e02b 100644 (file)
@@ -15,7 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 public final class UnknownEffectiveStatementImpl extends UnknownEffectiveStatementBase<String> {
 
@@ -33,7 +33,7 @@ public final class UnknownEffectiveStatementImpl extends UnknownEffectiveStateme
         } else {
             QName maybeQNameArgumentInit = null;
             try {
-                maybeQNameArgumentInit = Utils.qNameFromArgument(ctx, argument());
+                maybeQNameArgumentInit = StmtContextUtils.qnameFromArgument(ctx, argument());
             } catch (IllegalArgumentException e) {
                 maybeQNameArgumentInit = getNodeType();
             }
index 1e3c359ef9a088c383a3b4857e3dd2e5a8cce5f7..ee5f71a883ed40f92397428fa007f557102eca9e 100644 (file)
@@ -19,7 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.YangDataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 /**
  * Effective statement representation of 'yang-data' extension defined in https://tools.ietf.org/html/rfc8040#section-8
@@ -37,7 +37,7 @@ public final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatem
 
         QName maybeQNameArgumentInit;
         try {
-            maybeQNameArgumentInit = Utils.qNameFromArgument(ctx, argument());
+            maybeQNameArgumentInit = StmtContextUtils.qnameFromArgument(ctx, argument());
         } catch (IllegalArgumentException e) {
             maybeQNameArgumentInit = getNodeType();
         }
index 6aefea2f734b1d7d8f426e3c0b5a815728e54a15..9f5cdcdc71fb2dec0b769b4690b54dbef790174c 100644 (file)
@@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.ActionEffectiveStatementImpl;
 
 public class ActionStatementImpl extends AbstractDeclaredStatement<QName> implements ActionStatement {
@@ -65,7 +64,7 @@ public class ActionStatementImpl extends AbstractDeclaredStatement<QName> implem
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override
index f104f22b1361bb85d51edb9a22f2e84b8f67f68a..32cb7679fd166865e227cc4df0527a9c7f342510 100644 (file)
@@ -26,8 +26,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.ChildSchemaNodes;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc7950.effective.AnyDataEffectiveStatementImpl;
 
 /**
@@ -60,7 +60,7 @@ public final class AnydataStatementImpl extends AbstractDeclaredStatement<QName>
 
         @Override
         public QName parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-            return Utils.qNameFromArgument(ctx, value);
+            return StmtContextUtils.qnameFromArgument(ctx, value);
         }
 
         @Override