BUG-4688: Eliminate Module.DEFAULT_SEMANTIC_VERSION 20/64520/8
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 19 Oct 2017 11:24:06 +0000 (13:24 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 20 Oct 2017 09:52:32 +0000 (11:52 +0200)
Modules do not really have a default version. Rework the logic
in terms of Optional<SemVer>, without any magic constants.

Change-Id: I07bde806b6575fb56e7078258088025ca603e8f3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
26 files changed:
yang/yang-maven-plugin-it/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/it/YangToSourcesPluginTestIT.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/Module.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleIdentifier.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/SemVerSourceIdentifier.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/ModuleIdentifierImpl.java
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaContextProxyTest.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/util/YangModelDependencyInfo.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/DependencyResolver.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/SemVerDependencyResolver.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ImportStatementDefinition.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/effective/AbstractEffectiveModule.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/util/ASTSchemaSource.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionBorderCaseTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionComplexTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionDefaultsTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionIgnoringRevisionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionImportTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionMultipleImportTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionPositionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/OpenconfigVersionTest.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/stmt/openconfigver/yin/YinOpenconfigVersionTest.java
yang/yang-parser-impl/src/test/resources/openconfig-version/defaults/default-major-invalid/foo.yang
yang/yang-parser-impl/src/test/resources/openconfig-version/multiple/multiple-valid-defaults/foo.yang

index c27c926132f623714ef8b304762f9fab9f30f4b9..6fdb88ac18d4934f3675adcb781e57e06774333b 100644 (file)
@@ -65,7 +65,7 @@ public class YangToSourcesPluginTestIT {
             assertVerificationException(e,
                     "SchemaResolutionException{unsatisfiedImports={RevisionSourceIdentifier"
                     + " [name=private@2013-02-27]=[ModuleImportImpl"
-                    + " [name=unknownDep, revision=2013-02-27, semanticVersion=0.0.0]]}");
+                    + " [name=unknownDep, revision=2013-02-27, semanticVersion=null]]}");
             return;
         }
     }
index c0357940e7b4b13ecff05a52b2f2ace44ca7fbd9..d5e6cb784a4953afa8a522bec860eab59f702fb7 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.model.api;
 import java.net.URI;
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -66,11 +67,6 @@ import org.opendaylight.yangtools.yang.common.YangVersion;
  */
 @Immutable
 public interface Module extends DataNodeContainer, NotificationNodeContainer {
-    /**
-     * Default semantic version of Module.
-     */
-    SemVer DEFAULT_SEMANTIC_VERSION = SemVer.create(0, 0, 0);
-
     /**
      * Returns the name of the module which is specified as argument of YANG
      * {@link Module <b><font color="#FF0000">module</font></b>} keyword.
@@ -124,10 +120,7 @@ public interface Module extends DataNodeContainer, NotificationNodeContainer {
      *         (urn:opendaylight:yang:extension:semantic-version?revision
      *         =2016-02-02)semantic-version statement
      */
-    // FIXME: Should return Optional<SemVer>
-    default SemVer getSemanticVersion() {
-        return Module.DEFAULT_SEMANTIC_VERSION;
-    }
+    Optional<SemVer> getSemanticVersion();
 
     /**
      * Returns the prefix of the module.
index d79b942b432ebe0f2bdc813af46ae649ae6b8474..09bc3fc5ad6654af5e5092e362b31d6fd7e8f244 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.model.api;
 
 import java.net.URI;
 import java.util.Date;
+import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 
@@ -35,7 +36,7 @@ public interface ModuleIdentifier {
      *
      * @return URI format of the namespace of the module
      */
-    // FIXME: 2.0.0: should be a default method calling getQNameModule().getNamespace()
+    // FIXME: this should not be here
     URI getNamespace();
 
     /**
@@ -45,12 +46,12 @@ public interface ModuleIdentifier {
      *         YANG {@link Module <b><font color="#339900">revison</font></b>}
      *         keyword
      */
-    // FIXME: BUG-4688: should return Revision
-    // FIXME: BUG-4688: should be a default method calling getQNameModule().getRevision().get()
+    // FIXME: BUG-4688: should return Optional<Revision>
+    // FIXME: this should not be here
     Date getRevision();
 
     /**
-     * Returns the semantic version of yang module.
+     * Returns the semantic version of YANG module.
      *
      * <p>
      * If the semantic version is not specified, default semantic version of
@@ -61,7 +62,6 @@ public interface ModuleIdentifier {
      *         (urn:opendaylight:yang:extension:semantic-version?revision
      *         =2016-02-02)semantic-version statement
      */
-    default SemVer getSemanticVersion() {
-        return Module.DEFAULT_SEMANTIC_VERSION;
-    }
+    // FIXME: this should not be here
+    Optional<SemVer> getSemanticVersion();
 }
