Switch Import/Include/BelongsTo statements to use Unqualified 00/101000/8
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 5 May 2022 16:09:38 +0000 (18:09 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 9 May 2022 05:53:51 +0000 (07:53 +0200)
Using String is not entirely accurate, as it is missing required
validation. Make sure we force validation by switching the argument
to UnresolvedQName.Unqualified.

This will ease up integration with SourceIdentifier, which in turn is
required to make varied conformance work with explicit RFC8525
specification.

JIRA: YANGTOOLS-837
Change-Id: If320b1f64f2e1bff9a2086137af0d814bbf03f2a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
44 files changed:
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeEffectiveStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java
model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyBelongsToStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyIncludeStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ImportStatementImpl.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularBelongsToStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularIncludeStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBelongsToEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyIncludeEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBelongsToEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularIncludeEffectiveStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefBelongsToStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefImportStatement.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefIncludeStatement.java
parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/StmtNamespaceContext.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java
parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/PreLinkageModuleNamespace.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractUnqualifiedStatementSupport.java [new file with mode: 0644]
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/BelongsToPrefixToModuleName.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedSubmoduleNameToModuleCtx.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToModuleQName.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToNamespace.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNamespaceForBelongsTo.java
parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleQNameToModuleName.java
yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java

index 30ff0197c1abda456e76c5e12e354f9a7fe1efa6..bf3ea93caee7f0a7b2bb0f693645a55cc2923533 100644 (file)
@@ -28,7 +28,7 @@ public interface ModuleImport extends DocumentedNode, EffectiveStatementEquivale
      * @return Name of the module to import
      */
     default @NonNull String getModuleName() {
-        return asEffectiveStatement().argument();
+        return asEffectiveStatement().argument().getLocalName();
     }
 
     /**
index c6ef4f40f323a1bed97eda4aa0278a341ac797e3..2d8b5fca6b9977ed8df6300f46905c8889571313 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
-public interface BelongsToEffectiveStatement extends EffectiveStatement<String, BelongsToStatement> {
+public interface BelongsToEffectiveStatement extends EffectiveStatement<Unqualified, BelongsToStatement> {
     @Override
     default  StatementDefinition statementDefinition() {
         return YangStmtMapping.BELONGS_TO;
index deea2ef175b1230c00dae9c64d08bb7c25c973f4..8609634816aea4c8671509d47980b90a2c3d2405 100644 (file)
@@ -8,11 +8,12 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 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;
 
-public interface BelongsToStatement extends DeclaredStatement<String> {
+public interface BelongsToStatement extends DeclaredStatement<Unqualified> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.BELONGS_TO;
index 9e2bc8cacd7149b33cff7f5b6aab3f965408f0e4..916b43e6a4443e6314b1c7e9e962b9d3cf1eeb41 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
-public interface ImportEffectiveStatement extends EffectiveStatement<String, ImportStatement> {
+public interface ImportEffectiveStatement extends EffectiveStatement<Unqualified, ImportStatement> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.IMPORT;
index 50822ffa07f4e3ae48175ed2136ed2367601ecfc..e5f3bd5c41f610df05c9bd28bfcd5db8b53aee2f 100644 (file)
@@ -10,10 +10,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
-public interface ImportStatement extends DocumentedDeclaredStatement<String> {
+public interface ImportStatement extends DocumentedDeclaredStatement<Unqualified> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.IMPORT;
index 923450edfb7381eae55dacf115ffc4d58db9a867..bc20d1e90905c76ca8eff3abc9376e05b8a37fb4 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
-public interface IncludeEffectiveStatement extends EffectiveStatement<String, IncludeStatement> {
+public interface IncludeEffectiveStatement extends EffectiveStatement<Unqualified, IncludeStatement> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.INCLUDE;
index 43dc464c78c94ae9da45afa4036876764cebe94e..bc7913924140539bc5b349012b416c5ef9a3d37c 100644 (file)
@@ -9,10 +9,11 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import java.util.Optional;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
-public interface IncludeStatement extends DocumentedDeclaredStatement<String> {
+public interface IncludeStatement extends DocumentedDeclaredStatement<Unqualified> {
     @Override
     default StatementDefinition statementDefinition() {
         return YangStmtMapping.INCLUDE;
index a51c3320667a093580129b9ac08869ef3739fe39..d8f59039e72be280d7affaa082501ad0d06ea275 100644 (file)
@@ -47,7 +47,7 @@ public interface ModuleEffectiveStatement
      * Namespace mapping all included submodules. The namespaces is keyed by submodule name.
      */
     abstract class NameToEffectiveSubmoduleNamespace
-            extends IdentifierNamespace<String, @NonNull SubmoduleEffectiveStatement> {
+            extends IdentifierNamespace<Unqualified, @NonNull SubmoduleEffectiveStatement> {
         private NameToEffectiveSubmoduleNamespace() {
             // This class should never be subclassed
         }
index e0bed7821b364caa5738ec3d6bd379b9335364bf..59626ca810517237b818b14657a99472983534c1 100644 (file)
@@ -279,7 +279,7 @@ public final class DeclaredStatements {
             : new RegularBaseStatement(argument, substatements);
     }
 
-    public static BelongsToStatement createBelongsTo(final String argument,
+    public static BelongsToStatement createBelongsTo(final Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         return substatements.isEmpty() ? new EmptyBelongsToStatement(argument)
             : new RegularBelongsToStatement(argument, substatements);
@@ -408,15 +408,15 @@ public final class DeclaredStatements {
             : new RegularIfFeatureStatement(rawArgument, argument, substatements);
     }
 
-    public static ImportStatement createImport(final String argument,
+    public static ImportStatement createImport(final Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
         return new ImportStatementImpl(argument, substatements);
     }
 
-    public static IncludeStatement createInclude(final String rawArgument, final String argument,
+    public static IncludeStatement createInclude(final Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return substatements.isEmpty() ? new EmptyIncludeStatement(rawArgument, argument)
-            : new RegularIncludeStatement(rawArgument, argument, substatements);
+        return substatements.isEmpty() ? new EmptyIncludeStatement(argument)
+            : new RegularIncludeStatement(argument, substatements);
     }
 
     public static InputStatement createInput(final QName argument) {
index 1e3e1869b13f84f7784deb78bf9d22be46cca937..8c4657f5bfe5dad043b753010c3c88aec3e2ffd7 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument;
 
-public final class EmptyBelongsToStatement extends WithRawStringArgument implements BelongsToStatement {
-    public EmptyBelongsToStatement(final String rawArgument) {
-        super(rawArgument);
+public final class EmptyBelongsToStatement extends WithArgument<Unqualified> implements BelongsToStatement {
+    public EmptyBelongsToStatement(final Unqualified argument) {
+        super(argument.getLocalName(), argument);
     }
 }
index bcf6da476947ea30091f1c622477cb990f8a0296..a23f3a3d459ef19509473ead6f8abe763d388cda 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument;
 
-public final class EmptyIncludeStatement extends WithArgument<String> implements IncludeStatement {
-    public EmptyIncludeStatement(final String rawArgument, final String argument) {
-        super(rawArgument, argument);
+public final class EmptyIncludeStatement extends WithArgument<Unqualified> implements IncludeStatement {
+    public EmptyIncludeStatement(final Unqualified argument) {
+        super(argument.getLocalName(), argument);
     }
 }
index b8c432c63a1797407007c5bf42b4f5a4ee52e819..f898e2628b9be26053a16354a26725c6c98f9a3a 100644 (file)
@@ -8,13 +8,14 @@
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl;
 
 import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements;
 
-public final class ImportStatementImpl extends WithSubstatements implements ImportStatement {
-    public ImportStatementImpl(final String rawArgument,
+public final class ImportStatementImpl extends WithSubstatements<Unqualified> implements ImportStatement {
+    public ImportStatementImpl(final Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        super(rawArgument, substatements);
+        super(argument.getLocalName(), argument, substatements);
     }
 }
index 863df98353a268271ed916f2586920846515654b..2ada328ef56b648f6e5109437b6619d706897a9f 100644 (file)
@@ -9,13 +9,14 @@ package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl;
 
 import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
-import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements;
 
-public final class RegularBelongsToStatement extends WithSubstatements implements BelongsToStatement {
-    public RegularBelongsToStatement(final @NonNull String rawArgument,
+public final class RegularBelongsToStatement extends WithSubstatements<Unqualified> implements BelongsToStatement {
+    public RegularBelongsToStatement(final @NonNull Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        super(rawArgument, substatements);
+        super(argument.getLocalName(), argument, substatements);
     }
 }
index 19e70748455fe35c1800e9d70a81ecc510dba596..a5869200825e67a09dec119c37d1e278e88c4b66 100644 (file)
@@ -8,13 +8,14 @@
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.decl;
 
 import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithArgument.WithSubstatements;
 
-public final class RegularIncludeStatement extends WithSubstatements<String> implements IncludeStatement {
-    public RegularIncludeStatement(final String rawArgument, final String argument,
+public final class RegularIncludeStatement extends WithSubstatements<Unqualified> implements IncludeStatement {
+    public RegularIncludeStatement(final Unqualified argument,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        super(rawArgument, argument, substatements);
+        super(argument.getLocalName(), argument, substatements);
     }
 }
index aaa14acab045e13deecf8318d7d2c06b55bd48ea..3fd1f98ae5d2725612e2ec62004b00af30a62ab3 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument;
 
-public final class EmptyBelongsToEffectiveStatement extends DefaultArgument<String, BelongsToStatement>
+public final class EmptyBelongsToEffectiveStatement extends DefaultArgument<Unqualified, BelongsToStatement>
         implements BelongsToEffectiveStatement {
     public EmptyBelongsToEffectiveStatement(final BelongsToStatement declared) {
         super(declared);
index 7d974303a7ee09977b4f6f555105d5bde86e3f5f..7acef3047a1222362a08bdafb575198c0a11857e 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument;
 
-public final class EmptyIncludeEffectiveStatement extends DefaultArgument<String, IncludeStatement>
+public final class EmptyIncludeEffectiveStatement extends DefaultArgument<Unqualified, IncludeStatement>
         implements IncludeEffectiveStatement {
     public EmptyIncludeEffectiveStatement(final IncludeStatement declared) {
         super(declared);
index 2909933439fb41b0f172d2b24ad4ca530b9c743c..b593efd7934bea072783d703cb855e98b42181ca 100644 (file)
@@ -12,6 +12,7 @@ import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
@@ -20,8 +21,8 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.DocumentedNodeMixin;
 
-public final class ImportEffectiveStatementImpl extends WithSubstatements<String, ImportStatement>
-        implements ImportEffectiveStatement, ModuleImport, DocumentedNodeMixin<String, ImportStatement> {
+public final class ImportEffectiveStatementImpl extends WithSubstatements<Unqualified, ImportStatement>
+        implements ImportEffectiveStatement, ModuleImport, DocumentedNodeMixin<Unqualified, ImportStatement> {
     private final @Nullable Revision revision;
 
     public ImportEffectiveStatementImpl(final ImportStatement declared,
index 90b28adf1eca4a7eb139e28b0d3177f163d76dd4..10d15031f8c253505b99971922017668cd877eaa 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 
-public final class RegularBelongsToEffectiveStatement extends WithSubstatements<String, BelongsToStatement>
+public final class RegularBelongsToEffectiveStatement extends WithSubstatements<Unqualified, BelongsToStatement>
         implements BelongsToEffectiveStatement {
     public RegularBelongsToEffectiveStatement(final BelongsToStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index a4fee625edf3e42440bc76edd2a9dc7eb5c865d3..c4adedcf4d6f29d410aac2cad51d32ff3d450233 100644 (file)
@@ -8,12 +8,13 @@
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
 
-public final class RegularIncludeEffectiveStatement extends WithSubstatements<String, IncludeStatement>
+public final class RegularIncludeEffectiveStatement extends WithSubstatements<Unqualified, IncludeStatement>
         implements IncludeEffectiveStatement {
     public RegularIncludeEffectiveStatement(final IncludeStatement declared,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
index 524ecc6f82e68397fdc0cef6f06094359b61efd2..09f015c68b6f4619487286d0e8e9b2dc672fa030 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
 
-public final class RefBelongsToStatement extends AbstractRefStatement<String, BelongsToStatement>
+public final class RefBelongsToStatement extends AbstractRefStatement<Unqualified, BelongsToStatement>
         implements BelongsToStatement {
     public RefBelongsToStatement(final BelongsToStatement delegate, final DeclarationReference ref) {
         super(delegate, ref);
index 3992b9a9699b71b6cc500d7d53e7f08537f77781..067a7ef24b11808ffa056bdd835669ed6a4f7cf2 100644 (file)
@@ -7,11 +7,13 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
 
-public final class RefImportStatement extends AbstractRefStatement<String, ImportStatement> implements ImportStatement {
+public final class RefImportStatement extends AbstractRefStatement<Unqualified, ImportStatement>
+        implements ImportStatement {
     public RefImportStatement(final ImportStatement delegate, final DeclarationReference ref) {
         super(delegate, ref);
     }
index 76271c3ffc625ffd445f9da9ad6a90fdc6c6cead..821676d577c3db8ab712a5add58f870db7c0c1a1 100644 (file)
@@ -7,11 +7,12 @@
  */
 package org.opendaylight.yangtools.yang.model.ri.stmt.impl.ref;
 
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
 import org.opendaylight.yangtools.yang.model.spi.meta.AbstractRefStatement;
 
-public final class RefIncludeStatement extends AbstractRefStatement<String, IncludeStatement>
+public final class RefIncludeStatement extends AbstractRefStatement<Unqualified, IncludeStatement>
         implements IncludeStatement {
     public RefIncludeStatement(final IncludeStatement delegate, final DeclarationReference ref) {
         super(delegate, ref);
index 86b27106455257e2bd00796064dbb0c3bce2eba1..8a27466c2a8f7fc8e6a47654a24779dffc4bf7eb 100644 (file)
@@ -17,16 +17,14 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractUnqualifiedStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
 
 @Beta
 public final class AugmentIdentifierStatementSupport
-        extends AbstractStatementSupport<Unqualified, AugmentIdentifierStatement, AugmentIdentifierEffectiveStatement> {
+        extends AbstractUnqualifiedStatementSupport<AugmentIdentifierStatement, AugmentIdentifierEffectiveStatement> {
     private static final SubstatementValidator VALIDATOR =
         SubstatementValidator.builder(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER).build();
 
@@ -35,15 +33,6 @@ public final class AugmentIdentifierStatementSupport
             VALIDATOR);
     }
 
-    @Override
-    public Unqualified parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
-        try {
-            return Unqualified.of(value).intern();
-        } catch (IllegalArgumentException e) {
-            throw new SourceException(ctx, e, "Invalid identifier \"%s\"", value);
-        }
-    }
-
     @Override
     protected AugmentIdentifierStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
             final ImmutableList<DeclaredStatement<?>> substatements) {
index bbf8043be15cbcd5b01d390784581314ff36f656..fe27682865aadde7101165652916bcdc78195a3f 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import javax.xml.namespace.NamespaceContext;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
 import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -36,7 +37,7 @@ final class StmtNamespaceContext implements YangNamespaceContext {
     StmtNamespaceContext(final StmtContext<?, ?, ?> ctx) {
         // QNameModule -> prefix mappings
         final Map<QNameModule, String> qnameToPrefix = ctx.getAllFromNamespace(ModuleQNameToPrefix.class);
-        this.moduleToPrefix = qnameToPrefix == null ? ImmutableBiMap.of() : ImmutableBiMap.copyOf(qnameToPrefix);
+        moduleToPrefix = qnameToPrefix == null ? ImmutableBiMap.of() : ImmutableBiMap.copyOf(qnameToPrefix);
 
         // Additional mappings
         final Map<String, QNameModule> additional = new HashMap<>();
@@ -46,7 +47,7 @@ final class StmtNamespaceContext implements YangNamespaceContext {
                 if (!moduleToPrefix.containsValue(entry.getKey())) {
                     QNameModule qnameModule = ctx.getFromNamespace(ModuleCtxToModuleQName.class, entry.getValue());
                     if (qnameModule == null && ctx.producesDeclared(SubmoduleStatement.class)) {
-                        final String moduleName = ctx.getFromNamespace(BelongsToPrefixToModuleName.class,
+                        final Unqualified moduleName = ctx.getFromNamespace(BelongsToPrefixToModuleName.class,
                             entry.getKey());
                         qnameModule = ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
                     }
@@ -58,9 +59,9 @@ final class StmtNamespaceContext implements YangNamespaceContext {
             }
         }
         if (ctx.producesDeclared(SubmoduleStatement.class)) {
-            final Map<String, String> belongsTo = ctx.getAllFromNamespace(BelongsToPrefixToModuleName.class);
+            final Map<String, Unqualified> belongsTo = ctx.getAllFromNamespace(BelongsToPrefixToModuleName.class);
             if (belongsTo != null) {
-                for (Entry<String, String> entry : belongsTo.entrySet()) {
+                for (Entry<String, Unqualified> entry : belongsTo.entrySet()) {
                     final QNameModule module = ctx.getFromNamespace(ModuleNameToModuleQName.class, entry.getValue());
                     if (module != null && !additional.containsKey(entry.getKey())) {
                         additional.put(entry.getKey(), module);
@@ -69,7 +70,7 @@ final class StmtNamespaceContext implements YangNamespaceContext {
             }
         }
 
-        this.prefixToModule = ImmutableMap.copyOf(additional);
+        prefixToModule = ImmutableMap.copyOf(additional);
     }
 
     @Override
index 11e4daa2cff7d70edda96594b7d9c0464db43fd8..188ef4446a4bfce69d84ae3a09ffff5266dc80e5 100644 (file)
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
@@ -32,7 +33,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractUnqualifiedStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -50,7 +51,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.YangVersionLinkageExcep
 
 @Beta
 public final class ImportStatementSupport
-        extends AbstractStringStatementSupport<ImportStatement, ImportEffectiveStatement> {
+        extends AbstractUnqualifiedStatementSupport<ImportStatement, ImportEffectiveStatement> {
     private static final SubstatementValidator RFC6020_VALIDATOR =
         SubstatementValidator.builder(YangStmtMapping.IMPORT)
             .addMandatory(YangStmtMapping.PREFIX)
@@ -77,7 +78,7 @@ public final class ImportStatementSupport
     }
 
     @Override
-    public void onPreLinkageDeclared(final Mutable<String, ImportStatement, ImportEffectiveStatement> stmt) {
+    public void onPreLinkageDeclared(final Mutable<Unqualified, ImportStatement, ImportEffectiveStatement> stmt) {
         /*
          * Add ModuleIdentifier of a module which is required by this module.
          * Based on this information, required modules are searched from library
@@ -86,7 +87,7 @@ public final class ImportStatementSupport
         final SourceIdentifier importId = RevisionImport.getImportedSourceIdentifier(stmt);
         stmt.addRequiredSource(importId);
 
-        final String moduleName = stmt.getArgument();
+        final Unqualified moduleName = stmt.getArgument();
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE);
         final Prerequisite<StmtContext<?, ?, ?>> imported = importAction.requiresCtx(stmt,
                 PreLinkageModuleNamespace.class, moduleName, SOURCE_PRE_LINKAGE);
@@ -96,7 +97,7 @@ public final class ImportStatementSupport
             @Override
             public void apply(final InferenceContext ctx) {
                 final StmtContext<?, ?, ?> importedModuleContext = imported.resolve(ctx);
-                verify(moduleName.equals(importedModuleContext.getRawArgument()));
+                verify(moduleName.equals(importedModuleContext.getArgument()));
                 final XMLNamespace importedModuleNamespace = verifyNotNull(
                     importedModuleContext.getFromNamespace(ModuleNameToNamespace.class, moduleName));
                 final String impPrefix = SourceException.throwIfNull(
@@ -108,8 +109,8 @@ public final class ImportStatementSupport
                 if (importId.getRevision().isPresent() && root.yangVersion() == YangVersion.VERSION_1) {
                     final YangVersion importedVersion = importedModuleContext.yangVersion();
                     if (importedVersion != YangVersion.VERSION_1) {
-                        throw new YangVersionLinkageException(stmt,
-                            "Cannot import by revision version %s module %s", importedVersion, moduleName);
+                        throw new YangVersionLinkageException(stmt, "Cannot import by revision version %s module %s",
+                            importedVersion, moduleName.getLocalName());
                     }
                 }
 
@@ -119,20 +120,20 @@ public final class ImportStatementSupport
             @Override
             public void prerequisiteFailed(final Collection<? extends Prerequisite<?>> failed) {
                 InferenceException.throwIf(failed.contains(imported), stmt, "Imported module [%s] was not found.",
-                    moduleName);
+                    moduleName.getLocalName());
             }
         });
     }
 
     @Override
-    public void onLinkageDeclared(final Mutable<String, ImportStatement, ImportEffectiveStatement> stmt) {
+    public void onLinkageDeclared(final Mutable<Unqualified, ImportStatement, ImportEffectiveStatement> stmt) {
         RevisionImport.onLinkageDeclared(stmt);
     }
 
     @Override
-    protected ImportStatement createDeclared(final BoundStmtCtx<String> ctx,
+    protected ImportStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
             final ImmutableList<DeclaredStatement<?>> substatements) {
-        return DeclaredStatements.createImport(ctx.getRawArgument(), substatements);
+        return DeclaredStatements.createImport(ctx.getArgument(), substatements);
     }
 
     @Override
@@ -142,7 +143,7 @@ public final class ImportStatementSupport
     }
 
     @Override
-    protected ImportEffectiveStatement createEffective(final Current<String, ImportStatement> stmt,
+    protected ImportEffectiveStatement createEffective(final Current<Unqualified, ImportStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         InferenceException.throwIf(substatements.isEmpty(), stmt, "Unexpected empty effective import statement");
         return EffectiveStatements.createImport(stmt.declared(), substatements,
index ccc24d7175dba87fae79d507b40a624cb2f4247f..43f98daf198df690369a6bfa8b409bbcb5f8a891 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Optional;
 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.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ImportStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
@@ -42,10 +43,10 @@ final class RevisionImport {
         // Hidden on purpose
     }
 
-    static void onLinkageDeclared(final Mutable<String, ImportStatement, ImportEffectiveStatement> stmt) {
+    static void onLinkageDeclared(final Mutable<Unqualified, ImportStatement, ImportEffectiveStatement> stmt) {
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE);
         final Prerequisite<StmtContext<?, ?, ?>> imported;
-        final String moduleName = stmt.getArgument();
+        final Unqualified moduleName = stmt.getArgument();
         final Revision revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class);
         if (revision == null) {
             imported = importAction.requiresCtx(stmt, ModuleNamespace.class,
@@ -80,16 +81,17 @@ final class RevisionImport {
             @Override
             public void prerequisiteFailed(final Collection<? extends Prerequisite<?>> failed) {
                 if (failed.contains(imported)) {
-                    throw new InferenceException(stmt, "Imported module [%s] was not found.", moduleName);
+                    throw new InferenceException(stmt, "Imported module [%s] was not found.",
+                        moduleName.getLocalName());
                 }
             }
         });
     }
 
-    static SourceIdentifier getImportedSourceIdentifier(final StmtContext<String, ImportStatement, ?> stmt) {
+    static SourceIdentifier getImportedSourceIdentifier(final StmtContext<Unqualified, ImportStatement, ?> stmt) {
         final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
             RevisionDateStatement.class);
-        return revision == null ? RevisionSourceIdentifier.create(stmt.argument())
+        return revision == null ? RevisionSourceIdentifier.create(stmt.argument(), Optional.empty())
                 : RevisionSourceIdentifier.create(stmt.argument(), revision.argument());
     }
 }
index 94778ed05d7d45e4b14d50ae21679a2a7ac62b5d..0d171cd0cb34a32fe16723ccef88d6bfc89fedf3 100644 (file)
@@ -11,6 +11,8 @@ import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.f
 
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
@@ -24,7 +26,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators
 import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractUnqualifiedStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -41,7 +43,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.BelongsToPrefixToModule
 import org.opendaylight.yangtools.yang.parser.spi.source.ModuleNamespaceForBelongsTo;
 
 public final class BelongsToStatementSupport
-        extends AbstractStringStatementSupport<BelongsToStatement, BelongsToEffectiveStatement> {
+        extends AbstractUnqualifiedStatementSupport<BelongsToStatement, BelongsToEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
             SubstatementValidator.builder(YangStmtMapping.BELONGS_TO).addMandatory(YangStmtMapping.PREFIX).build();
 
@@ -50,12 +52,13 @@ public final class BelongsToStatementSupport
     }
 
     @Override
-    public void onPreLinkageDeclared(final Mutable<String, BelongsToStatement, BelongsToEffectiveStatement> ctx) {
+    public void onPreLinkageDeclared(final Mutable<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> ctx) {
         ctx.addRequiredSource(getSourceIdentifier(ctx));
     }
 
     @Override
-    public void onLinkageDeclared(final Mutable<String, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
+    public void onLinkageDeclared(
+            final Mutable<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
         ModelActionBuilder belongsToAction = belongsToCtx.newInferenceAction(ModelProcessingPhase.SOURCE_LINKAGE);
 
         final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx);
@@ -84,9 +87,9 @@ public final class BelongsToStatementSupport
     }
 
     @Override
-    protected BelongsToStatement createDeclared(final BoundStmtCtx<String> ctx,
+    protected BelongsToStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
             final ImmutableList<DeclaredStatement<?>> substatements) {
-        return DeclaredStatements.createBelongsTo(ctx.getRawArgument(), substatements);
+        return DeclaredStatements.createBelongsTo(ctx.getArgument(), substatements);
     }
 
     @Override
@@ -96,13 +99,13 @@ public final class BelongsToStatementSupport
     }
 
     @Override
-    protected BelongsToEffectiveStatement createEffective(final Current<String, BelongsToStatement> stmt,
+    protected BelongsToEffectiveStatement createEffective(final Current<Unqualified, BelongsToStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return EffectiveStatements.createBelongsTo(stmt.declared(), substatements);
     }
 
-    private static SourceIdentifier getSourceIdentifier(final StmtContext<String, BelongsToStatement,
-            BelongsToEffectiveStatement> belongsToCtx) {
-        return RevisionSourceIdentifier.create(belongsToCtx.getArgument());
+    private static SourceIdentifier getSourceIdentifier(
+            final StmtContext<Unqualified, BelongsToStatement, BelongsToEffectiveStatement> belongsToCtx) {
+        return RevisionSourceIdentifier.create(belongsToCtx.getArgument(), Optional.empty());
     }
 }
index e8b55ac7c88a68bd51ea1a658155836c33bbf011..23e48654ee60692b220d3db23a1b10ce264acfe6 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Collection;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference;
@@ -30,7 +31,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
 import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
 import org.opendaylight.yangtools.yang.parser.spi.SubmoduleNamespace;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractUnqualifiedStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.BoundStmtCtx;
 import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
 import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
@@ -48,7 +49,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.YangVersionLinkageExcep
 
 @Beta
 public final class IncludeStatementSupport
-        extends AbstractStringStatementSupport<IncludeStatement, IncludeEffectiveStatement> {
+        extends AbstractUnqualifiedStatementSupport<IncludeStatement, IncludeEffectiveStatement> {
     private static final SubstatementValidator RFC6020_VALIDATOR =
         SubstatementValidator.builder(YangStmtMapping.INCLUDE)
             .addOptional(YangStmtMapping.REVISION_DATE)
@@ -73,16 +74,16 @@ public final class IncludeStatementSupport
     }
 
     @Override
-    public void onPreLinkageDeclared(final Mutable<String, IncludeStatement, IncludeEffectiveStatement> stmt) {
+    public void onPreLinkageDeclared(final Mutable<Unqualified, IncludeStatement, IncludeEffectiveStatement> stmt) {
         final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
             RevisionDateStatement.class);
-        stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.argument())
+        stmt.addRequiredSource(revision == null ? RevisionSourceIdentifier.create(stmt.argument(), Optional.empty())
             : RevisionSourceIdentifier.create(stmt.argument(), revision.argument()));
     }
 
     @Override
-    public void onLinkageDeclared(final Mutable<String, IncludeStatement, IncludeEffectiveStatement> stmt) {
-        final String submoduleName = stmt.getArgument();
+    public void onLinkageDeclared(final Mutable<Unqualified, IncludeStatement, IncludeEffectiveStatement> stmt) {
+        final Unqualified submoduleName = stmt.getArgument();
         final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class);
 
         final ModelActionBuilder includeAction = stmt.newInferenceAction(SOURCE_LINKAGE);
@@ -107,8 +108,8 @@ public final class IncludeStatementSupport
                 }
 
                 stmt.addToNs(IncludedModuleContext.class, revision != null
-                        ? RevisionSourceIdentifier.create(submoduleName, revision.argument())
-                                : RevisionSourceIdentifier.create(submoduleName), includedSubModuleContext);
+                    ? RevisionSourceIdentifier.create(submoduleName, revision.argument())
+                        : RevisionSourceIdentifier.create(submoduleName, Optional.empty()), includedSubModuleContext);
                 stmt.addToNs(IncludedSubmoduleNameToModuleCtx.class, stmt.argument(), includedSubModuleContext);
             }
 
@@ -121,9 +122,9 @@ public final class IncludeStatementSupport
     }
 
     @Override
-    protected IncludeStatement createDeclared(final BoundStmtCtx<String> ctx,
+    protected IncludeStatement createDeclared(final BoundStmtCtx<Unqualified> ctx,
             final ImmutableList<DeclaredStatement<?>> substatements) {
-        return DeclaredStatements.createInclude(ctx.getRawArgument(), ctx.getArgument(), substatements);
+        return DeclaredStatements.createInclude(ctx.getArgument(), substatements);
     }
 
     @Override
@@ -133,7 +134,7 @@ public final class IncludeStatementSupport
     }
 
     @Override
-    protected IncludeEffectiveStatement createEffective(final Current<String, IncludeStatement> stmt,
+    protected IncludeEffectiveStatement createEffective(final Current<Unqualified, IncludeStatement> stmt,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
         return EffectiveStatements.createInclude(stmt.declared(), substatements);
     }
index 50309a2b9208836e4a5a9eb1f2754252d72c4b81..443dc353f0bb4218e8b11af75fc92c16299d3046 100644 (file)
@@ -43,7 +43,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo
 
 final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleStatement, ModuleEffectiveStatement>
         implements Module, ModuleEffectiveStatement {
-    private final ImmutableMap<String, SubmoduleEffectiveStatement> nameToSubmodule;
+    private final ImmutableMap<Unqualified, SubmoduleEffectiveStatement> nameToSubmodule;
     private final ImmutableMap<QName, ExtensionEffectiveStatement> qnameToExtension;
     private final ImmutableMap<QName, FeatureEffectiveStatement> qnameToFeature;
     private final ImmutableMap<QName, IdentityEffectiveStatement> qnameToIdentity;
@@ -72,7 +72,7 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule<ModuleS
         }
         namespaceToPrefix = ImmutableMap.copyOf(tmp);
 
-        final Map<String, StmtContext<?, ?, ?>> includedSubmodules =
+        final Map<Unqualified, StmtContext<?, ?, ?>> includedSubmodules =
                 stmt.localNamespacePortion(IncludedSubmoduleNameToModuleCtx.class);
         nameToSubmodule = includedSubmodules == null ? ImmutableMap.of()
                 : ImmutableMap.copyOf(Maps.transformValues(includedSubmodules,
index c06b2e880abc9a5c9b8d55b387f05d58f6ec82cd..90ea69b3d80d5f9c0aec0a372f0edc901b1c69a7 100644 (file)
@@ -148,7 +148,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,
@@ -184,11 +184,11 @@ public final class ModuleStatementSupport
                 possibleDuplicateModule.sourceReference());
         }
 
-        final String moduleName = stmt.getRawArgument();
+        final Unqualified moduleName = stmt.getArgument();
         final SourceIdentifier moduleIdentifier = RevisionSourceIdentifier.create(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(
@@ -269,7 +269,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();
     }
index 92c9917a907b5d977b1c8f698ec223bf09ab52aa..f6a388234b13242adec2a95a64c5eb83c7f2f987 100644 (file)
@@ -81,7 +81,7 @@ final class SubmoduleEffectiveStatementImpl
          * collect only submodule contexts here and then build them during
          * sealing of this statement.
          */
-        final Map<String, StmtContext<?, ?, ?>> includedSubmodulesMap = stmt.localNamespacePortion(
+        final Map<Unqualified, StmtContext<?, ?, ?>> includedSubmodulesMap = stmt.localNamespacePortion(
             IncludedSubmoduleNameToModuleCtx.class);
         if (includedSubmodulesMap != null) {
             final Set<StmtContext<?, SubmoduleStatement, SubmoduleEffectiveStatement>> submoduleContextsInit =
index 1a1e4abe82248fc6bb11947ece883aeb3837199f..ea05675da1132253c99bd0a4defe5d7411b8d717 100644 (file)
@@ -142,7 +142,8 @@ public final class SubmoduleStatementSupport
 
         stmt.addContext(SubmoduleNamespace.class, submoduleIdentifier, stmt);
 
-        final String belongsToModuleName = firstAttributeOf(stmt.declaredSubstatements(), BelongsToStatement.class);
+        final Unqualified belongsToModuleName = firstAttributeOf(stmt.declaredSubstatements(),
+            BelongsToStatement.class);
         final StmtContext<?, ?, ?> prefixSubStmtCtx = SourceException.throwIfNull(
             findFirstDeclaredSubstatement(stmt, 0, BelongsToStatement.class, PrefixStatement.class), stmt,
             "Prefix of belongsTo statement is missing in submodule [%s]", stmt.rawArgument());
index 9af98c4aeb1da356aecdb5ddca49ffc37068dd73..0c6e99304b4aab8b933e2091d77e06504464252c 100644 (file)
@@ -20,6 +20,7 @@ import java.util.function.Predicate;
 import org.junit.Test;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
@@ -238,7 +239,7 @@ public class DeclaredStatementsTest {
 
         assertEquals(1, moduleStatement.getIncludes().size());
         final IncludeStatement includeStatement = moduleStatement.getIncludes().iterator().next();
-        assertEquals("child-module-declared-test", includeStatement.argument());
+        assertEquals(Unqualified.of("child-module-declared-test"), includeStatement.argument());
 
         final Collection<? extends Submodule> submodules = testModule.getSubmodules();
         assertNotNull(submodules);
@@ -277,7 +278,7 @@ public class DeclaredStatementsTest {
 
         assertEquals(1, moduleStatement.getImports().size());
         final ImportStatement importStatement = moduleStatement.getImports().iterator().next();
-        assertEquals("imported-module-declared-test", importStatement.argument());
+        assertEquals(Unqualified.of("imported-module-declared-test"), importStatement.argument());
         assertEquals("imdt", importStatement.getPrefix().argument());
         assertEquals(revision, importStatement.getRevisionDate().argument());
 
index 3eb1278a8ad0560caf69aeb3e6cfb01eaa00ea1b..6203991f69b1b20ec971f97a65af597452d6a45b 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.spi;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
@@ -19,8 +20,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
  * used to resolve inter-module references before actual linkage occurs.
  */
 public interface PreLinkageModuleNamespace
-        extends StatementNamespace<String, ModuleStatement, ModuleEffectiveStatement> {
-    NamespaceBehaviour<String, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
+        extends StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement> {
+    NamespaceBehaviour<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
             @NonNull PreLinkageModuleNamespace> BEHAVIOUR = NamespaceBehaviour.global(PreLinkageModuleNamespace.class);
 
 }
diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractUnqualifiedStatementSupport.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractUnqualifiedStatementSupport.java
new file mode 100644 (file)
index 0000000..dbe982b
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.parser.spi.meta;
+
+import com.google.common.annotations.Beta;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
+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.StatementDefinition;
+import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+
+/**
+ * Specialization of {@link AbstractStatementSupport} for Unqualified statement arguments. Note this (mostly) implies
+ * context-independence.
+ *
+ * @param <D> Declared Statement representation
+ * @param <E> Effective Statement representation
+ */
+@Beta
+public abstract class AbstractUnqualifiedStatementSupport<D extends DeclaredStatement<Unqualified>,
+        E extends EffectiveStatement<Unqualified, D>> extends AbstractStatementSupport<Unqualified, D, E> {
+    protected AbstractUnqualifiedStatementSupport(final StatementDefinition publicDefinition,
+            final StatementPolicy<Unqualified, D> policy, final YangParserConfiguration config,
+            final @Nullable SubstatementValidator validator) {
+        super(publicDefinition, policy, config, validator);
+    }
+
+    @Override
+    public final Unqualified parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+        try {
+            return Unqualified.of(value).intern();
+        } catch (IllegalArgumentException e) {
+            throw new SourceException(ctx, e, "Invalid argument value \"%s\"", value);
+        }
+    }
+}
index a3ea67526b19312c47e01ffe975ac9889ded8ece..307fe3d62f00066b44b9283db813fc35fd4d29e3 100644 (file)
@@ -14,6 +14,7 @@ import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 
 /**
@@ -26,15 +27,15 @@ import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 @Beta
 public abstract class NamespaceKeyCriterion<K> {
     private static final class LatestRevisionModule extends NamespaceKeyCriterion<SourceIdentifier> {
-        private final String moduleName;
+        private final Unqualified moduleName;
 
-        LatestRevisionModule(final String moduleName) {
+        LatestRevisionModule(final Unqualified moduleName) {
             this.moduleName = requireNonNull(moduleName);
         }
 
         @Override
         public boolean match(final SourceIdentifier key) {
-            return moduleName.equals(key.getName());
+            return moduleName.getLocalName().equals(key.getName());
         }
 
         @Override
@@ -44,7 +45,7 @@ public abstract class NamespaceKeyCriterion<K> {
 
         @Override
         protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
-            return toStringHelper.add("moduleName", moduleName);
+            return toStringHelper.add("moduleName", moduleName.getLocalName());
         }
     }
 
@@ -54,7 +55,7 @@ public abstract class NamespaceKeyCriterion<K> {
      * @param moduleName Module name
      * @return A criterion object.
      */
-    public static NamespaceKeyCriterion<SourceIdentifier> latestRevisionModule(final String moduleName) {
+    public static NamespaceKeyCriterion<SourceIdentifier> latestRevisionModule(final Unqualified moduleName) {
         return new LatestRevisionModule(moduleName);
     }
 
index b2b47ad8db369bee2e300232724ae50769a1d66c..57f094e85ed693be69c87354dd951762d40e5582 100644 (file)
@@ -557,8 +557,7 @@ public final class StmtContextUtils {
         if (rootCtx.producesDeclared(ModuleStatement.class)) {
             qnameModule = rootCtx.getFromNamespace(ModuleCtxToModuleQName.class, rootCtx);
         } else if (rootCtx.producesDeclared(SubmoduleStatement.class)) {
-            final String belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(),
-                BelongsToStatement.class);
+            final var belongsToModuleName = firstAttributeOf(rootCtx.declaredSubstatements(), BelongsToStatement.class);
             qnameModule = rootCtx.getFromNamespace(ModuleNameToModuleQName.class, belongsToModuleName);
         } else {
             qnameModule = null;
@@ -577,7 +576,7 @@ public final class StmtContextUtils {
         }
 
         if (root.producesDeclared(SubmoduleStatement.class)) {
-            final String moduleName = root.getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
+            final var moduleName = root.getFromNamespace(BelongsToPrefixToModuleName.class, prefix);
             return ctx.getFromNamespace(ModuleNameToModuleQName.class, moduleName);
         }
 
index 6b04899f195197a77869df973ce5d598a0e17e70..d7746bdb4a990fa2f5a9c602d224c330e0234fa9 100644 (file)
@@ -8,13 +8,14 @@
 package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 
 /**
  * Source-specific mapping of prefixes to namespaces.
  */
-public interface BelongsToPrefixToModuleName extends ParserNamespace<String, String> {
-    NamespaceBehaviour<String, String, @NonNull BelongsToPrefixToModuleName> BEHAVIOUR =
+public interface BelongsToPrefixToModuleName extends ParserNamespace<String, Unqualified> {
+    NamespaceBehaviour<String, Unqualified, @NonNull BelongsToPrefixToModuleName> BEHAVIOUR =
             NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleName.class);
 }
index 772ec6504e04d209312ceaee9712d010e595a813..91b256dc9ddd87046891c575414e3f06c4dddf7c 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -15,7 +16,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 /**
  * Source-specific mapping of prefixes to namespaces.
  */
-public interface IncludedSubmoduleNameToModuleCtx extends ParserNamespace<String, StmtContext<?, ?, ?>> {
-    NamespaceBehaviour<String, StmtContext<?, ?, ?>, @NonNull IncludedSubmoduleNameToModuleCtx> BEHAVIOUR =
+public interface IncludedSubmoduleNameToModuleCtx extends ParserNamespace<Unqualified, StmtContext<?, ?, ?>> {
+    NamespaceBehaviour<Unqualified, StmtContext<?, ?, ?>, @NonNull IncludedSubmoduleNameToModuleCtx> BEHAVIOUR =
             NamespaceBehaviour.sourceLocal(IncludedSubmoduleNameToModuleCtx.class);
 }
index 5387b34437d54fa39e7dc39785f22a0ab311aa17..7da584425bb7da4623c5904c4ec963e4e9408658 100644 (file)
@@ -9,13 +9,14 @@ package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 
 /**
  * Source-specific mapping of prefixes to namespaces.
  */
-public interface ModuleNameToModuleQName extends ParserNamespace<String, QNameModule> {
-    NamespaceBehaviour<String, QNameModule, @NonNull ModuleNameToModuleQName> BEHAVIOUR =
+public interface ModuleNameToModuleQName extends ParserNamespace<Unqualified, QNameModule> {
+    NamespaceBehaviour<Unqualified, QNameModule, @NonNull ModuleNameToModuleQName> BEHAVIOUR =
             NamespaceBehaviour.sourceLocal(ModuleNameToModuleQName.class);
 }
index 4e07bca6f7b062e6e62a88702831913672aebf66..8da9a9f7f32d0750be417b5c3e77919ee7dae8f0 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
@@ -15,7 +16,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 /**
  * Pre-linkage global mapping of module names to namespaces.
  */
-public interface ModuleNameToNamespace extends ParserNamespace<String, XMLNamespace> {
-    NamespaceBehaviour<String, XMLNamespace, @NonNull ModuleNameToNamespace> BEHAVIOUR =
+public interface ModuleNameToNamespace extends ParserNamespace<Unqualified, XMLNamespace> {
+    NamespaceBehaviour<Unqualified, XMLNamespace, @NonNull ModuleNameToNamespace> BEHAVIOUR =
             NamespaceBehaviour.global(ModuleNameToNamespace.class);
 }
index 9a520dde98f4420bc715c46c619279db5dc498fe..eb9a346e8ce5d4ced518497b064ce26b3fa9a4c5 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
@@ -19,7 +20,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
  * into Yang model storage but keyed by plain name.
  */
 public interface ModuleNamespaceForBelongsTo
-        extends StatementNamespace<String, ModuleStatement, ModuleEffectiveStatement> {
-    NamespaceBehaviour<String, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
+        extends StatementNamespace<Unqualified, ModuleStatement, ModuleEffectiveStatement> {
+    NamespaceBehaviour<Unqualified, StmtContext<?, ModuleStatement, ModuleEffectiveStatement>,
         @NonNull ModuleNamespaceForBelongsTo> BEHAVIOUR = NamespaceBehaviour.global(ModuleNamespaceForBelongsTo.class);
 }
index bf21e26c2284bc75c7ebc949c808c6aff1da2f5a..e02716ddf42dad1679de7370852ce09e46044308 100644 (file)
@@ -9,13 +9,14 @@ package org.opendaylight.yangtools.yang.parser.spi.source;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ParserNamespace;
 
 /**
  * Source-specific mapping of prefixes to namespaces.
  */
-public interface ModuleQNameToModuleName extends ParserNamespace<QNameModule, String> {
-    NamespaceBehaviour<QNameModule, String, @NonNull ModuleQNameToModuleName> BEHAVIOUR =
+public interface ModuleQNameToModuleName extends ParserNamespace<QNameModule, Unqualified> {
+    NamespaceBehaviour<QNameModule, Unqualified, @NonNull ModuleQNameToModuleName> BEHAVIOUR =
             NamespaceBehaviour.global(ModuleQNameToModuleName.class);
 }
index cb1e8de90179a7b78d15c008866bf9655104db78..02869cbc4ee2f36e0f0a7e5dfc423180fcd0f1f1 100644 (file)
@@ -13,6 +13,7 @@ import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.UnresolvedQName.Unqualified;
 
 /**
  * YANG Schema revision source identifier.
@@ -81,6 +82,11 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
         return new RevisionSourceIdentifier(moduleName, revision);
     }
 
+    public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName,
+            final Optional<Revision> revision) {
+        return create(moduleName.getLocalName(), revision);
+    }
+
     /**
      * Creates new YANG Schema revision source identifier.
      *
@@ -92,6 +98,11 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
         return new RevisionSourceIdentifier(moduleName, revision);
     }
 
+    public static @NonNull RevisionSourceIdentifier create(final Unqualified moduleName,
+            final @Nullable Revision revision) {
+        return create(moduleName.getLocalName(), revision);
+    }
+
     /**
      * Creates new YANG Schema revision source identifier for sources without
      * a revision.
@@ -117,10 +128,9 @@ public final class RevisionSourceIdentifier extends SourceIdentifier {
         if (this == obj) {
             return true;
         }
-        if (!(obj instanceof RevisionSourceIdentifier)) {
+        if (!(obj instanceof RevisionSourceIdentifier other)) {
             return false;
         }
-        final RevisionSourceIdentifier other = (RevisionSourceIdentifier) obj;
         return Objects.equals(getName(), other.getName()) && Objects.equals(getRevision(), other.getRevision());
     }