BUG-4688: migrate IncludedModuleContext 64/64564/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 20 Oct 2017 09:24:10 +0000 (11:24 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 20 Oct 2017 10:00:25 +0000 (12:00 +0200)
IncludedModuleContext is a simple namespace, which does not perform
actual lookups on the keys, but rather is intercepted by
RootStatementContext.

We can safely migrate its key from ModuleIdentifier to SourceIdentifier,
peeling off yet another potentially special-cased path.

Change-Id: I56865175201a01fb381c0c049aedcf6213fc7f87
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedModuleContext.java

index fa535718d767d51b156f9a05181fa6ef7f30906e..5aa3e34ad0a0648f6cda0d6b083ea7537ff9bdd6 100644 (file)
@@ -9,14 +9,12 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
 import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.SOURCE_LINKAGE;
 import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement;
-import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf;
 
 import java.util.Collection;
 import java.util.Date;
 import java.util.Optional;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement;
@@ -82,19 +80,24 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement<String> impl
         @Override
         public void onLinkageDeclared(
                 final Mutable<String, IncludeStatement, EffectiveStatement<String, IncludeStatement>> stmt) {
-            final ModuleIdentifier includeSubmoduleIdentifier = getIncludeSubmoduleIdentifier(stmt);
+            final String submoduleName = stmt.getStatementArgument();
+            final StmtContext<Date, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
+                RevisionDateStatement.class);
 
             final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE);
             final Prerequisite<StmtContext<?, ?, ?>> requiresCtxPrerequisite = includeAction.requiresCtx(stmt,
-                    SubmoduleNamespace.class, includeSubmoduleIdentifier, SOURCE_LINKAGE);
+                    SubmoduleNamespace.class,ModuleIdentifierImpl.create(submoduleName, Optional.empty(),
+                        Optional.of(revision == null ? SimpleDateFormatUtil.DEFAULT_DATE_IMP
+                                : revision.getStatementArgument())), SOURCE_LINKAGE);
 
             includeAction.apply(new InferenceAction() {
                 @Override
                 public void apply(final InferenceContext ctx) {
                     final StmtContext<?, ?, ?> includedSubModuleContext = requiresCtxPrerequisite.resolve(ctx);
 
-                    stmt.addToNs(IncludedModuleContext.class, includeSubmoduleIdentifier,
-                            includedSubModuleContext);
+                    stmt.addToNs(IncludedModuleContext.class, revision != null
+                            ? RevisionSourceIdentifier.create(submoduleName, revision.rawStatementArgument())
+                                    : RevisionSourceIdentifier.create(submoduleName), includedSubModuleContext);
                     stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.getStatementArgument(),
                         includedSubModuleContext);
                 }
@@ -108,18 +111,6 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement<String> impl
             });
         }
 
-        private static ModuleIdentifier getIncludeSubmoduleIdentifier(
-                final StmtContext<String, IncludeStatement, ?> stmt) {
-            final String subModuleName = stmt.getStatementArgument();
-
-            Date revisionDate = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class);
-            if (revisionDate == null) {
-                revisionDate = SimpleDateFormatUtil.DEFAULT_DATE_IMP;
-            }
-
-            return ModuleIdentifierImpl.create(subModuleName, Optional.empty(), Optional.of(revisionDate));
-        }
-
         @Override
         protected SubstatementValidator getSubstatementValidator() {
             return SUBSTATEMENT_VALIDATOR;
index d02b2fbec059e5abfe3e75ff20d764187cf44334..fa4db8efbb6695055dc6f66e0798141dc400875e 100644 (file)
@@ -7,9 +7,9 @@
  */
 package org.opendaylight.yangtools.yang.parser.spi.source;
 
-import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ImportedNamespaceContext;
 
-public interface IncludedModuleContext extends ImportedNamespaceContext<ModuleIdentifier> {
+public interface IncludedModuleContext extends ImportedNamespaceContext<SourceIdentifier> {
 
 }