index 04330e12b9ecb5ea9872253a45659b8924fff710..01999ba8f673df0851c70775d6dc010cc57adcbc 100644 (file)
@@ -8,14 +8,14 @@
 package org.opendaylight.yangtools.yang.model.api;
 
 import java.util.Date;
+import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
 
 /**
  * Interface describing YANG 'import' statement.
  *
  * <p>
- * The import statement makes definitions from one module available inside
- * another module or submodule.
+ * The import statement makes definitions from one module available inside another module or submodule.
  */
 public interface ModuleImport extends DocumentedNode {
     /**
@@ -37,9 +37,7 @@ public interface ModuleImport extends DocumentedNode {
      *
      * @return Semantic version of module to import
      */
-    default SemVer getSemanticVersion() {
-        return Module.DEFAULT_SEMANTIC_VERSION;
-    }
+    Optional<SemVer> getSemanticVersion();
 
     /**
      * Returns the prefix associated with the imported module.
index 342c0ccebb85be0a3ee35f71042c335c6da9ec1c..459228c654fe2e92e217b7b8fdc39ed31f21a7cf 100644 (file)
@@ -11,7 +11,6 @@ import com.google.common.annotations.Beta;
 import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
-import org.opendaylight.yangtools.yang.model.api.Module;
 
 /**
  * YANG Schema source identifier with specified semantic version.
@@ -55,7 +54,7 @@ public final class SemVerSourceIdentifier extends SourceIdentifier {
      */
     SemVerSourceIdentifier(final String name, final Optional<String> formattedRevision, final SemVer semVer) {
         super(name, formattedRevision);
-        this.semVer = semVer == null ? Module.DEFAULT_SEMANTIC_VERSION : semVer;
+        this.semVer = semVer;
     }
 
     /**
@@ -71,15 +70,12 @@ public final class SemVerSourceIdentifier extends SourceIdentifier {
     }
 
     /**
-     * Returns semantic version of source or
-     * {@link Module#DEFAULT_SEMANTIC_VERSION} if semantic version was not
-     * supplied.
+     * Returns semantic version of source if it was specified.
      *
-     * @return revision of source or {@link Module#DEFAULT_SEMANTIC_VERSION} if
-     *         revision was not supplied.
+     * @return revision of source.
      */
-    public SemVer getSemanticVersion() {
-        return semVer;
+    public Optional<SemVer> getSemanticVersion() {
+        return Optional.ofNullable(semVer);
     }
 
     /**
index 959c5be52bc025b4723a88cc3d69e5cc348ab2a5..eecc48d2a9b3d166f2793a6a11385a11f247ec2d 100644 (file)
@@ -16,14 +16,16 @@ import java.util.Objects;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 
 /**
  * ModuleIdentifier that can be used for indexing/searching by name.
  * Name is only non-null attribute.
  * Equality check on namespace and revision is only triggered if they are non-null
+ *
+ * @deprecated This class will be removed with {@link ModuleIdentifier}
  */
+@Deprecated
 @Beta
 public final class ModuleIdentifierImpl implements ModuleIdentifier {
     private final QNameModule qnameModule;
@@ -34,12 +36,12 @@ public final class ModuleIdentifierImpl implements ModuleIdentifier {
             final SemVer semVer) {
         this.name = checkNotNull(name);
         this.qnameModule = QNameModule.create(namespace.orElse(null), revision.orElse(null));
-        this.semVer = (semVer == null ? Module.DEFAULT_SEMANTIC_VERSION : semVer);
+        this.semVer = semVer;
     }
 
     public static ModuleIdentifier create(final String name, final Optional<URI> namespace,
             final Optional<Date> revision) {
-        return create(name, namespace, revision, Module.DEFAULT_SEMANTIC_VERSION);
+        return create(name, namespace, revision, null);
     }
 
     public static ModuleIdentifier create(final String name, final Optional<URI> namespace,
@@ -53,8 +55,8 @@ public final class ModuleIdentifierImpl implements ModuleIdentifier {
     }
 
     @Override
-    public SemVer getSemanticVersion() {
-        return semVer;
+    public Optional<SemVer> getSemanticVersion() {
+        return Optional.ofNullable(semVer);
     }
 
     @Override
index af1250b968129e759633ec499187ac2ac4b563af..b88a46c6f9fd0875d501d990fdd72ea46a606f52 100644 (file)
@@ -22,6 +22,7 @@ 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 org.junit.BeforeClass;
 import org.junit.Test;
@@ -620,7 +621,7 @@ public class SchemaContextProxyTest {
                 }
 
                 @Override
-                public SemVer getSemanticVersion() {
+                public Optional<SemVer> getSemanticVersion() {
                     return module.getSemanticVersion();
                 }
 
index b9ca3e97c407187693f09a30d8c00b17aa8f9e28..50fe65767637e40350fdc867975fd77d567884e1 100644 (file)
@@ -18,11 +18,11 @@ import java.util.HashSet;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
+import javax.annotation.Nullable;
 import org.antlr.v4.runtime.ParserRuleContext;
 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
@@ -241,8 +241,7 @@ public abstract class YangModelDependencyInfo {
                 final String importedModuleName = Utils.stringFromStringContext(subStatementContext.argument(),
                         getReference(sourceName, subStatementContext));
                 final Date revisionDate = revisionDateStr == null ? null : QName.parseRevision(revisionDateStr);
-                final Optional<SemVer> importSemVer = Optional.ofNullable(findSemanticVersion(subStatementContext,
-                            sourceName));
+                final SemVer importSemVer = findSemanticVersion(subStatementContext, sourceName);
                 result.add(new ModuleImportImpl(importedModuleName, revisionDate, importSemVer));
             }
         }
@@ -349,7 +348,7 @@ public abstract class YangModelDependencyInfo {
         @Override
         public String toString() {
             return "Module [name=" + getName() + ", revision=" + getRevision()
-            + ", semanticVersion=" + getSemanticVersion().orElse(Module.DEFAULT_SEMANTIC_VERSION)
+            + ", semanticVersion=" + getSemanticVersion().orElse(null)
             + ", dependencies=" + getDependencies()
             + "]";
         }
@@ -392,28 +391,28 @@ public abstract class YangModelDependencyInfo {
         private final String name;
 
         ModuleImportImpl(final String moduleName, final Date revision) {
-            this(moduleName, revision, Optional.empty());
+            this(moduleName, revision, null);
         }
 
-        ModuleImportImpl(final String moduleName, final Date revision, final Optional<SemVer> semVer) {
+        ModuleImportImpl(final String moduleName, @Nullable final Date revision, @Nullable final SemVer semVer) {
             this.name = requireNonNull(moduleName, "Module name must not be null.");
             this.revision = revision;
-            this.semVer = semVer.orElse(Module.DEFAULT_SEMANTIC_VERSION);
+            this.semVer = semVer;
         }
 
         @Override
         public String getModuleName() {
-            return this.name;
+            return name;
         }
 
         @Override
         public Date getRevision() {
-            return this.revision;
+            return revision;
         }
 
         @Override
-        public SemVer getSemanticVersion() {
-            return this.semVer;
+        public Optional<SemVer> getSemanticVersion() {
+            return Optional.ofNullable(semVer);
         }
 
         @Override
@@ -467,7 +466,7 @@ public abstract class YangModelDependencyInfo {
         @Override
         public String toString() {
             return "ModuleImportImpl [name=" + name + ", revision="
-                    + QName.formattedRevision(revision) + ", semanticVersion=" + getSemanticVersion() + "]";
+                    + QName.formattedRevision(revision) + ", semanticVersion=" + semVer + "]";
         }
     }
 }
index 0cb5508e667dc1aa22e9b64f7102fd2230bbb21a..23ba5592268ae95a8dfbb5172adf82295ce85eb7 100644 (file)
@@ -19,6 +19,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.Set;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
@@ -171,15 +172,13 @@ abstract class DependencyResolver {
         }
 
         @Override
-        public SemVer getSemanticVersion() {
-            return null;
+        public Optional<SemVer> getSemanticVersion() {
+            return Optional.empty();
         }
 
         @Override
         public String toString() {
-            return MoreObjects.toStringHelper(this)
-                    .add("parent", parent)
-                    .toString();
+            return MoreObjects.toStringHelper(this).add("parent", parent).toString();
         }
     }
 }
index b75a0c2093637fda933d6d5a697bdb0ab96901e9..7b10d93409102536c47ba4ba10646c9759c29879 100644 (file)
@@ -36,15 +36,26 @@ final class SemVerDependencyResolver extends DependencyResolver {
         return null;
     }
 
-    private static boolean isCompatible(final SemVer moduleSemVer, final SemVer importSemVer) {
-        return moduleSemVer.getMajor() == importSemVer.getMajor() && moduleSemVer.compareTo(importSemVer) >= 0;
+    private static boolean isCompatible(final Optional<SemVer> moduleSemVer, final Optional<SemVer> importSemVer) {
+        if (!importSemVer.isPresent()) {
+            // Import does not care about the version
+            return true;
+        }
+        if (!moduleSemVer.isPresent()) {
+            // Modules which do not declare a semantic version are incompatible with imports which do
+            return false;
+        }
+
+        final SemVer modVer = moduleSemVer.get();
+        final SemVer impVer = importSemVer.get();
+        return modVer.getMajor() == impVer.getMajor() && modVer.compareTo(impVer) >= 0;
     }
 
     @Override
     protected boolean isKnown(final Collection<SourceIdentifier> haystack, final ModuleImport mi) {
         final String rev = mi.getRevision() != null ? QName.formattedRevision(mi.getRevision()) : null;
         final SemVerSourceIdentifier msi = SemVerSourceIdentifier.create(mi.getModuleName(), Optional.ofNullable(rev),
-            mi.getSemanticVersion());
+            mi.getSemanticVersion().orElse(null));
 
         // Quick lookup
         if (haystack.contains(msi)) {
index 66754445b4d9e86694b779a3583dca0df2b2aeda..9bc8fa566e50f59948ee8d07f4bbd3ae38e01abf 100644 (file)
@@ -21,7 +21,6 @@ import java.util.NavigableMap;
 import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.Module;
 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;
@@ -248,7 +247,7 @@ public class ImportStatementDefinition extends
                     if (importedModuleEntry == null) {
                         throw new InferenceException(stmt.getStatementSourceReference(),
                             "Unable to find module compatible with requested import [%s(%s)].",
-                            impIdentifier.getName(), getRequestedImportVersion(stmt));
+                            impIdentifier.getName(), getRequestedImportVersionString(stmt));
                     }
 
                     final StmtContext<?, ?, ?> importedModule = importedModuleEntry.getValue();
@@ -273,18 +272,18 @@ public class ImportStatementDefinition extends
                     if (failed.contains(imported)) {
                         throw new InferenceException(stmt.getStatementSourceReference(),
                                 "Unable to find module compatible with requested import [%s(%s)].",
-                                impIdentifier.getName(), getRequestedImportVersion(stmt));
+                                impIdentifier.getName(), getRequestedImportVersionString(stmt));
                     }
                 }
             });
         }
 
-        private static SemVer getRequestedImportVersion(final StmtContext<?, ?, ?> impStmt) {
-            SemVer requestedImportVersion = impStmt.getFromNamespace(SemanticVersionNamespace.class, impStmt);
-            if (requestedImportVersion == null) {
-                requestedImportVersion = Module.DEFAULT_SEMANTIC_VERSION;
-            }
-            return requestedImportVersion;
+        private static Optional<SemVer> getRequestedImportVersion(final StmtContext<?, ?, ?> stmt) {
+            return Optional.ofNullable(stmt.getFromNamespace(SemanticVersionNamespace.class, stmt));
+        }
+
+        private static String getRequestedImportVersionString(final StmtContext<?, ?, ?> stmt) {
+            return getRequestedImportVersion(stmt).map(SemVer::toString).orElse("<any");
         }
 
         private static Entry<SemVer, StmtContext<?, ?, ?>> findRecentCompatibleModuleEntry(final String moduleName,
@@ -295,14 +294,14 @@ public class ImportStatementDefinition extends
                 return null;
             }
 
-            final SemVer requestedImportVersion = getRequestedImportVersion(impStmt);
-            allRelevantModulesMap = allRelevantModulesMap.subMap(requestedImportVersion, true,
-                    SemVer.create(requestedImportVersion.getMajor() + 1), false);
-            if (!allRelevantModulesMap.isEmpty()) {
-                return allRelevantModulesMap.lastEntry();
+            final Optional<SemVer> optImportVer = getRequestedImportVersion(impStmt);
+            if (optImportVer.isPresent()) {
+                final SemVer importVer = optImportVer.get();
+                allRelevantModulesMap = allRelevantModulesMap.subMap(importVer, true,
+                    SemVer.create(importVer.getMajor() + 1), false);
             }
 
-            return null;
+            return allRelevantModulesMap.lastEntry();
         }
 
         private static ModuleIdentifier getImportedModuleIdentifier(
index aff0e0d6c8fbc3322ba4d19777e65c69fe04e223..935f4309414cad1ac6a98270b2380450864566dc 100644 (file)
@@ -17,7 +17,6 @@ import java.util.TreeMap;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
-import org.opendaylight.yangtools.yang.model.api.Module;
 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;
@@ -178,18 +177,23 @@ public class ModuleStatementSupport extends
         }
     }
 
+    private static int compareNullableSemVer(final SemVer ver1, final SemVer ver2) {
+        if (ver1 == null) {
+            return ver2 == null ? 0 : -1;
+        }
+
+        return ver2 == null ? 1 : ver1.compareTo(ver2);
+    }
+
     private static void addToSemVerModuleNamespace(
             final Mutable<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> stmt) {
         final String moduleName = stmt.getStatementArgument();
         NavigableMap<SemVer, StmtContext<?, ?, ?>> modulesMap = stmt.getFromNamespace(
                 SemanticVersionModuleNamespace.class, moduleName);
         if (modulesMap == null) {
-            modulesMap = new TreeMap<>();
-        }
-        SemVer moduleSemVer = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt);
-        if (moduleSemVer == null) {
-            moduleSemVer = Module.DEFAULT_SEMANTIC_VERSION;
+            modulesMap = new TreeMap<>(ModuleStatementSupport::compareNullableSemVer);
         }
+        final SemVer moduleSemVer = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt);
         modulesMap.put(moduleSemVer, stmt);
         stmt.addToNs(SemanticVersionModuleNamespace.class, moduleName, modulesMap);
     }
index 871d2878e9050ebb8af5acca1d686a893e7dd047..10c45ca49897fd3e364eb1a464822912604314e9 100644 (file)
@@ -21,6 +21,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
@@ -107,7 +108,7 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
 
         final OpenconfigVersionEffectiveStatementImpl semanticVersionStmt =
                 firstEffective(OpenconfigVersionEffectiveStatementImpl.class);
-        this.semanticVersion = semanticVersionStmt == null ? DEFAULT_SEMANTIC_VERSION : semanticVersionStmt.argument();
+        this.semanticVersion = semanticVersionStmt == null ? null : semanticVersionStmt.argument();
 
         final OrganizationEffectiveStatementImpl organizationStmt =
                 firstEffective(OrganizationEffectiveStatementImpl.class);
@@ -394,8 +395,8 @@ abstract class AbstractEffectiveModule<D extends DeclaredStatement<String>> exte
     }
 
     @Override
