From f7a392df39d0cb0844f992321ed1c78fc7ef85f7 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 5 May 2022 18:09:38 +0200 Subject: [PATCH] Switch Import/Include/BelongsTo statements to use Unqualified 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 --- .../yang/model/api/ModuleImport.java | 2 +- .../api/stmt/BelongsToEffectiveStatement.java | 3 +- .../model/api/stmt/BelongsToStatement.java | 3 +- .../api/stmt/ImportEffectiveStatement.java | 3 +- .../yang/model/api/stmt/ImportStatement.java | 3 +- .../api/stmt/IncludeEffectiveStatement.java | 3 +- .../yang/model/api/stmt/IncludeStatement.java | 3 +- .../api/stmt/ModuleEffectiveStatement.java | 2 +- .../model/ri/stmt/DeclaredStatements.java | 10 ++--- .../impl/decl/EmptyBelongsToStatement.java | 9 ++-- .../stmt/impl/decl/EmptyIncludeStatement.java | 7 +-- .../stmt/impl/decl/ImportStatementImpl.java | 9 ++-- .../impl/decl/RegularBelongsToStatement.java | 9 ++-- .../impl/decl/RegularIncludeStatement.java | 7 +-- .../eff/EmptyBelongsToEffectiveStatement.java | 3 +- .../eff/EmptyIncludeEffectiveStatement.java | 3 +- .../eff/ImportEffectiveStatementImpl.java | 5 ++- .../RegularBelongsToEffectiveStatement.java | 3 +- .../eff/RegularIncludeEffectiveStatement.java | 3 +- .../stmt/impl/ref/RefBelongsToStatement.java | 3 +- .../ri/stmt/impl/ref/RefImportStatement.java | 4 +- .../ri/stmt/impl/ref/RefIncludeStatement.java | 3 +- .../AugmentIdentifierStatementSupport.java | 15 +------ .../namespace/StmtNamespaceContext.java | 11 ++--- .../stmt/import_/ImportStatementSupport.java | 25 +++++------ .../rfc7950/stmt/import_/RevisionImport.java | 12 +++--- .../stmt/meta/BelongsToStatementSupport.java | 23 +++++----- .../stmt/meta/IncludeStatementSupport.java | 23 +++++----- .../module/ModuleEffectiveStatementImpl.java | 4 +- .../stmt/module/ModuleStatementSupport.java | 8 ++-- .../SubmoduleEffectiveStatementImpl.java | 2 +- .../submodule/SubmoduleStatementSupport.java | 3 +- .../yang/stmt/DeclaredStatementsTest.java | 5 ++- .../parser/spi/PreLinkageModuleNamespace.java | 5 ++- .../AbstractUnqualifiedStatementSupport.java | 43 +++++++++++++++++++ .../spi/meta/NamespaceKeyCriterion.java | 11 ++--- .../parser/spi/meta/StmtContextUtils.java | 5 +-- .../source/BelongsToPrefixToModuleName.java | 5 ++- .../IncludedSubmoduleNameToModuleCtx.java | 5 ++- .../spi/source/ModuleNameToModuleQName.java | 5 ++- .../spi/source/ModuleNameToNamespace.java | 5 ++- .../source/ModuleNamespaceForBelongsTo.java | 5 ++- .../spi/source/ModuleQNameToModuleName.java | 5 ++- .../repo/api/RevisionSourceIdentifier.java | 14 +++++- 44 files changed, 209 insertions(+), 130 deletions(-) create mode 100644 parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractUnqualifiedStatementSupport.java diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java index 30ff0197c1..bf3ea93cae 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/ModuleImport.java @@ -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(); } /** diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java index c6ef4f40f3..2d8b5fca6b 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToEffectiveStatement.java @@ -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 { +public interface BelongsToEffectiveStatement extends EffectiveStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.BELONGS_TO; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToStatement.java index deea2ef175..8609634816 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BelongsToStatement.java @@ -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 { +public interface BelongsToStatement extends DeclaredStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.BELONGS_TO; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java index 9e2bc8cacd..916b43e6a4 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportEffectiveStatement.java @@ -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 { +public interface ImportEffectiveStatement extends EffectiveStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.IMPORT; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java index 50822ffa07..e5f3bd5c41 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ImportStatement.java @@ -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 { +public interface ImportStatement extends DocumentedDeclaredStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.IMPORT; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeEffectiveStatement.java index 923450edfb..bc20d1e909 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeEffectiveStatement.java @@ -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 { +public interface IncludeEffectiveStatement extends EffectiveStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.INCLUDE; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java index 43dc464c78..bc79139241 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/IncludeStatement.java @@ -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 { +public interface IncludeStatement extends DocumentedDeclaredStatement { @Override default StatementDefinition statementDefinition() { return YangStmtMapping.INCLUDE; diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java index a51c332066..d8f59039e7 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ModuleEffectiveStatement.java @@ -47,7 +47,7 @@ public interface ModuleEffectiveStatement * Namespace mapping all included submodules. The namespaces is keyed by submodule name. */ abstract class NameToEffectiveSubmoduleNamespace - extends IdentifierNamespace { + extends IdentifierNamespace { private NameToEffectiveSubmoduleNamespace() { // This class should never be subclassed } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java index e0bed7821b..59626ca810 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/DeclaredStatements.java @@ -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> 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> 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> 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) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyBelongsToStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyBelongsToStatement.java index 1e3e1869b1..8c4657f5bf 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyBelongsToStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyBelongsToStatement.java @@ -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 implements BelongsToStatement { + public EmptyBelongsToStatement(final Unqualified argument) { + super(argument.getLocalName(), argument); } } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyIncludeStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyIncludeStatement.java index bcf6da4769..a23f3a3d45 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyIncludeStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/EmptyIncludeStatement.java @@ -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 implements IncludeStatement { - public EmptyIncludeStatement(final String rawArgument, final String argument) { - super(rawArgument, argument); +public final class EmptyIncludeStatement extends WithArgument implements IncludeStatement { + public EmptyIncludeStatement(final Unqualified argument) { + super(argument.getLocalName(), argument); } } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ImportStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ImportStatementImpl.java index b8c432c63a..f898e2628b 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ImportStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/ImportStatementImpl.java @@ -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 implements ImportStatement { + public ImportStatementImpl(final Unqualified argument, final ImmutableList> substatements) { - super(rawArgument, substatements); + super(argument.getLocalName(), argument, substatements); } } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularBelongsToStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularBelongsToStatement.java index 863df98353..2ada328ef5 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularBelongsToStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularBelongsToStatement.java @@ -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 implements BelongsToStatement { + public RegularBelongsToStatement(final @NonNull Unqualified argument, final ImmutableList> substatements) { - super(rawArgument, substatements); + super(argument.getLocalName(), argument, substatements); } } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularIncludeStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularIncludeStatement.java index 19e7074845..a586920082 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularIncludeStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/decl/RegularIncludeStatement.java @@ -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 implements IncludeStatement { - public RegularIncludeStatement(final String rawArgument, final String argument, +public final class RegularIncludeStatement extends WithSubstatements implements IncludeStatement { + public RegularIncludeStatement(final Unqualified argument, final ImmutableList> substatements) { - super(rawArgument, argument, substatements); + super(argument.getLocalName(), argument, substatements); } } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBelongsToEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBelongsToEffectiveStatement.java index aaa14acab0..3fd1f98ae5 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBelongsToEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyBelongsToEffectiveStatement.java @@ -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 +public final class EmptyBelongsToEffectiveStatement extends DefaultArgument implements BelongsToEffectiveStatement { public EmptyBelongsToEffectiveStatement(final BelongsToStatement declared) { super(declared); diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyIncludeEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyIncludeEffectiveStatement.java index 7d974303a7..7acef3047a 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyIncludeEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyIncludeEffectiveStatement.java @@ -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 +public final class EmptyIncludeEffectiveStatement extends DefaultArgument implements IncludeEffectiveStatement { public EmptyIncludeEffectiveStatement(final IncludeStatement declared) { super(declared); diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java index 2909933439..b593efd793 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/ImportEffectiveStatementImpl.java @@ -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 - implements ImportEffectiveStatement, ModuleImport, DocumentedNodeMixin { +public final class ImportEffectiveStatementImpl extends WithSubstatements + implements ImportEffectiveStatement, ModuleImport, DocumentedNodeMixin { private final @Nullable Revision revision; public ImportEffectiveStatementImpl(final ImportStatement declared, diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBelongsToEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBelongsToEffectiveStatement.java index 90b28adf1e..10d15031f8 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBelongsToEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularBelongsToEffectiveStatement.java @@ -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 +public final class RegularBelongsToEffectiveStatement extends WithSubstatements implements BelongsToEffectiveStatement { public RegularBelongsToEffectiveStatement(final BelongsToStatement declared, final ImmutableList> substatements) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularIncludeEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularIncludeEffectiveStatement.java index a4fee625ed..c4adedcf4d 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularIncludeEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularIncludeEffectiveStatement.java @@ -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 +public final class RegularIncludeEffectiveStatement extends WithSubstatements implements IncludeEffectiveStatement { public RegularIncludeEffectiveStatement(final IncludeStatement declared, final ImmutableList> substatements) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefBelongsToStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefBelongsToStatement.java index 524ecc6f82..09f015c68b 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefBelongsToStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefBelongsToStatement.java @@ -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 +public final class RefBelongsToStatement extends AbstractRefStatement implements BelongsToStatement { public RefBelongsToStatement(final BelongsToStatement delegate, final DeclarationReference ref) { super(delegate, ref); diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefImportStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefImportStatement.java index 3992b9a969..067a7ef24b 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefImportStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefImportStatement.java @@ -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 implements ImportStatement { +public final class RefImportStatement extends AbstractRefStatement + implements ImportStatement { public RefImportStatement(final ImportStatement delegate, final DeclarationReference ref) { super(delegate, ref); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefIncludeStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefIncludeStatement.java index 76271c3ffc..821676d577 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefIncludeStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/ref/RefIncludeStatement.java @@ -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 +public final class RefIncludeStatement extends AbstractRefStatement implements IncludeStatement { public RefIncludeStatement(final IncludeStatement delegate, final DeclarationReference ref) { super(delegate, ref); diff --git a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java index 86b2710645..8a27466c2a 100644 --- a/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java +++ b/parser/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java @@ -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 { + extends AbstractUnqualifiedStatementSupport { 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 ctx, final ImmutableList> substatements) { diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/StmtNamespaceContext.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/StmtNamespaceContext.java index bbf8043be1..fe27682865 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/StmtNamespaceContext.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/StmtNamespaceContext.java @@ -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 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 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 belongsTo = ctx.getAllFromNamespace(BelongsToPrefixToModuleName.class); + final Map belongsTo = ctx.getAllFromNamespace(BelongsToPrefixToModuleName.class); if (belongsTo != null) { - for (Entry entry : belongsTo.entrySet()) { + for (Entry 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 diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java index 11e4daa2cf..188ef4446a 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java @@ -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 { + extends AbstractUnqualifiedStatementSupport { 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 stmt) { + public void onPreLinkageDeclared(final Mutable 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> 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> failed) { InferenceException.throwIf(failed.contains(imported), stmt, "Imported module [%s] was not found.", - moduleName); + moduleName.getLocalName()); } }); } @Override - public void onLinkageDeclared(final Mutable stmt) { + public void onLinkageDeclared(final Mutable stmt) { RevisionImport.onLinkageDeclared(stmt); } @Override - protected ImportStatement createDeclared(final BoundStmtCtx ctx, + protected ImportStatement createDeclared(final BoundStmtCtx ctx, final ImmutableList> 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 stmt, + protected ImportEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { InferenceException.throwIf(substatements.isEmpty(), stmt, "Unexpected empty effective import statement"); return EffectiveStatements.createImport(stmt.declared(), substatements, diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java index ccc24d7175..43f98daf19 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java @@ -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 stmt) { + static void onLinkageDeclared(final Mutable stmt) { final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); final Prerequisite> 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> 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 stmt) { + static SourceIdentifier getImportedSourceIdentifier(final StmtContext stmt) { final StmtContext 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()); } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java index 94778ed05d..0d171cd0cb 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java @@ -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 { + extends AbstractUnqualifiedStatementSupport { 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 ctx) { + public void onPreLinkageDeclared(final Mutable ctx) { ctx.addRequiredSource(getSourceIdentifier(ctx)); } @Override - public void onLinkageDeclared(final Mutable belongsToCtx) { + public void onLinkageDeclared( + final Mutable 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 ctx, + protected BelongsToStatement createDeclared(final BoundStmtCtx ctx, final ImmutableList> 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 stmt, + protected BelongsToEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { return EffectiveStatements.createBelongsTo(stmt.declared(), substatements); } - private static SourceIdentifier getSourceIdentifier(final StmtContext belongsToCtx) { - return RevisionSourceIdentifier.create(belongsToCtx.getArgument()); + private static SourceIdentifier getSourceIdentifier( + final StmtContext belongsToCtx) { + return RevisionSourceIdentifier.create(belongsToCtx.getArgument(), Optional.empty()); } } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java index e8b55ac7c8..23e48654ee 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java @@ -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 { + extends AbstractUnqualifiedStatementSupport { 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 stmt) { + public void onPreLinkageDeclared(final Mutable stmt) { final StmtContext 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 stmt) { - final String submoduleName = stmt.getArgument(); + public void onLinkageDeclared(final Mutable stmt) { + final Unqualified submoduleName = stmt.getArgument(); final StmtContext 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 ctx, + protected IncludeStatement createDeclared(final BoundStmtCtx ctx, final ImmutableList> 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 stmt, + protected IncludeEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { return EffectiveStatements.createInclude(stmt.declared(), substatements); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java index 50309a2b92..443dc353f0 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleEffectiveStatementImpl.java @@ -43,7 +43,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule implements Module, ModuleEffectiveStatement { - private final ImmutableMap nameToSubmodule; + private final ImmutableMap nameToSubmodule; private final ImmutableMap qnameToExtension; private final ImmutableMap qnameToFeature; private final ImmutableMap qnameToIdentity; @@ -72,7 +72,7 @@ final class ModuleEffectiveStatementImpl extends AbstractEffectiveModule> includedSubmodules = + final Map> includedSubmodules = stmt.localNamespacePortion(IncludedSubmoduleNameToModuleCtx.class); nameToSubmodule = includedSubmodules == null ? ImmutableMap.of() : ImmutableMap.copyOf(Maps.transformValues(includedSubmodules, diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java index c06b2e880a..90ea69b3d8 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java @@ -148,7 +148,7 @@ public final class ModuleStatementSupport @Override public void onPreLinkageDeclared(final Mutable 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> submoduleContexts(final Current stmt) { - final Map> submodules = stmt.localNamespacePortion( + final Map> submodules = stmt.localNamespacePortion( IncludedSubmoduleNameToModuleCtx.class); return submodules == null ? List.of() : submodules.values(); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java index 92c9917a90..f6a388234b 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleEffectiveStatementImpl.java @@ -81,7 +81,7 @@ final class SubmoduleEffectiveStatementImpl * collect only submodule contexts here and then build them during * sealing of this statement. */ - final Map> includedSubmodulesMap = stmt.localNamespacePortion( + final Map> includedSubmodulesMap = stmt.localNamespacePortion( IncludedSubmoduleNameToModuleCtx.class); if (includedSubmodulesMap != null) { final Set> submoduleContextsInit = diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java index 1a1e4abe82..ea05675da1 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java @@ -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()); diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java index 9af98c4aeb..0c6e99304b 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/DeclaredStatementsTest.java @@ -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 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()); diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/PreLinkageModuleNamespace.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/PreLinkageModuleNamespace.java index 3eb1278a8a..6203991f69 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/PreLinkageModuleNamespace.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/PreLinkageModuleNamespace.java @@ -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 { - NamespaceBehaviour, + extends StatementNamespace { + NamespaceBehaviour, @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 index 0000000000..dbe982b1e6 --- /dev/null +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractUnqualifiedStatementSupport.java @@ -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 Declared Statement representation + * @param Effective Statement representation + */ +@Beta +public abstract class AbstractUnqualifiedStatementSupport, + E extends EffectiveStatement> extends AbstractStatementSupport { + protected AbstractUnqualifiedStatementSupport(final StatementDefinition publicDefinition, + final StatementPolicy 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); + } + } +} diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java index a3ea67526b..307fe3d62f 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/NamespaceKeyCriterion.java @@ -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 { private static final class LatestRevisionModule extends NamespaceKeyCriterion { - 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 { @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 { * @param moduleName Module name * @return A criterion object. */ - public static NamespaceKeyCriterion latestRevisionModule(final String moduleName) { + public static NamespaceKeyCriterion latestRevisionModule(final Unqualified moduleName) { return new LatestRevisionModule(moduleName); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java index b2b47ad8db..57f094e85e 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java @@ -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); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/BelongsToPrefixToModuleName.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/BelongsToPrefixToModuleName.java index 6b04899f19..d7746bdb4a 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/BelongsToPrefixToModuleName.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/BelongsToPrefixToModuleName.java @@ -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 { - NamespaceBehaviour BEHAVIOUR = +public interface BelongsToPrefixToModuleName extends ParserNamespace { + NamespaceBehaviour BEHAVIOUR = NamespaceBehaviour.sourceLocal(BelongsToPrefixToModuleName.class); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedSubmoduleNameToModuleCtx.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedSubmoduleNameToModuleCtx.java index 772ec6504e..91b256dc9d 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedSubmoduleNameToModuleCtx.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/IncludedSubmoduleNameToModuleCtx.java @@ -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> { - NamespaceBehaviour, @NonNull IncludedSubmoduleNameToModuleCtx> BEHAVIOUR = +public interface IncludedSubmoduleNameToModuleCtx extends ParserNamespace> { + NamespaceBehaviour, @NonNull IncludedSubmoduleNameToModuleCtx> BEHAVIOUR = NamespaceBehaviour.sourceLocal(IncludedSubmoduleNameToModuleCtx.class); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToModuleQName.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToModuleQName.java index 5387b34437..7da584425b 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToModuleQName.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToModuleQName.java @@ -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 { - NamespaceBehaviour BEHAVIOUR = +public interface ModuleNameToModuleQName extends ParserNamespace { + NamespaceBehaviour BEHAVIOUR = NamespaceBehaviour.sourceLocal(ModuleNameToModuleQName.class); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToNamespace.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToNamespace.java index 4e07bca6f7..8da9a9f7f3 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToNamespace.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNameToNamespace.java @@ -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 { - NamespaceBehaviour BEHAVIOUR = +public interface ModuleNameToNamespace extends ParserNamespace { + NamespaceBehaviour BEHAVIOUR = NamespaceBehaviour.global(ModuleNameToNamespace.class); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNamespaceForBelongsTo.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNamespaceForBelongsTo.java index 9a520dde98..eb9a346e8c 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNamespaceForBelongsTo.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleNamespaceForBelongsTo.java @@ -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 { - NamespaceBehaviour, + extends StatementNamespace { + NamespaceBehaviour, @NonNull ModuleNamespaceForBelongsTo> BEHAVIOUR = NamespaceBehaviour.global(ModuleNamespaceForBelongsTo.class); } diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleQNameToModuleName.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleQNameToModuleName.java index bf21e26c22..e02716ddf4 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleQNameToModuleName.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/source/ModuleQNameToModuleName.java @@ -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 { - NamespaceBehaviour BEHAVIOUR = +public interface ModuleQNameToModuleName extends ParserNamespace { + NamespaceBehaviour BEHAVIOUR = NamespaceBehaviour.global(ModuleQNameToModuleName.class); } diff --git a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java index cb1e8de901..02869cbc4e 100644 --- a/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java +++ b/yang/yang-repo-api/src/main/java/org/opendaylight/yangtools/yang/model/repo/api/RevisionSourceIdentifier.java @@ -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) { + 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()); } -- 2.36.6