From: Robert Varga Date: Thu, 19 Oct 2017 17:13:03 +0000 (+0200) Subject: BUG-4688: Rename StmtContext.Mutable.addRequiredModule() X-Git-Tag: v2.0.0~175 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F39%2F64539%2F5;p=yangtools.git BUG-4688: Rename StmtContext.Mutable.addRequiredModule() This method is a misnomer, as we really are requiring a source to be resolved. Rename the method to addRequiredSource() and make it work with SourceIdentifier. Also add a note that the method should be eliminate in favor of using a namespace inside the reactor. Change-Id: I39ce96da090bdf07af545e7dbd40363e5c048267 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index 7feeeaff5c..69bf71821e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -32,7 +32,6 @@ import javax.annotation.Nonnull; import org.opendaylight.yangtools.util.RecursiveObjectLeaker; 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.meta.DeclaredStatement; @@ -439,21 +438,18 @@ class BuildGlobalContext extends NamespaceStorageSupport implements Registry { private void collectRequiredSourcesFromLib( final TreeBasedTable libSourcesTable, final Set requiredLibs, final SourceSpecificContext source) { - final Collection requiredModules = source.getRequiredModules(); - for (final ModuleIdentifier requiredModule : requiredModules) { - final SourceSpecificContext libSource = getRequiredLibSource(requiredModule, libSourcesTable); + for (final SourceIdentifier requiredSource : source.getRequiredSources()) { + final SourceSpecificContext libSource = getRequiredLibSource(requiredSource, libSourcesTable); if (libSource != null && requiredLibs.add(libSource)) { collectRequiredSourcesFromLib(libSourcesTable, requiredLibs, libSource); } } } - private static SourceSpecificContext getRequiredLibSource(final ModuleIdentifier requiredModule, + private static SourceSpecificContext getRequiredLibSource(final SourceIdentifier requiredSource, final TreeBasedTable libSourcesTable) { - return requiredModule.getRevision() == SimpleDateFormatUtil.DEFAULT_DATE_IMP - || requiredModule.getRevision() == SimpleDateFormatUtil.DEFAULT_BELONGS_TO_DATE ? getLatestRevision( - libSourcesTable.row(requiredModule.getName())) : libSourcesTable.get(requiredModule.getName(), - requiredModule.getRevision()); + return requiredSource.getRevision() == null ? getLatestRevision(libSourcesTable.row(requiredSource.getName())) + : libSourcesTable.get(requiredSource.getName(), QName.parseRevision(requiredSource.getRevision())); } private static SourceSpecificContext getLatestRevision(final SortedMap sourceMap) { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index 8f6a5825bc..2dff0ce79f 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode; @@ -48,7 +49,7 @@ public class RootStatementContext, E extends E private final A argument; private YangVersion version; - private Collection requiredModules = ImmutableSet.of(); + private Collection requiredSources = ImmutableSet.of(); private ModuleIdentifier identifier; /** @@ -220,17 +221,22 @@ public class RootStatementContext, E extends E } @Override - public void addRequiredModule(final ModuleIdentifier dependency) { + public void addRequiredSource(final SourceIdentifier dependency) { checkState(sourceContext.getInProgressPhase() == ModelProcessingPhase.SOURCE_PRE_LINKAGE, "Add required module is allowed only in ModelProcessingPhase.SOURCE_PRE_LINKAGE phase"); - if (requiredModules.isEmpty()) { - requiredModules = new HashSet<>(); + if (requiredSources.isEmpty()) { + requiredSources = new HashSet<>(); } - requiredModules.add(dependency); + requiredSources.add(dependency); } - Collection getRequiredModules() { - return ImmutableSet.copyOf(requiredModules); + /** + * Return the set of required sources. + * + * @return Required sources. + */ + Collection getRequiredSources() { + return ImmutableSet.copyOf(requiredSources); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java index 48a06d0a7e..ee0cbd5db1 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SourceSpecificContext.java @@ -31,6 +31,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; @@ -444,8 +445,8 @@ public class SourceSpecificContext implements NamespaceStorageNode, NamespaceBeh currentContext.addMutableStmtToSeal(mutableStatement); } - Collection getRequiredModules() { - return root.getRequiredModules(); + Collection getRequiredSources() { + return root.getRequiredSources(); } ModuleIdentifier getRootIdentifier() { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java index a0b9710e7e..45f7e2eaa0 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java @@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; 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.MutableStatement; @@ -236,8 +237,8 @@ final class SubstatementContext, E extends Eff } @Override - public void addRequiredModule(final ModuleIdentifier dependency) { - getRoot().addRequiredModule(dependency); + public void addRequiredSource(final SourceIdentifier dependency) { + getRoot().addRequiredSource(dependency); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java index 1c37e2a80a..3cdfbba48d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BelongsToStatementImpl.java @@ -16,6 +16,7 @@ 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.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -71,7 +72,7 @@ public class BelongsToStatementImpl extends AbstractDeclaredStatement @Override public void onPreLinkageDeclared(final StmtContext.Mutable> belongsToCtx) { - belongsToCtx.addRequiredModule(getModuleIdentifier(belongsToCtx)); + belongsToCtx.addRequiredSource(RevisionSourceIdentifier.create(belongsToCtx.getStatementArgument())); } @Override diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java index e6d873f219..9d74b41c76 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.java @@ -9,6 +9,7 @@ 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.ModelProcessingPhase.SOURCE_PRE_LINKAGE; +import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.findFirstDeclaredSubstatement; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; import com.google.common.base.Verify; @@ -29,7 +30,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace; import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; @@ -90,7 +93,7 @@ public class ImportStatementDefinition extends * Based on this information, required modules are searched from library * sources. */ - stmt.addRequiredModule(RevisionImport.getImportedModuleIdentifier(stmt)); + stmt.addRequiredSource(RevisionImport.getImportedSourceIdentifier(stmt)); final String moduleName = stmt.getStatementArgument(); final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE); @@ -215,8 +218,7 @@ public class ImportStatementDefinition extends return recentModuleEntry; } - private static ModuleIdentifier getImportedModuleIdentifier( - final StmtContext stmt) { + static ModuleIdentifier getImportedModuleIdentifier(final StmtContext stmt) { Date revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class); if (revision == null) { revision = SimpleDateFormatUtil.DEFAULT_DATE_IMP; @@ -224,6 +226,12 @@ public class ImportStatementDefinition extends return ModuleIdentifierImpl.create(stmt.getStatementArgument(), Optional.empty(), Optional.of(revision)); } + + static SourceIdentifier getImportedSourceIdentifier(final StmtContext stmt) { + final StmtContext revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class); + return revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) + : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.rawStatementArgument()); + } } private static class SemanticVersionImport { diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java index f698d23590..5167eaa7de 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/IncludeStatementImpl.java @@ -8,6 +8,7 @@ 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; @@ -22,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.util.ModuleIdentifierImpl; import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; @@ -72,7 +74,9 @@ public class IncludeStatementImpl extends AbstractDeclaredStatement impl @Override public void onPreLinkageDeclared( final Mutable> stmt) { - stmt.addRequiredModule(getIncludeSubmoduleIdentifier(stmt)); + final StmtContext revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class); + stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.getStatementArgument()) + : RevisionSourceIdentifier.create(stmt.getStatementArgument(), revision.rawStatementArgument())); } @Override diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index 0d3dba150b..9ef9b6ada2 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; +import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; public interface StmtContext, E extends EffectiveStatement> { @@ -227,14 +228,18 @@ public interface StmtContext, E extends Effect void addMutableStmtToSeal(MutableStatement mutableStatement); /** - * Add required module. Based on these dependencies are collected - * required sources from library sources. + * Add required module. Based on these dependencies are collected required sources from library sources. * * @param dependency - * ModuleIdentifier of module required by current root + * SourceIdentifier of module required by current root * context */ - void addRequiredModule(ModuleIdentifier dependency); + /* + * FIXME: this method is used solely during SOURCE_PRE_LINKAGE reactor phase and does not have a corresponding + * getter -- which makes it rather strange. At some point this method needs to be deprecated and its + * users migrated to use proper global namespace. + */ + void addRequiredSource(SourceIdentifier dependency); void addAsEffectOfStatement(StmtContext ctx);