-    public SemVer getSemanticVersion() {
-        return semanticVersion;
+    public Optional<SemVer> getSemanticVersion() {
+        return Optional.ofNullable(semanticVersion);
     }
 
     @Override
index a76576d37f4a9d7401cb25376b8f49460e1517af..82b173621b16cc397e345382cefc56cdc249b7eb 100644 (file)
@@ -10,9 +10,9 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
 import com.google.common.base.MoreObjects;
 import java.util.Date;
 import java.util.Objects;
+import java.util.Optional;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
@@ -48,12 +48,12 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase
             final RevisionDateEffectiveStatementImpl revisionDateStmt = firstEffective(
                 RevisionDateEffectiveStatementImpl.class);
             this.revision = revisionDateStmt == null ? getImportedRevision(ctx) : revisionDateStmt.argument();
-            this.semVer = Module.DEFAULT_SEMANTIC_VERSION;
+            this.semVer = null;
         } else {
             final ModuleIdentifier importedModuleIdentifier = ctx.getFromNamespace(
                 ImpPrefixToSemVerModuleIdentifier.class, prefix);
             revision = importedModuleIdentifier.getRevision();
-            semVer = importedModuleIdentifier.getSemanticVersion();
+            semVer = importedModuleIdentifier.getSemanticVersion().orElse(null);
         }
 
         final DescriptionEffectiveStatementImpl descriptionStmt = firstEffective(
@@ -86,8 +86,8 @@ public class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase
     }
 
     @Override
