Remove RevisionSourceIdentifier
[yangtools.git] / parser / yang-parser-rfc7950 / src / main / java / org / opendaylight / yangtools / yang / parser / rfc7950 / stmt / module / ModuleStatementSupport.java
index 4522b063c9e1e614092d3e92044fc5d8ef8d4f50..eecd41af6409c4c33ba8130dd2ce7eb66a697bfa 100644 (file)
@@ -17,13 +17,10 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements;
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.common.UnresolvedQName;
 import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
@@ -37,22 +34,18 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 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.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.ri.stmt.DeclaredStatementDecorators;
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
-import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule;
 import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionModuleNamespace;
-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;
@@ -99,7 +92,6 @@ public final class ModuleStatementSupport
         .addAny(YangStmtMapping.TYPEDEF)
         .addAny(YangStmtMapping.USES)
         .addOptional(YangStmtMapping.YANG_VERSION)
-        .addOptional(OpenConfigStatements.OPENCONFIG_VERSION)
         .build();
     private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.MODULE)
         .addAny(YangStmtMapping.ANYDATA)
@@ -129,14 +121,10 @@ public final class ModuleStatementSupport
         .addAny(YangStmtMapping.TYPEDEF)
         .addAny(YangStmtMapping.USES)
         .addMandatory(YangStmtMapping.YANG_VERSION)
-        .addOptional(OpenConfigStatements.OPENCONFIG_VERSION)
         .build();
 
-    private final boolean semanticVersioning;
-
     private ModuleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
         super(YangStmtMapping.MODULE, StatementPolicy.reject(), config, validator);
-        semanticVersioning = config.importResolutionMode() == ImportResolutionMode.OPENCONFIG_SEMVER;
     }
 
     public static @NonNull ModuleStatementSupport rfc6020Instance(final YangParserConfiguration config) {
@@ -150,7 +138,7 @@ public final class ModuleStatementSupport
     @Override
     public Unqualified parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
         try {
-            return UnresolvedQName.unqualified(value);
+            return Unqualified.of(value);
         } catch (IllegalArgumentException e) {
             throw new SourceException(e.getMessage(), ctx, e);
         }
@@ -158,7 +146,7 @@ public final class ModuleStatementSupport
 
     @Override
     public void onPreLinkageDeclared(final Mutable<Unqualified, ModuleStatement, ModuleEffectiveStatement> stmt) {
-        final String moduleName = stmt.getRawArgument();
+        final Unqualified moduleName = stmt.getArgument();
 
         final XMLNamespace moduleNs = SourceException.throwIfNull(
             firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt,
@@ -172,11 +160,11 @@ public final class ModuleStatementSupport
 
         stmt.addContext(PreLinkageModuleNamespace.class, moduleName, stmt);
 
-        final Optional<Revision> revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements());
-        final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern();
+        final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null);
+        final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern();
 
         stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule);
-        stmt.setRootIdentifier(RevisionSourceIdentifier.create(stmt.getArgument().getLocalName(), revisionDate));
+        stmt.setRootIdentifier(new SourceIdentifier(stmt.getArgument(), revisionDate));
     }
 
     @Override
@@ -185,8 +173,8 @@ public final class ModuleStatementSupport
             firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt,
             "Namespace of the module [%s] is missing", stmt.argument());
 
-        final Optional<Revision> revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements());
-        final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate.orElse(null)).intern();
+        final Revision revisionDate = StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()).orElse(null);
+        final QNameModule qNameModule = QNameModule.create(moduleNs, revisionDate).intern();
         final StmtContext<?, ModuleStatement, ModuleEffectiveStatement> possibleDuplicateModule =
                 stmt.getFromNamespace(NamespaceToModule.class, qNameModule);
         if (possibleDuplicateModule != null && possibleDuplicateModule != stmt) {
@@ -194,28 +182,24 @@ public final class ModuleStatementSupport
                 possibleDuplicateModule.sourceReference());
         }
 