-    public SemVer getSemanticVersion() {
-        return semVer;
+    public Optional<SemVer> getSemanticVersion() {
+        return Optional.ofNullable(semVer);
     }
 
     @Override
index 4ee8b48090a029fb0cd5ca97c180657ad5cb7da4..bb3b0d7b25d1d951b614346db9bcbe77e373a311 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.yangtools.yang.parser.util;
 
 import static java.util.Objects.requireNonNull;
-import static org.opendaylight.yangtools.yang.model.api.Module.DEFAULT_SEMANTIC_VERSION;
 
 import com.google.common.annotations.Beta;
 import java.util.Optional;
@@ -189,9 +188,8 @@ public final class ASTSchemaSource implements SchemaSourceRepresentation {
 
     private static SemVerSourceIdentifier getSemVerSourceId(final YangModelDependencyInfo depInfo) {
         return depInfo.getFormattedRevision() == null
-                ? SemVerSourceIdentifier.create(depInfo.getName(),
-                    depInfo.getSemanticVersion().orElse(DEFAULT_SEMANTIC_VERSION))
+                ? SemVerSourceIdentifier.create(depInfo.getName(), depInfo.getSemanticVersion().orElse(null))
                         : SemVerSourceIdentifier.create(depInfo.getName(), depInfo.getFormattedRevision(),
-                            depInfo.getSemanticVersion().orElse(DEFAULT_SEMANTIC_VERSION));
+                            depInfo.getSemanticVersion().orElse(null));
     }
 }
index 882d783d31e6d3fe587bd163fc347f87c5f5afd4..aee183e1b7efad8a2eabcf4710fa215d73b39875 100644 (file)
@@ -33,10 +33,10 @@ public class OpenconfigVersionBorderCaseTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("5.5.5"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("5.5.5"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -49,10 +49,10 @@ public class OpenconfigVersionBorderCaseTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("5.6.5"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("5.6.5"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -65,10 +65,10 @@ public class OpenconfigVersionBorderCaseTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("5.5.6"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("5.5.6"), bar.getSemanticVersion().get());
     }
 
     @Test
index e8384037f73474780691bbbdb96e3c8b9f5f56ea..0485f75f657ceee9c8a7a86f50ac54e3f3a713e8 100644 (file)
@@ -45,14 +45,14 @@ public class OpenconfigVersionComplexTest {
             URI.create("http://openconfig.net/yang/openconfig-ext")).iterator().next();
 
         // check module versions
-        assertEquals(SemVer.valueOf("1.3.95"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("1.50.2"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("1.3.95"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("1.50.2"), foo.getSemanticVersion().get());
 
         final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("1.2.6"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("1.2.6"), bar.getSemanticVersion().get());
 
         final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
-        assertEquals(SemVer.valueOf("2.26.465"), foobar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("2.26.465"), foobar.getSemanticVersion().get());
 
         // check imported components
         assertNotNull("This component should be present", SchemaContextUtil.findDataSchemaNode(context, foo,
@@ -91,14 +91,14 @@ public class OpenconfigVersionComplexTest {
             "http://openconfig.net/yang/openconfig-ext")).iterator().next();
 
         // check module versions
-        assertEquals(SemVer.valueOf("2.5.50"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("2.32.2"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("2.5.50"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("2.32.2"), foo.getSemanticVersion().get());
 
         final Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("4.9.8"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("4.9.8"), bar.getSemanticVersion().get());
 
         final Module foobar = StmtTestUtils.findImportedModule(context, bar, "foobar");
-        assertEquals(SemVer.valueOf("7.13.99"), foobar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("7.13.99"), foobar.getSemanticVersion().get());
 
         // check used augmentations
         assertNotNull("This component should be present", SchemaContextUtil.findDataSchemaNode(context, bar,
index 1e6f9759fd76be85a0d27e79c985761027299bbc..2d785ef27309a3fef044fee5c59e551c4b6099d5 100644 (file)
@@ -13,6 +13,7 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.net.URI;
+import java.util.Optional;
 import org.junit.Test;
 import org.opendaylight.yangtools.concepts.SemVer;
 import org.opendaylight.yangtools.yang.model.api.Module;
@@ -32,8 +33,8 @@ public class OpenconfigVersionDefaultsTest {
         Module foo = context.findModuleByNamespace(new URI("foo")).iterator().next();
         Module bar = context.findModuleByNamespace(new URI("bar")).iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.0"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.0.0"), bar.getSemanticVersion());
+        assertEquals(Optional.empty(), foo.getSemanticVersion());
+        assertEquals(Optional.empty(), bar.getSemanticVersion());
     }
 
     @Test
@@ -45,8 +46,8 @@ public class OpenconfigVersionDefaultsTest {
         Module foo = context.findModuleByNamespace(new URI("foo")).iterator().next();
         Module bar = context.findModuleByNamespace(new URI("bar")).iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.0"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.99.99"), bar.getSemanticVersion());
+        assertEquals(Optional.empty(), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.99.99"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -57,7 +58,7 @@ public class OpenconfigVersionDefaultsTest {
             fail("Test should fail due to invalid openconfig version");
         } catch (ReactorException e) {
             assertTrue(e.getCause().getMessage()
-                    .startsWith("Unable to find module compatible with requested import [bar(0.0.0)]."));
+                    .startsWith("Unable to find module compatible with requested import [bar(0.0.1)]."));
         }
     }
 }
index b481c7357ec2556350016e1af78d8d1d7b7211aa..bd653a9303689e6b746c688eeb70dc34b2650342 100644 (file)
@@ -31,9 +31,9 @@ public class OpenconfigVersionIgnoringRevisionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -47,8 +47,8 @@ public class OpenconfigVersionIgnoringRevisionTest {
                 .iterator().next();
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 }
index b0122887750236607c5e7e69b5345b9f8dd7c8d2..dfc073ae06b096a795291447f323e3bbfb27d061 100644 (file)
@@ -32,7 +32,7 @@ public class OpenconfigVersionImportTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("1.0.0"), semVer.getSemanticVersion());
+        assertEquals(SemVer.valueOf("1.0.0"), semVer.getSemanticVersion().get());
     }
 
     @Test
index f000e7d178bc70fe975f9903dbc137b94fe816aa..933e6cd0e54f1645bae3485bc5b3dd2db1d2203b 100644 (file)
@@ -59,10 +59,10 @@ public class OpenconfigVersionMultipleImportTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("0.9.5"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.9.5"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -75,10 +75,10 @@ public class OpenconfigVersionMultipleImportTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("5.5.6"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("5.5.6"), bar.getSemanticVersion().get());
     }
 
     private static Module findImportedModule(final SchemaContext context, final Module rootModule,
index 533f62df943b1833a1af26db9980bd48f02cc8a8..bdd2772b479fd457ec8ea9fa36bf40ad2461c603 100644 (file)
@@ -31,9 +31,9 @@ public class OpenconfigVersionPositionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -47,9 +47,9 @@ public class OpenconfigVersionPositionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -63,8 +63,8 @@ public class OpenconfigVersionPositionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 }
index f46f8cbcd3d522041e05bf4011ced512e98842fa..01234a4b213b7950cce15886f18a9ed61d44e764 100644 (file)
@@ -39,9 +39,9 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -55,9 +55,9 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -70,8 +70,8 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
     }
 
     @Test
@@ -84,10 +84,10 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -100,10 +100,10 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("0.10.4"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.10.4"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -138,10 +138,10 @@ public class OpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(new URI("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("2016.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("2016.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("2016.4.6"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("2016.4.6"), bar.getSemanticVersion().get());
 
         QName root = QName.create("foo", "2016-01-01", "foo-root");
         QName container20160404 = QName.create("foo", "2016-01-01", "con20160404");
index ea7b976b75f3573f581f8718692eb44376804a20..3d103e7cb303beefc39c554672a3a76735432baf 100644 (file)
@@ -38,9 +38,9 @@ public class YinOpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(URI.create("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
@@ -53,16 +53,17 @@ public class YinOpenconfigVersionTest {
         Module semVer = context.findModuleByNamespace(URI.create("http://openconfig.net/yang/openconfig-ext"))
                 .iterator().next();
 
-        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion());
-        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.0.1"), semVer.getSemanticVersion().get());
+        assertEquals(SemVer.valueOf("0.1.1"), foo.getSemanticVersion().get());
         Module bar = StmtTestUtils.findImportedModule(context, foo, "bar");
-        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion());
+        assertEquals(SemVer.valueOf("0.1.2"), bar.getSemanticVersion().get());
     }
 
     @Test
     public void basicImportErrTest1() throws URISyntaxException, SAXException, IOException {
         try {
-            StmtTestUtils.parseYinSources("/openconfig-version/yin-input/basic-import-invalid", StatementParserMode.SEMVER_MODE);
+            StmtTestUtils.parseYinSources("/openconfig-version/yin-input/basic-import-invalid",
+                StatementParserMode.SEMVER_MODE);
             fail("Test should fail due to invalid openconfig version");
         } catch (ReactorException e) {
             assertTrue(e.getCause().getMessage()
index 3db561357f1a38641487e9bbc5997613706a6b55..2985d68f89be2dbdd26417f67c9e2ec68949b646 100644 (file)
@@ -4,7 +4,7 @@ module foo {
     yang-version 1;
 
     import openconfig-extensions { prefix oc-ext; revision-date 2017-01-29; oc-ext:openconfig-version "0.0.1"; }
-    import bar { prefix bar; revision-date 2016-01-31; }
+    import bar { prefix bar; revision-date 2016-01-31; oc-ext:openconfig-version "0.0.1"; }
 
     revision "2016-02-01" {
         description "Initial version";
index 25ec2fb4c9ea9da2e7bf78f33d17652fb644908d..14783cc494724d38da9f62130a52c8a2d573c8a5 100644 (file)
@@ -4,7 +4,7 @@ module foo {
     yang-version 1;
 
     import openconfig-extensions { prefix oc-ext; revision-date 2017-01-29; oc-ext:openconfig-version "0.0.1"; }
-    import bar { prefix bar; }
+    import bar { prefix bar; oc-ext:openconfig-version "0.0.1"; }
 
     revision "2016-02-01" {
         description "Initial version";