-        final String moduleName = stmt.getRawArgument();
-        final SourceIdentifier moduleIdentifier = RevisionSourceIdentifier.create(moduleName, revisionDate);
+        final Unqualified moduleName = stmt.getArgument();
+        final SourceIdentifier moduleIdentifier = new SourceIdentifier(moduleName, revisionDate);
 
         stmt.addContext(ModuleNamespace.class, moduleIdentifier, stmt);
-        stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleIdentifier.getName(), stmt);
+        stmt.addContext(ModuleNamespaceForBelongsTo.class, moduleName, stmt);
         stmt.addContext(NamespaceToModule.class, qNameModule, stmt);
 
         final String modulePrefix = SourceException.throwIfNull(
             firstAttributeOf(stmt.declaredSubstatements(), PrefixStatement.class), stmt,
             "Prefix of the module [%s] is missing", stmt.argument());
 
-        stmt.addToNs(QNameModuleNamespace.class, Empty.getInstance(), qNameModule);
+        stmt.addToNs(QNameModuleNamespace.class, Empty.value(), qNameModule);
         stmt.addToNs(PrefixToModule.class, modulePrefix, qNameModule);
         stmt.addToNs(ModuleNameToModuleQName.class, moduleName, qNameModule);
         stmt.addToNs(ModuleCtxToModuleQName.class, stmt, qNameModule);
         stmt.addToNs(ModuleCtxToSourceIdentifier.class, stmt, moduleIdentifier);
         stmt.addToNs(ModuleQNameToModuleName.class, qNameModule, moduleName);
         stmt.addToNs(ImportPrefixToModuleCtx.class, modulePrefix, stmt);
-
-        if (semanticVersioning) {
-            addToSemVerModuleNamespace(stmt, moduleIdentifier);
-        }
     }
 
     @Override
@@ -246,8 +230,8 @@ public final class ModuleStatementSupport
     }
 
     @Override
-    protected ModuleStatement createDeclared(final StmtContext<Unqualified, ModuleStatement, ?> ctx,
-            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+    protected ModuleStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
+            final ImmutableList<DeclaredStatement<?>> substatements) {
         if (substatements.isEmpty()) {
             throw noNamespace(ctx);
         }
@@ -274,8 +258,7 @@ public final class ModuleStatementSupport
             submodules.add((Submodule) submodule);
         }
 
-        final QNameModule qnameModule = verifyNotNull(stmt.namespaceItem(QNameModuleNamespace.class,
-            Empty.getInstance()));
+        final QNameModule qnameModule = verifyNotNull(stmt.namespaceItem(QNameModuleNamespace.class, Empty.value()));
         try {
             return new ModuleEffectiveStatementImpl(stmt, substatements, submodules, qnameModule);
         } catch (SubstatementIndexingException e) {
@@ -284,7 +267,7 @@ public final class ModuleStatementSupport
     }
 
     private static Collection<StmtContext<?, ?, ?>> submoduleContexts(final Current<?, ?> stmt) {
-        final Map<String, StmtContext<?, ?, ?>> submodules = stmt.localNamespacePortion(
+        final Map<Unqualified, StmtContext<?, ?, ?>> submodules = stmt.localNamespacePortion(
             IncludedSubmoduleNameToModuleCtx.class);
         return submodules == null ? List.of() : submodules.values();
     }
@@ -292,12 +275,4 @@ public final class ModuleStatementSupport
     private static SourceException noNamespace(final @NonNull CommonStmtCtx stmt) {
         return new SourceException("No namespace declared in module", stmt);
     }
-
-    private static void addToSemVerModuleNamespace(
-            final Mutable<Unqualified, ModuleStatement, ModuleEffectiveStatement> stmt,
-            final SourceIdentifier moduleIdentifier) {
-        final SemVerSourceIdentifier id = SemVerSourceIdentifier.create(stmt.getRawArgument(),
-            stmt.getFromNamespace(SemanticVersionNamespace.class, stmt));
-        stmt.addToNs(SemanticVersionModuleNamespace.class, id, stmt);
-    }
 }