From d605800fa3da3ea340497c683bd83ea37c12da6c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 21 Apr 2021 15:49:56 +0200 Subject: [PATCH] Teach YANG parser to retain DeclarationReference DeclaredStatement is exposing DeclarationReference as optional additional information. yang-parser-reactor has knowledge of this information during its execution to aid diagnosing model errors, so we just need a mechanism for to bridge this information to statement implementations. Add the end-to-end glue code for yang-parser-{api,rfc7950} users to request this information be retained and that intent to be communicated to individual StatementFactories. Each StatementFactory needs to opt-in by providing the appropriate decorator via the substrate provided in yang-model-spi's AbstractRefStatement. This necessitates completely abandoning the idea that a StatementSupport is completely stateless -- that has not been true ever since we introduced support for semantic version imports. JIRA: YANGTOOLS-1193 Change-Id: I6a10feb682bb720349e927ea171593e663278eea Signed-off-by: Robert Varga --- ...AbstractIdentityAwareStatementSupport.java | 6 +- .../AugmentIdentifierStatementSupport.java | 8 +- .../ContextInstanceStatementSupport.java | 8 +- .../ContextReferenceStatementSupport.java | 8 +- .../InstanceTargetStatementSupport.java | 8 +- .../RpcContextReferenceStatementSupport.java | 9 +- .../odlext/parser/ContextReferenceTest.java | 7 +- .../AbstractHashedValueStatementSupport.java | 5 +- .../EncryptedValueStatementSupport.java | 11 +- .../parser/HashedValueStatementSupport.java | 11 +- yang/rfc6241-parser-support/pom.xml | 9 +- ...lterElementAttributesStatementSupport.java | 19 +- .../yangtools/rfc6241/parser/NetconfTest.java | 3 +- yang/rfc6536-parser-support/pom.xml | 9 +- .../DefaultDenyAllStatementSupport.java | 19 +- .../DefaultDenyWriteStatementSupport.java | 19 +- .../yangtools/rfc6536/parser/NACMTest.java | 5 +- yang/rfc6643-parser-support/pom.xml | 9 +- .../rfc6643/parser/AliasStatementSupport.java | 10 +- .../parser/DefValStatementSupport.java | 10 +- .../parser/DisplayHintStatementSupport.java | 10 +- .../parser/ImpliedStatementSupport.java | 10 +- .../parser/MaxAccessStatementSupport.java | 10 +- .../rfc6643/parser/OidStatementSupport.java | 10 +- .../rfc6643/parser/SubIdStatementSupport.java | 10 +- .../IetfYangSmiv2ExtensionPluginTest.java | 24 +- .../parser/AnnotationStatementSupport.java | 33 +-- .../rfc7952/parser/AnnotationTest.java | 4 +- .../parser/YangDataStatementSupport.java | 14 +- .../rfc8040/parser/YangDataExtensionTest.java | 4 +- .../parser/MountPointStatementImpl.java | 20 ++ .../parser/MountPointStatementSupport.java | 40 +-- .../rfc8528/parser/MountPointTest.java | 4 +- .../parser/api/YangParserConfiguration.java | 53 +++- .../model/parser/api/YangParserFactory.java | 2 +- .../yang/parser/impl/DefaultReactors.java | 73 +++-- .../parser/impl/YangParserFactoryImpl.java | 33 +-- .../stmt/reactor/BuildGlobalContext.java | 4 + .../stmt/OpenConfigVersionSupport.java | 14 +- .../rfc7950/reactor/RFC7950Reactors.java | 275 ++++++++++-------- .../AbstractAugmentStatementSupport.java | 5 +- .../AugmentStatementRFC6020Support.java | 10 +- .../AugmentStatementRFC7950Support.java | 10 +- .../AbstractDeviateStatementSupport.java | 5 +- .../DeviateStatementRFC6020Support.java | 12 +- .../DeviateStatementRFC7950Support.java | 10 +- .../extension/ExtensionStatementSupport.java | 30 +- .../UnrecognizedStatementSupport.java | 12 +- .../AbstractIfFeatureStatementSupport.java | 5 +- .../IfFeatureStatementRFC6020Support.java | 11 +- .../IfFeatureStatementRFC7950Support.java | 11 +- .../stmt/import_/ImportStatementSupport.java | 21 +- .../leaf_list/LeafListStatementSupport.java | 24 +- .../stmt/list/ListStatementSupport.java | 113 ++++--- .../AbstractImplicitStatementSupport.java | 5 +- ...actOperationContainerStatementSupport.java | 5 +- .../stmt/meta/ActionStatementSupport.java | 47 +-- .../stmt/meta/AnydataStatementSupport.java | 32 +- .../stmt/meta/AnyxmlStatementSupport.java | 32 +- .../stmt/meta/ArgumentStatementSupport.java | 16 +- .../stmt/meta/BaseStatementSupport.java | 10 +- .../stmt/meta/BelongsToStatementSupport.java | 10 +- .../stmt/meta/BitStatementSupport.java | 21 +- .../stmt/meta/CaseStatementSupport.java | 23 +- .../stmt/meta/ChoiceStatementSupport.java | 28 +- .../stmt/meta/ConfigStatementSupport.java | 14 +- .../stmt/meta/ContactStatementSupport.java | 14 +- .../stmt/meta/ContainerStatementSupport.java | 21 +- .../stmt/meta/DefaultStatementSupport.java | 14 +- .../meta/DescriptionStatementSupport.java | 14 +- .../stmt/meta/DeviationStatementSupport.java | 10 +- .../stmt/meta/EnumStatementSupport.java | 23 +- .../meta/ErrorAppTagStatementSupport.java | 10 +- .../meta/ErrorMessageStatementSupport.java | 12 +- .../stmt/meta/FeatureStatementSupport.java | 24 +- .../meta/FractionDigitsStatementSupport.java | 10 +- .../stmt/meta/GroupingStatementSupport.java | 21 +- .../stmt/meta/IdentityStatementSupport.java | 21 +- .../stmt/meta/IncludeStatementSupport.java | 23 +- .../stmt/meta/InputStatementSupport.java | 63 ++-- .../stmt/meta/KeyStatementSupport.java | 10 +- .../stmt/meta/LeafStatementSupport.java | 38 ++- .../stmt/meta/LengthStatementSupport.java | 24 +- .../stmt/meta/MandatoryStatementSupport.java | 14 +- .../meta/MaxElementsStatementSupport.java | 15 +- .../meta/MinElementsStatementSupport.java | 15 +- .../stmt/meta/ModifierStatementSupport.java | 14 +- .../stmt/meta/MustStatementSupport.java | 9 +- .../stmt/meta/NamespaceStatementSupport.java | 15 +- .../stmt/meta/OrderedByStatementSupport.java | 10 +- .../meta/OrganizationStatementSupport.java | 15 +- .../stmt/meta/OutputStatementSupport.java | 63 ++-- .../stmt/meta/PositionStatementSupport.java | 14 +- .../stmt/meta/PrefixStatementSupport.java | 12 +- .../stmt/meta/PresenceStatementSupport.java | 12 +- .../stmt/meta/RangeStatementSupport.java | 10 +- .../stmt/meta/ReferenceStatementSupport.java | 15 +- .../meta/RequireInstanceStatementSupport.java | 14 +- .../meta/RevisionDateStatementSupport.java | 12 +- .../stmt/meta/RevisionStatementSupport.java | 14 +- .../stmt/meta/RpcStatementSupport.java | 40 +-- .../stmt/meta/StatusStatementSupport.java | 10 +- .../stmt/meta/TypedefStatementSupport.java | 10 +- .../stmt/meta/UniqueStatementSupport.java | 15 +- .../stmt/meta/UnitsStatementSupport.java | 15 +- .../stmt/meta/ValueStatementSupport.java | 14 +- .../stmt/meta/WhenStatementSupport.java | 9 +- .../meta/YangVersionStatementSupport.java | 10 +- .../stmt/meta/YinElementStatementSupport.java | 10 +- .../stmt/module/ModuleStatementSupport.java | 133 +++++---- .../AbstractNotificationStatementSupport.java | 5 +- .../NotificationStatementRFC6020Support.java | 10 +- .../NotificationStatementRFC7950Support.java | 18 +- .../stmt/path/PathStatementSupport.java | 17 +- .../stmt/pattern/PatternStatementSupport.java | 21 +- .../stmt/refine/RefineStatementSupport.java | 61 ++-- .../submodule/SubmoduleStatementSupport.java | 21 +- ...stractIdentityRefSpecificationSupport.java | 5 + .../AbstractLeafrefSpecificationSupport.java | 5 + .../type/AbstractTypeStatementSupport.java | 59 ++-- .../stmt/type/AbstractTypeSupport.java | 5 +- .../stmt/type/BitsSpecificationSupport.java | 11 +- .../type/Decimal64SpecificationSupport.java | 15 +- .../stmt/type/EnumSpecificationSupport.java | 5 + ...dentityRefSpecificationRFC6020Support.java | 11 +- ...dentityRefSpecificationRFC7950Support.java | 11 +- ...nstanceIdentifierSpecificationSupport.java | 11 +- .../LeafrefSpecificationRFC6020Support.java | 11 +- .../LeafrefSpecificationRFC7950Support.java | 9 +- .../type/TypeStatementRFC6020Support.java | 11 +- .../type/TypeStatementRFC7950Support.java | 21 +- .../stmt/type/UnionSpecificationSupport.java | 9 +- .../stmt/uses/UsesStatementSupport.java | 10 +- .../plugin/CustomInferencePipeline.java | 23 -- .../plugin/ThirdPartyExtensionPluginTest.java | 12 +- .../plugin/ThirdPartyExtensionSupport.java | 11 +- yang/yang-parser-spi/pom.xml | 4 + .../src/main/java/module-info.java | 1 + .../meta/AbstractBooleanStatementSupport.java | 6 +- .../meta/AbstractEmptyStatementSupport.java | 5 +- .../AbstractInternedStatementSupport.java | 5 +- ...bstractInternedStringStatementSupport.java | 5 +- .../meta/AbstractQNameStatementSupport.java | 5 +- .../AbstractSchemaTreeStatementSupport.java | 5 +- .../spi/meta/AbstractStatementSupport.java | 30 +- .../meta/AbstractStringStatementSupport.java | 5 +- 146 files changed, 1312 insertions(+), 1420 deletions(-) create mode 100644 yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java delete mode 100644 yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AbstractIdentityAwareStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AbstractIdentityAwareStatementSupport.java index 657ac0800c..17ef8d13ce 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AbstractIdentityAwareStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AbstractIdentityAwareStatementSupport.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -35,8 +36,9 @@ abstract class AbstractIdentityAwareStatementSupport> extends AbstractStatementSupport { private final SubstatementValidator validator; - AbstractIdentityAwareStatementSupport(final StatementDefinition publicDefinition) { - super(publicDefinition, StatementPolicy.exactReplica()); + AbstractIdentityAwareStatementSupport(final StatementDefinition publicDefinition, + final YangParserConfiguration config) { + super(publicDefinition, StatementPolicy.exactReplica(), config); validator = SubstatementValidator.builder(publicDefinition).build(); } diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java index 6d61359003..1f1aae6469 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java @@ -9,13 +9,13 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.AugmentIdentifierStatement; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; import org.opendaylight.yangtools.yang.common.UnqualifiedQName; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -26,13 +26,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class AugmentIdentifierStatementSupport extends AbstractStatementSupport { - public static final @NonNull AugmentIdentifierStatementSupport INSTANCE = new AugmentIdentifierStatementSupport(); - private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER).build(); - private AugmentIdentifierStatementSupport() { - super(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER, StatementPolicy.contextIndependent()); + public AugmentIdentifierStatementSupport(final YangParserConfiguration config) { + super(OpenDaylightExtensionsStatements.AUGMENT_IDENTIFIER, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java index 7c10f5b127..47a939c3e7 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.ContextInstanceEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.ContextInstanceStatement; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; @@ -17,15 +16,14 @@ import org.opendaylight.yangtools.yang.common.QName; 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.stmt.IdentityEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @Beta public final class ContextInstanceStatementSupport extends AbstractIdentityAwareStatementSupport { - public static final @NonNull ContextInstanceStatementSupport INSTANCE = new ContextInstanceStatementSupport(); - - private ContextInstanceStatementSupport() { - super(OpenDaylightExtensionsStatements.CONTEXT_INSTANCE); + public ContextInstanceStatementSupport(final YangParserConfiguration config) { + super(OpenDaylightExtensionsStatements.CONTEXT_INSTANCE, config); } @Override diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java index f7fc4dc870..7124fcf2d9 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.ContextReferenceEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.ContextReferenceStatement; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; @@ -17,15 +16,14 @@ import org.opendaylight.yangtools.yang.common.QName; 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.stmt.IdentityEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @Beta public final class ContextReferenceStatementSupport extends AbstractIdentityAwareStatementSupport { - public static final @NonNull ContextReferenceStatementSupport INSTANCE = new ContextReferenceStatementSupport(); - - private ContextReferenceStatementSupport() { - super(OpenDaylightExtensionsStatements.CONTEXT_REFERENCE); + public ContextReferenceStatementSupport(final YangParserConfiguration config) { + super(OpenDaylightExtensionsStatements.CONTEXT_REFERENCE, config); } @Override diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java index da0f7069e3..1d38a4396e 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java @@ -9,12 +9,12 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.InstanceTargetEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.InstanceTargetStatement; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -23,13 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class InstanceTargetStatementSupport extends AbstractStringStatementSupport { - public static final @NonNull InstanceTargetStatementSupport INSTANCE = new InstanceTargetStatementSupport(); - private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(OpenDaylightExtensionsStatements.INSTANCE_TARGET).build(); - private InstanceTargetStatementSupport() { - super(OpenDaylightExtensionsStatements.INSTANCE_TARGET, StatementPolicy.contextIndependent()); + public InstanceTargetStatementSupport(final YangParserConfiguration config) { + super(OpenDaylightExtensionsStatements.INSTANCE_TARGET, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java index a3ea0174bf..96d72231bc 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java @@ -9,12 +9,12 @@ package org.opendaylight.yangtools.odlext.parser; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.odlext.model.api.OpenDaylightExtensionsStatements; import org.opendaylight.yangtools.odlext.model.api.RpcContextReferenceEffectiveStatement; import org.opendaylight.yangtools.odlext.model.api.RpcContextReferenceStatement; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -23,14 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class RpcContextReferenceStatementSupport extends AbstractStringStatementSupport { - public static final @NonNull RpcContextReferenceStatementSupport INSTANCE = - new RpcContextReferenceStatementSupport(); - private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(OpenDaylightExtensionsStatements.RPC_CONTEXT_REFERENCE).build(); - private RpcContextReferenceStatementSupport() { - super(OpenDaylightExtensionsStatements.RPC_CONTEXT_REFERENCE, StatementPolicy.contextIndependent()); + public RpcContextReferenceStatementSupport(final YangParserConfiguration config) { + super(OpenDaylightExtensionsStatements.RPC_CONTEXT_REFERENCE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java b/yang/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java index 611459ae1e..a57f799dce 100644 --- a/yang/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java +++ b/yang/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource; @@ -44,8 +45,10 @@ public class ContextReferenceTest { @BeforeClass public static void createReactor() { reactor = RFC7950Reactors.vanillaReactorBuilder() - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ContextInstanceStatementSupport.INSTANCE) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ContextReferenceStatementSupport.INSTANCE) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new ContextInstanceStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new ContextReferenceStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java index ffcb884ee4..3d5cf974a7 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport; @@ -85,8 +86,8 @@ abstract class AbstractHashedValueStatementSupport private final SubstatementValidator validator; - AbstractHashedValueStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.contextIndependent()); + AbstractHashedValueStatementSupport(final StatementDefinition definition, final YangParserConfiguration config) { + super(definition, StatementPolicy.contextIndependent(), config); this.validator = SubstatementValidator.builder(definition).build(); } diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java index 22cf3052b4..556162bba6 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java @@ -8,15 +8,10 @@ package org.opendaylight.yangtools.openconfig.parser; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; public final class EncryptedValueStatementSupport extends AbstractHashedValueStatementSupport { - private static final EncryptedValueStatementSupport INSTANCE = new EncryptedValueStatementSupport(); - - private EncryptedValueStatementSupport() { - super(OpenConfigStatements.OPENCONFIG_ENCRYPTED_VALUE); - } - - public static EncryptedValueStatementSupport getInstance() { - return INSTANCE; + public EncryptedValueStatementSupport(final YangParserConfiguration config) { + super(OpenConfigStatements.OPENCONFIG_ENCRYPTED_VALUE, config); } } diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java index 5ed33d8a1e..3d48ede26f 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java @@ -8,15 +8,10 @@ package org.opendaylight.yangtools.openconfig.parser; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; public final class HashedValueStatementSupport extends AbstractHashedValueStatementSupport { - private static final HashedValueStatementSupport INSTANCE = new HashedValueStatementSupport(); - - private HashedValueStatementSupport() { - super(OpenConfigStatements.OPENCONFIG_HASHED_VALUE); - } - - public static HashedValueStatementSupport getInstance() { - return INSTANCE; + public HashedValueStatementSupport(final YangParserConfiguration config) { + super(OpenConfigStatements.OPENCONFIG_HASHED_VALUE, config); } } diff --git a/yang/rfc6241-parser-support/pom.xml b/yang/rfc6241-parser-support/pom.xml index 51d9ea7942..71a24921ad 100644 --- a/yang/rfc6241-parser-support/pom.xml +++ b/yang/rfc6241-parser-support/pom.xml @@ -43,6 +43,10 @@ org.opendaylight.yangtools yang-model-spi + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.yangtools yang-parser-spi @@ -57,11 +61,6 @@ yang-parser-rfc7950 - - org.opendaylight.yangtools - yang-parser-api - test - org.opendaylight.yangtools yang-repo-api diff --git a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java index f12e41cb9d..2f253fbe0c 100644 --- a/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java +++ b/yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java @@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath; 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.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport; @@ -76,18 +76,11 @@ public final class GetFilterElementAttributesStatementSupport extends AbstractEm } private static final Logger LOG = LoggerFactory.getLogger(GetFilterElementAttributesStatementSupport.class); - private static final GetFilterElementAttributesStatementSupport INSTANCE = - new GetFilterElementAttributesStatementSupport(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES); + private static final SubstatementValidator VALIDATOR = + SubstatementValidator.builder(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES).build(); - private final SubstatementValidator validator; - - GetFilterElementAttributesStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.reject()); - this.validator = SubstatementValidator.builder(definition).build(); - } - - public static GetFilterElementAttributesStatementSupport getInstance() { - return INSTANCE; + public GetFilterElementAttributesStatementSupport(final YangParserConfiguration config) { + super(NetconfStatements.GET_FILTER_ELEMENT_ATTRIBUTES, StatementPolicy.reject(), config); } @Override @@ -99,7 +92,7 @@ public final class GetFilterElementAttributesStatementSupport extends AbstractEm @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override diff --git a/yang/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java b/yang/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java index b5cb5b65a1..d9df80f7ae 100644 --- a/yang/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java +++ b/yang/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -45,7 +46,7 @@ public class NetconfTest { public static void createReactor() { reactor = RFC7950Reactors.defaultReactorBuilder() .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - GetFilterElementAttributesStatementSupport.getInstance()) + new GetFilterElementAttributesStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/rfc6536-parser-support/pom.xml b/yang/rfc6536-parser-support/pom.xml index 82789baeb3..7bee988037 100644 --- a/yang/rfc6536-parser-support/pom.xml +++ b/yang/rfc6536-parser-support/pom.xml @@ -42,6 +42,10 @@ org.opendaylight.yangtools yang-model-spi + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.yangtools yang-parser-spi @@ -56,11 +60,6 @@ yang-parser-rfc7950 - - org.opendaylight.yangtools - yang-parser-api - test - org.opendaylight.yangtools yang-parser-reactor diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java index 91eb86a928..8e5f07be10 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java @@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport; @@ -67,23 +67,16 @@ public final class DefaultDenyAllStatementSupport } } - private static final DefaultDenyAllStatementSupport INSTANCE = - new DefaultDenyAllStatementSupport(NACMStatements.DEFAULT_DENY_ALL); + private static final SubstatementValidator VALIDATOR = + SubstatementValidator.builder(NACMStatements.DEFAULT_DENY_ALL).build(); - private final SubstatementValidator validator; - - private DefaultDenyAllStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.contextIndependent()); - this.validator = SubstatementValidator.builder(definition).build(); - } - - public static DefaultDenyAllStatementSupport getInstance() { - return INSTANCE; + public DefaultDenyAllStatementSupport(final YangParserConfiguration config) { + super(NACMStatements.DEFAULT_DENY_ALL, StatementPolicy.contextIndependent(), config); } @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java index a3e25a5f3f..25f8410a99 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java @@ -20,7 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport; @@ -67,23 +67,16 @@ public final class DefaultDenyWriteStatementSupport } } - private static final DefaultDenyWriteStatementSupport INSTANCE = - new DefaultDenyWriteStatementSupport(NACMStatements.DEFAULT_DENY_WRITE); + private static final SubstatementValidator VALIDATOR = + SubstatementValidator.builder(NACMStatements.DEFAULT_DENY_WRITE).build(); - private final SubstatementValidator validator; - - DefaultDenyWriteStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.contextIndependent()); - this.validator = SubstatementValidator.builder(definition).build(); - } - - public static DefaultDenyWriteStatementSupport getInstance() { - return INSTANCE; + public DefaultDenyWriteStatementSupport(final YangParserConfiguration config) { + super(NACMStatements.DEFAULT_DENY_WRITE, StatementPolicy.contextIndependent(), config); } @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override diff --git a/yang/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java b/yang/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java index b5dd4a6576..a41d270e4c 100644 --- a/yang/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java +++ b/yang/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -37,9 +38,9 @@ public class NACMTest { public static void createReactor() { reactor = RFC7950Reactors.defaultReactorBuilder() .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - DefaultDenyAllStatementSupport.getInstance()) + new DefaultDenyAllStatementSupport(YangParserConfiguration.DEFAULT)) .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - DefaultDenyWriteStatementSupport.getInstance()) + new DefaultDenyWriteStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/rfc6643-parser-support/pom.xml b/yang/rfc6643-parser-support/pom.xml index 914129bfbc..17887ef96f 100644 --- a/yang/rfc6643-parser-support/pom.xml +++ b/yang/rfc6643-parser-support/pom.xml @@ -38,6 +38,10 @@ org.opendaylight.yangtools yang-model-spi + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.yangtools yang-parser-spi @@ -52,11 +56,6 @@ yang-parser-rfc7950 - - org.opendaylight.yangtools - yang-parser-api - test - org.opendaylight.yangtools yang-parser-reactor diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java index a6de8823bf..0d642de549 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMappi 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.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -30,14 +31,9 @@ public final class AliasStatementSupport .add(YangStmtMapping.STATUS, 0, 1) .add(IetfYangSmiv2ExtensionsMapping.OBJECT_ID, 0, 1) .build(); - private static final AliasStatementSupport INSTANCE = new AliasStatementSupport(); - private AliasStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.ALIAS, StatementPolicy.contextIndependent()); - } - - public static AliasStatementSupport getInstance() { - return INSTANCE; + public AliasStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.ALIAS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java index 0fa00a72ec..3f19fd4ffe 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.DefValStatement; import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -24,14 +25,9 @@ public final class DefValStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.DEFVAL).build(); - private static final DefValStatementSupport INSTANCE = new DefValStatementSupport(); - private DefValStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.DEFVAL, StatementPolicy.contextIndependent()); - } - - public static DefValStatementSupport getInstance() { - return INSTANCE; + public DefValStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.DEFVAL, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java index 24b30d8028..766f415428 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.DisplayHintStatement; import org.opendaylight.yangtools.rfc6643.model.api.IetfYangSmiv2ExtensionsMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -24,14 +25,9 @@ public final class DisplayHintStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.DISPLAY_HINT).build(); - private static final DisplayHintStatementSupport INSTANCE = new DisplayHintStatementSupport(); - private DisplayHintStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.DISPLAY_HINT, StatementPolicy.contextIndependent()); - } - - public static DisplayHintStatementSupport getInstance() { - return INSTANCE; + public DisplayHintStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.DISPLAY_HINT, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java index cffda60591..6781f267ff 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.ImpliedEffectiveStatement; import org.opendaylight.yangtools.rfc6643.model.api.ImpliedStatement; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -24,14 +25,9 @@ public final class ImpliedStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.IMPLIED).build(); - private static final ImpliedStatementSupport INSTANCE = new ImpliedStatementSupport(); - private ImpliedStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.IMPLIED, StatementPolicy.contextIndependent()); - } - - public static ImpliedStatementSupport getInstance() { - return INSTANCE; + public ImpliedStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.IMPLIED, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java index 642b93c62c..3a2bda2fa8 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessEffectiveStatement; import org.opendaylight.yangtools.rfc6643.model.api.MaxAccessStatement; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -26,14 +27,9 @@ public final class MaxAccessStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS).build(); - private static final MaxAccessStatementSupport INSTANCE = new MaxAccessStatementSupport(); - private MaxAccessStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS, StatementPolicy.contextIndependent()); - } - - public static MaxAccessStatementSupport getInstance() { - return INSTANCE; + public MaxAccessStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.MAX_ACCESS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java index fabc6bba84..0c798cbc4f 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.OidEffectiveStatement; import org.opendaylight.yangtools.rfc6643.model.api.OidStatement; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -26,14 +27,9 @@ public final class OidStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.OBJECT_ID).build(); - private static final OidStatementSupport INSTANCE = new OidStatementSupport(); - private OidStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.OBJECT_ID, StatementPolicy.contextIndependent()); - } - - public static OidStatementSupport getInstance() { - return INSTANCE; + public OidStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.OBJECT_ID, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java index 94a27b21b3..8c257eb015 100644 --- a/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java +++ b/yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.rfc6643.model.api.SubIdStatement; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -25,14 +26,9 @@ public final class SubIdStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(IetfYangSmiv2ExtensionsMapping.SUB_ID).build(); - private static final SubIdStatementSupport INSTANCE = new SubIdStatementSupport(); - private SubIdStatementSupport() { - super(IetfYangSmiv2ExtensionsMapping.SUB_ID, StatementPolicy.contextIndependent()); - } - - public static SubIdStatementSupport getInstance() { - return INSTANCE; + public SubIdStatementSupport(final YangParserConfiguration config) { + super(IetfYangSmiv2ExtensionsMapping.SUB_ID, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java b/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java index e4b8a5d40c..79c19070e1 100644 --- a/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java +++ b/yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java @@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -46,14 +47,21 @@ public class IetfYangSmiv2ExtensionPluginTest { @BeforeClass public static void createReactor() { reactor = RFC7950Reactors.defaultReactorBuilder() - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance()) - .build(); + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new DisplayHintStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new MaxAccessStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new DefValStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new ImpliedStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new AliasStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new OidStatementSupport(YangParserConfiguration.DEFAULT)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new SubIdStatementSupport(YangParserConfiguration.DEFAULT)) + .build(); } @AfterClass diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java index 57ff9db698..515a324fda 100644 --- a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java +++ b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java @@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypeBuilder; import org.opendaylight.yangtools.yang.model.ri.type.ConcreteTypes; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; @@ -102,25 +103,17 @@ public final class AnnotationStatementSupport } } - private static final AnnotationStatementSupport INSTANCE = new AnnotationStatementSupport( - MetadataStatements.ANNOTATION); - - private final SubstatementValidator validator; - - AnnotationStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.reject()); - this.validator = SubstatementValidator.builder(definition) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.UNITS) - .build(); - } - - public static AnnotationStatementSupport getInstance() { - return INSTANCE; + private static final SubstatementValidator VALIDATOR = SubstatementValidator.builder(MetadataStatements.ANNOTATION) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.UNITS) + .build(); + + public AnnotationStatementSupport(final YangParserConfiguration config) { + super(MetadataStatements.ANNOTATION, StatementPolicy.reject(), config); } @Override @@ -137,7 +130,7 @@ public final class AnnotationStatementSupport @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override diff --git a/yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java b/yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java index 218703faa8..c82c73a485 100644 --- a/yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java +++ b/yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java @@ -21,6 +21,7 @@ import org.junit.Test; import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; @@ -39,7 +40,8 @@ public class AnnotationTest { @BeforeClass public static void createReactor() { reactor = RFC7950Reactors.vanillaReactorBuilder() - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new AnnotationStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java index 6902224a5f..7688094a15 100644 --- a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java @@ -20,8 +20,8 @@ import org.opendaylight.yangtools.yang.common.QName; 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.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithRawStringArgument.WithSubstatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -46,22 +46,16 @@ public final class YangDataStatementSupport } } - private static final YangDataStatementSupport INSTANCE = new YangDataStatementSupport(YangDataStatements.YANG_DATA); - private final SubstatementValidator declaredValidator; - private YangDataStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.reject()); - declaredValidator = SubstatementValidator.builder(definition) + public YangDataStatementSupport(final YangParserConfiguration config) { + super(YangDataStatements.YANG_DATA, StatementPolicy.reject(), config); + declaredValidator = SubstatementValidator.builder(YangDataStatements.YANG_DATA) .addMandatory(YangStmtMapping.CONTAINER) .addOptional(YangStmtMapping.USES) .build(); } - public static YangDataStatementSupport getInstance() { - return INSTANCE; - } - @Override public void onStatementAdded(final Mutable ctx) { // as per https://tools.ietf.org/html/rfc8040#section-8, diff --git a/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java b/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java index 0be14ddf8d..4546ec7716 100644 --- a/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java +++ b/yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java @@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -74,7 +75,8 @@ public class YangDataExtensionTest { public static void createReactor() { reactor = RFC7950Reactors.vanillaReactorBuilder() .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataArgumentNamespace.BEHAVIOUR) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new YangDataStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java new file mode 100644 index 0000000000..8d623f4c52 --- /dev/null +++ b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2021 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.rfc8528.parser; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.rfc8528.model.api.MountPointStatement; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; + +final class MountPointStatementImpl extends WithSubstatements implements MountPointStatement { + MountPointStatementImpl(final QName argument, final ImmutableList> substatements) { + super(argument, substatements); + } +} \ No newline at end of file diff --git a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java index 775a943b62..25b9ab6bc1 100644 --- a/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java +++ b/yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java @@ -18,7 +18,7 @@ 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.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport; @@ -30,35 +30,21 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class MountPointStatementSupport extends AbstractQNameStatementSupport { + private static final SubstatementValidator VALIDATOR = + SubstatementValidator.builder(SchemaMountStatements.MOUNT_POINT) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .build(); - private static final class Declared extends WithSubstatements implements MountPointStatement { - Declared(final QName argument, final ImmutableList> substatements) { - super(argument, substatements); - } - } - - private static final MountPointStatementSupport INSTANCE = new MountPointStatementSupport( - SchemaMountStatements.MOUNT_POINT); - - private final SubstatementValidator validator; - - MountPointStatementSupport(final StatementDefinition definition) { - super(definition, StatementPolicy.copyDeclared((copy, current, substatements) -> + public MountPointStatementSupport(final YangParserConfiguration config) { + super(SchemaMountStatements.MOUNT_POINT, StatementPolicy.copyDeclared((copy, current, substatements) -> copy.getArgument().equals(current.getArgument()) // Implied by UnknownSchemaNode && copy.history().isAugmenting() == current.history().isAugmenting() && copy.history().isAddedByUses() == current.history().isAddedByUses() - && copy.equalParentPath(current))); - this.validator = SubstatementValidator.builder(definition) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .build(); - } - - public static MountPointStatementSupport getInstance() { - return INSTANCE; + && copy.equalParentPath(current)), config); } // FIXME: these two methods are not quite right. RFC8528 states that: @@ -87,13 +73,13 @@ public final class MountPointStatementSupport @Override protected SubstatementValidator getSubstatementValidator() { - return validator; + return VALIDATOR; } @Override protected MountPointStatement createDeclared(@NonNull final StmtContext ctx, final ImmutableList> substatements) { - return new Declared(ctx.getArgument(), substatements); + return new MountPointStatementImpl(ctx.getArgument(), substatements); } @Override diff --git a/yang/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java b/yang/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java index 6d36771fce..1ebdd38c44 100644 --- a/yang/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java +++ b/yang/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; @@ -46,7 +47,8 @@ public class MountPointTest { @BeforeClass public static void createReactor() { reactor = RFC7950Reactors.vanillaReactorBuilder() - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MountPointStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new MountPointStatementSupport(YangParserConfiguration.DEFAULT)) .build(); } diff --git a/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserConfiguration.java b/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserConfiguration.java index 7040ab16fd..a602a821fe 100644 --- a/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserConfiguration.java +++ b/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserConfiguration.java @@ -10,7 +10,10 @@ package org.opendaylight.yangtools.yang.model.parser.api; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; +import com.google.common.base.MoreObjects; +import java.util.Objects; import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; @@ -20,24 +23,59 @@ import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; @Beta @NonNullByDefault public final class YangParserConfiguration implements Immutable { - public static final YangParserConfiguration DEFAULT = new YangParserConfiguration(StatementParserMode.DEFAULT_MODE); + /** + * System-wide default configuration. + */ + public static final YangParserConfiguration DEFAULT = builder().build(); private final StatementParserMode parserMode; + private final boolean retainDeclarationReferences; - private YangParserConfiguration(final StatementParserMode parserMode) { + private YangParserConfiguration(final StatementParserMode parserMode, final boolean retainDeclarationReferences) { this.parserMode = requireNonNull(parserMode); + this.retainDeclarationReferences = retainDeclarationReferences; } public StatementParserMode parserMode() { return parserMode; } + public boolean retainDeclarationReferences() { + return retainDeclarationReferences; + } + + @Override + public int hashCode() { + return Objects.hash(parserMode, retainDeclarationReferences); + } + + @Override + public boolean equals(final @Nullable Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof YangParserConfiguration)) { + return false; + } + final YangParserConfiguration other = (YangParserConfiguration) obj; + return parserMode == other.parserMode && retainDeclarationReferences == other.retainDeclarationReferences; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("parserMode", parserMode) + .add("retainDeclarationReferences", retainDeclarationReferences) + .toString(); + } + public static Builder builder() { return new Builder(); } public static final class Builder implements org.opendaylight.yangtools.concepts.Builder { private StatementParserMode parserMode = StatementParserMode.DEFAULT_MODE; + private boolean retainDeclarationReferences = false; private Builder() { // Hidden on purpose @@ -45,11 +83,16 @@ public final class YangParserConfiguration implements Immutable { @Override public YangParserConfiguration build() { - return new YangParserConfiguration(parserMode); + return new YangParserConfiguration(parserMode, retainDeclarationReferences); + } + + public Builder parserMode(final StatementParserMode newParserMode) { + this.parserMode = requireNonNull(newParserMode); + return this; } - public Builder setParserMode(final StatementParserMode parserMode) { - this.parserMode = requireNonNull(parserMode); + public Builder retainDeclarationReferences(final boolean newRetainDeclarationReferences) { + this.retainDeclarationReferences = newRetainDeclarationReferences; return this; } } diff --git a/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserFactory.java b/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserFactory.java index 78f827b097..9e6bab8b24 100644 --- a/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserFactory.java +++ b/yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserFactory.java @@ -55,6 +55,6 @@ public interface YangParserFactory { */ @Deprecated(forRemoval = true) default @NonNull YangParser createParser(final StatementParserMode parserMode) { - return createParser(YangParserConfiguration.builder().setParserMode(parserMode).build()); + return createParser(YangParserConfiguration.builder().parserMode(parserMode).build()); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java index ff991b13a5..9ffa9a1936 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java @@ -30,6 +30,7 @@ import org.opendaylight.yangtools.rfc7952.parser.AnnotationStatementSupport; import org.opendaylight.yangtools.rfc8040.parser.YangDataArgumentNamespace; import org.opendaylight.yangtools.rfc8040.parser.YangDataStatementSupport; import org.opendaylight.yangtools.rfc8528.parser.MountPointStatementSupport; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.CustomCrossSourceStatementReactorBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; @@ -77,7 +78,19 @@ public final class DefaultReactors { * @return A populated CrossSourceStatementReactor builder. */ public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() { - return addExtensions(RFC7950Reactors.defaultReactorBuilder()); + return defaultReactorBuilder(YangParserConfiguration.DEFAULT); + } + + /** + * Return a baseline CrossSourceStatementReactor {@link Builder}. The builder is initialized to the equivalent + * of the reactor returned via {@link #defaultReactor()}, but can be further customized before use. + * + * @param config parser configuration + * @return A populated CrossSourceStatementReactor builder. + */ + public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( + final YangParserConfiguration config) { + return addExtensions(RFC7950Reactors.defaultReactorBuilder(config), config); } /** @@ -88,53 +101,67 @@ public final class DefaultReactors { */ public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( final YangXPathParserFactory xpathFactory) { - return addExtensions(RFC7950Reactors.defaultReactorBuilder(xpathFactory)); + return defaultReactorBuilder(xpathFactory, YangParserConfiguration.DEFAULT); + } + + /** + * Return a baseline CrossSourceStatementReactor {@link Builder}. The builder is initialized to the equivalent + * of the reactor returned via {@link #defaultReactor()}, but can be further customized before use. + * + * @param config parser configuration + * @return A populated CrossSourceStatementReactor builder. + */ + public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( + final YangXPathParserFactory xpathFactory, final YangParserConfiguration config) { + return addExtensions(RFC7950Reactors.defaultReactorBuilder(xpathFactory, config), config); } private static @NonNull CustomCrossSourceStatementReactorBuilder addExtensions( - final @NonNull CustomCrossSourceStatementReactorBuilder builder) { + final @NonNull CustomCrossSourceStatementReactorBuilder builder, final YangParserConfiguration config) { return builder // OpenDaylight extensions - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AugmentIdentifierStatementSupport.INSTANCE) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ContextInstanceStatementSupport.INSTANCE) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ContextReferenceStatementSupport.INSTANCE) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, InstanceTargetStatementSupport.INSTANCE) .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - RpcContextReferenceStatementSupport.INSTANCE) + new AugmentIdentifierStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new ContextInstanceStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new ContextReferenceStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new InstanceTargetStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new RpcContextReferenceStatementSupport(config)) // RFC6241 get-filter-element-attributes support .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - GetFilterElementAttributesStatementSupport.getInstance()) + new GetFilterElementAttributesStatementSupport(config)) // RFC6536 default-deny-{all,write} support .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - DefaultDenyAllStatementSupport.getInstance()) + new DefaultDenyAllStatementSupport(config)) .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - DefaultDenyWriteStatementSupport.getInstance()) + new DefaultDenyWriteStatementSupport(config)) // RFC6643 extensions - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DisplayHintStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MaxAccessStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, DefValStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ImpliedStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AliasStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, OidStatementSupport.getInstance()) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, SubIdStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new DisplayHintStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new MaxAccessStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new DefValStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new ImpliedStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new AliasStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new OidStatementSupport(config)) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new SubIdStatementSupport(config)) // RFC7952 annotation support - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, AnnotationStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new AnnotationStatementSupport(config)) // RFC8040 yang-data support .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataArgumentNamespace.BEHAVIOUR) - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, YangDataStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new YangDataStatementSupport(config)) // RFC8528 yang-data support - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, MountPointStatementSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, new MountPointStatementSupport(config)) // OpenConfig extensions support (except openconfig-version) .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - EncryptedValueStatementSupport.getInstance()) + new EncryptedValueStatementSupport(config)) .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, - HashedValueStatementSupport.getInstance()); + new HashedValueStatementSupport(config)); } } diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java index 6f393cb99b..03ec36c79a 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java @@ -8,11 +8,13 @@ package org.opendaylight.yangtools.yang.parser.impl; import static com.google.common.base.Preconditions.checkArgument; -import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import java.util.Collection; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.function.Function; import javax.inject.Inject; import javax.inject.Singleton; import org.eclipse.jdt.annotation.NonNull; @@ -36,36 +38,25 @@ import org.osgi.service.component.annotations.Reference; @Component(immediate = true) public final class YangParserFactoryImpl implements YangParserFactory { private static final List SUPPORTED_MODES = List.of( - StatementParserMode.DEFAULT_MODE, - StatementParserMode.SEMVER_MODE); + StatementParserMode.DEFAULT_MODE, StatementParserMode.SEMVER_MODE); - private final CrossSourceStatementReactor reactor; - - private YangParserFactoryImpl(final @NonNull CrossSourceStatementReactor reactor) { - this.reactor = requireNonNull(reactor); - } + private final ConcurrentMap reactors = + new ConcurrentHashMap<>(2); + private final Function reactorFactory; /** * Construct a new {@link YangParserFactory} backed by {@link DefaultReactors#defaultReactor()}. */ public YangParserFactoryImpl() { - this(DefaultReactors.defaultReactor()); + reactorFactory = config -> DefaultReactors.defaultReactorBuilder(config).build(); + // Make sure default reactor is available + reactorFactory.apply(YangParserConfiguration.DEFAULT); } @Inject @Activate public YangParserFactoryImpl(final @Reference YangXPathParserFactory xpathFactory) { - this(DefaultReactors.defaultReactorBuilder(xpathFactory).build()); - } - - /** - * Construct a new {@link YangParserFactory} backed by specified reactor. - * - * @param reactor Backing reactor - * @return A new YangParserFactory - */ - public static @NonNull YangParserFactory forReactor(final @NonNull CrossSourceStatementReactor reactor) { - return new YangParserFactoryImpl(reactor); + reactorFactory = config -> DefaultReactors.defaultReactorBuilder(xpathFactory, config).build(); } @Override @@ -77,6 +68,8 @@ public final class YangParserFactoryImpl implements YangParserFactory { public @NonNull YangParser createParser(final YangParserConfiguration configuration) { final StatementParserMode mode = configuration.parserMode(); checkArgument(SUPPORTED_MODES.contains(mode), "Unsupported parser mode %s", mode); + + final CrossSourceStatementReactor reactor = reactors.computeIfAbsent(configuration, reactorFactory); return new YangParserImpl(reactor.newBuild(mode)); } } diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index c997cb1221..5d57aa003d 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -85,6 +85,10 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist private final ImmutableMap supports; private final Set sources = new HashSet<>(); private final ImmutableSet supportedVersions; + + // FIXME: 7.0.0: this flag should really be passed to {Import,Module}StatementSupport's bootstrap to wire the + // appropriate behaviour. That requires a change in StatementSupport lifecycle, as statement supports + // would no longer be stateless singletons. private final boolean enabledSemanticVersions; private Set libSources = new HashSet<>(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java index eb51f196e5..88ffeda0cc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionEffectiv import org.opendaylight.yangtools.openconfig.model.api.OpenConfigVersionStatement; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; @@ -23,16 +24,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class OpenConfigVersionSupport extends AbstractStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - OpenConfigStatements.OPENCONFIG_VERSION).build(); - private static final OpenConfigVersionSupport INSTANCE = new OpenConfigVersionSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(OpenConfigStatements.OPENCONFIG_VERSION).build(); - private OpenConfigVersionSupport() { - super(OpenConfigStatements.OPENCONFIG_VERSION, StatementPolicy.reject()); - } - - public static OpenConfigVersionSupport getInstance() { - return INSTANCE; + public OpenConfigVersionSupport(final YangParserConfiguration config) { + super(OpenConfigStatements.OPENCONFIG_VERSION, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java index 5cf46cc6ed..b3fb09280c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java @@ -15,6 +15,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.YangVersion; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.openconfig.stmt.OpenConfigVersionSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ModuleQNameToPrefix; import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.YangNamespaceContextNamespace; @@ -147,26 +148,31 @@ public final class RFC7950Reactors { private static final ImmutableSet SUPPORTED_VERSIONS = Sets.immutableEnumSet(VERSION_1, VERSION_1_1); private static final StatementSupportBundle INIT_BUNDLE = StatementSupportBundle.builder(SUPPORTED_VERSIONS) - .addSupport(ValidationBundlesNamespace.BEHAVIOUR) - .addSupport(SupportedFeaturesNamespace.BEHAVIOUR) - .addSupport(ModulesDeviatedByModules.BEHAVIOUR) - .build(); + .addSupport(ValidationBundlesNamespace.BEHAVIOUR) + .addSupport(SupportedFeaturesNamespace.BEHAVIOUR) + .addSupport(ModulesDeviatedByModules.BEHAVIOUR) + .build(); - private static final StatementSupportBundle PRE_LINKAGE_BUNDLE = StatementSupportBundle.derivedFrom(INIT_BUNDLE) - .addVersionSpecificSupport(VERSION_1, ModuleStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, ModuleStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, SubmoduleStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, SubmoduleStatementSupport.rfc7950Instance()) - .addSupport(NamespaceStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, ImportStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, ImportStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, IncludeStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, IncludeStatementSupport.rfc7950Instance()) - .addSupport(BelongsToStatementSupport.getInstance()) - .addSupport(PrefixStatementSupport.getInstance()) - .addSupport(YangVersionStatementSupport.getInstance()) - .addSupport(RevisionStatementSupport.getInstance()) - .addSupport(RevisionDateStatementSupport.getInstance()) + private RFC7950Reactors() { + // Hidden on purpose + } + + private static StatementSupportBundle preLinkageBundle(final YangParserConfiguration config) { + return StatementSupportBundle.derivedFrom(INIT_BUNDLE) + .addVersionSpecificSupport(VERSION_1, ModuleStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, ModuleStatementSupport.rfc7950Instance(config)) + .addVersionSpecificSupport(VERSION_1, SubmoduleStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, SubmoduleStatementSupport.rfc7950Instance(config)) + .addSupport(new NamespaceStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, ImportStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, ImportStatementSupport.rfc7950Instance(config)) + .addVersionSpecificSupport(VERSION_1, IncludeStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, IncludeStatementSupport.rfc7950Instance(config)) + .addSupport(new BelongsToStatementSupport(config)) + .addSupport(new PrefixStatementSupport(config)) + .addSupport(new YangVersionStatementSupport(config)) + .addSupport(new RevisionStatementSupport(config)) + .addSupport(new RevisionDateStatementSupport(config)) .addSupport(ModuleNameToNamespace.BEHAVIOUR) .addSupport(PreLinkageModuleNamespace.BEHAVIOUR) .addSupport(ImpPrefixToNamespace.BEHAVIOUR) @@ -174,13 +180,15 @@ public final class RFC7950Reactors { .addSupport(QNameModuleNamespace.BEHAVIOUR) .addSupport(ImportedVersionNamespace.BEHAVIOUR) .build(); + } - private static final StatementSupportBundle LINKAGE_BUNDLE = StatementSupportBundle - .derivedFrom(PRE_LINKAGE_BUNDLE) - .addSupport(DescriptionStatementSupport.getInstance()) - .addSupport(ReferenceStatementSupport.getInstance()) - .addSupport(ContactStatementSupport.getInstance()) - .addSupport(OrganizationStatementSupport.getInstance()) + private static StatementSupportBundle linkageBundle(final StatementSupportBundle preLinkageBundle, + final YangParserConfiguration config) { + return StatementSupportBundle.derivedFrom(preLinkageBundle) + .addSupport(new DescriptionStatementSupport(config)) + .addSupport(new ReferenceStatementSupport(config)) + .addSupport(new ContactStatementSupport(config)) + .addSupport(new OrganizationStatementSupport(config)) .addSupport(ModuleNamespace.BEHAVIOUR) .addSupport(ModuleNamespaceForBelongsTo.BEHAVIOUR) .addSupport(SubmoduleNamespace.BEHAVIOUR) @@ -198,62 +206,65 @@ public final class RFC7950Reactors { .addSupport(BelongsToModuleContext.BEHAVIOUR) .addSupport(BelongsToPrefixToModuleName.BEHAVIOUR) .build(); + } - private static final StatementSupportBundle STMT_DEF_BUNDLE = StatementSupportBundle - .derivedFrom(LINKAGE_BUNDLE) - .addSupport(YinElementStatementSupport.getInstance()) - .addSupport(ArgumentStatementSupport.getInstance()) - .addSupport(ExtensionStatementSupport.getInstance()) + private static StatementSupportBundle stmtDefBundle(final StatementSupportBundle linkageBundle, + final YangParserConfiguration config) { + final InputStatementSupport rfc6020input = InputStatementSupport.rfc6020Instance(config); + final InputStatementSupport rfc7950input = InputStatementSupport.rfc7950Instance(config); + final OutputStatementSupport rfc6020output = OutputStatementSupport.rfc6020Instance(config); + final OutputStatementSupport rfc7950output = OutputStatementSupport.rfc7950Instance(config); + + return StatementSupportBundle.derivedFrom(linkageBundle) + .addSupport(new YinElementStatementSupport(config)) + .addSupport(new ArgumentStatementSupport(config)) + .addSupport(new ExtensionStatementSupport(config)) .addSupport(SchemaTreeNamespace.getInstance()) .addSupport(ExtensionNamespace.BEHAVIOUR) - .addSupport(TypedefStatementSupport.getInstance()) + .addSupport(new TypedefStatementSupport(config)) .addSupport(TypeNamespace.BEHAVIOUR) - .addVersionSpecificSupport(VERSION_1, IdentityStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, IdentityStatementSupport.rfc7950Instance()) + .addVersionSpecificSupport(VERSION_1, IdentityStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, IdentityStatementSupport.rfc7950Instance(config)) .addSupport(IdentityNamespace.BEHAVIOUR) - .addSupport(DefaultStatementSupport.getInstance()) - .addSupport(StatusStatementSupport.getInstance()) + .addSupport(new DefaultStatementSupport(config)) + .addSupport(new StatusStatementSupport(config)) .addSupport(BaseTypeNamespace.BEHAVIOUR) - .addVersionSpecificSupport(VERSION_1, TypeStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, TypeStatementRFC7950Support.getInstance()) - .addSupport(UnitsStatementSupport.getInstance()) - .addSupport(RequireInstanceStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, BitStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, BitStatementSupport.rfc7950Instance()) - .addSupport(PathStatementSupport.strictInstance()) - .addVersionSpecificSupport(VERSION_1, EnumStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, EnumStatementSupport.rfc7950Instance()) - .addSupport(LengthStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, PatternStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, PatternStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1_1, ModifierStatementSupport.getInstance()) - .addSupport(RangeStatementSupport.getInstance()) - .addSupport(KeyStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, ContainerStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, ContainerStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, GroupingStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, GroupingStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, ListStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, ListStatementSupport.rfc7950Instance()) + .addVersionSpecificSupport(VERSION_1, new TypeStatementRFC6020Support(config)) + .addVersionSpecificSupport(VERSION_1_1, new TypeStatementRFC7950Support(config)) + .addSupport(new UnitsStatementSupport(config)) + .addSupport(new RequireInstanceStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, BitStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, BitStatementSupport.rfc7950Instance(config)) + .addSupport(PathStatementSupport.strictInstance(config)) + .addVersionSpecificSupport(VERSION_1, EnumStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, EnumStatementSupport.rfc7950Instance(config)) + .addSupport(new LengthStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, PatternStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, PatternStatementSupport.rfc7950Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, new ModifierStatementSupport(config)) + .addSupport(new RangeStatementSupport(config)) + .addSupport(new KeyStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, ContainerStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, ContainerStatementSupport.rfc7950Instance(config)) + .addVersionSpecificSupport(VERSION_1, GroupingStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, GroupingStatementSupport.rfc7950Instance(config)) + .addVersionSpecificSupport(VERSION_1, ListStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, ListStatementSupport.rfc7950Instance(config)) .addSupport(ConfigListWarningNamespace.BEHAVIOUR) - .addSupport(UniqueStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, ActionStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, RpcStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, RpcStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, InputStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, InputStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, OutputStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, OutputStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, NotificationStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, NotificationStatementRFC7950Support.getInstance()) - .addSupport(FractionDigitsStatementSupport.getInstance()) - .addSupport(BaseStatementSupport.getInstance()) + .addSupport(new UniqueStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1_1, new ActionStatementSupport(config, rfc7950input, rfc7950output)) + .addVersionSpecificSupport(VERSION_1, new RpcStatementSupport(config, rfc6020input, rfc6020output)) + .addVersionSpecificSupport(VERSION_1_1, new RpcStatementSupport(config, rfc7950input, rfc7950output)) + .addVersionSpecificSupport(VERSION_1, rfc6020input) + .addVersionSpecificSupport(VERSION_1_1, rfc7950input) + .addVersionSpecificSupport(VERSION_1, rfc6020output) + .addVersionSpecificSupport(VERSION_1_1, rfc7950output) + .addVersionSpecificSupport(VERSION_1, new NotificationStatementRFC6020Support(config)) + .addVersionSpecificSupport(VERSION_1_1, new NotificationStatementRFC7950Support(config)) + .addSupport(new FractionDigitsStatementSupport(config)) + .addSupport(new BaseStatementSupport(config)) .addSupport(StatementDefinitionNamespace.BEHAVIOUR) .build(); - - - private RFC7950Reactors() { - // Hidden on purpose } /** @@ -274,19 +285,29 @@ public final class RFC7950Reactors { * @return A new {@link CustomCrossSourceStatementReactorBuilder}. */ public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder() { - return addExtensions(vanillaReactorBuilder()); + return defaultReactorBuilder(YangParserConfiguration.DEFAULT); + } + + public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( + final YangParserConfiguration config) { + return addExtensions(vanillaReactorBuilder(config), config); } public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( final YangXPathParserFactory xpathFactory) { - return addExtensions(vanillaReactorBuilder(xpathFactory)); + return defaultReactorBuilder(xpathFactory, YangParserConfiguration.DEFAULT); + } + + public static @NonNull CustomCrossSourceStatementReactorBuilder defaultReactorBuilder( + final YangXPathParserFactory xpathFactory, final YangParserConfiguration config) { + return addExtensions(vanillaReactorBuilder(xpathFactory, config), config); } private static @NonNull CustomCrossSourceStatementReactorBuilder addExtensions( - final @NonNull CustomCrossSourceStatementReactorBuilder builder) { + final @NonNull CustomCrossSourceStatementReactorBuilder builder, final YangParserConfiguration config) { return builder // Semantic version support - .addStatementSupport(ModelProcessingPhase.SOURCE_LINKAGE, OpenConfigVersionSupport.getInstance()) + .addStatementSupport(ModelProcessingPhase.SOURCE_LINKAGE, new OpenConfigVersionSupport(config)) .addNamespaceSupport(ModelProcessingPhase.SOURCE_LINKAGE, SemanticVersionNamespace.BEHAVIOUR) .addNamespaceSupport(ModelProcessingPhase.SOURCE_LINKAGE, SemanticVersionModuleNamespace.BEHAVIOUR) .addNamespaceSupport(ModelProcessingPhase.SOURCE_LINKAGE, @@ -311,22 +332,37 @@ public final class RFC7950Reactors { * @return A new {@link CustomCrossSourceStatementReactorBuilder}. */ public static @NonNull CustomCrossSourceStatementReactorBuilder vanillaReactorBuilder() { - return vanillaReactorBuilder(ServiceLoaderState.XPath.INSTANCE); + return vanillaReactorBuilder(YangParserConfiguration.DEFAULT); + } + + public static @NonNull CustomCrossSourceStatementReactorBuilder vanillaReactorBuilder( + final YangParserConfiguration config) { + return vanillaReactorBuilder(ServiceLoaderState.XPath.INSTANCE, config); } public static @NonNull CustomCrossSourceStatementReactorBuilder vanillaReactorBuilder( final @NonNull YangXPathParserFactory xpathFactory) { - return vanillaReactorBuilder(new XPathSupport(xpathFactory)); + return vanillaReactorBuilder(xpathFactory, YangParserConfiguration.DEFAULT); + } + + public static @NonNull CustomCrossSourceStatementReactorBuilder vanillaReactorBuilder( + final @NonNull YangXPathParserFactory xpathFactory, final YangParserConfiguration config) { + return vanillaReactorBuilder(new XPathSupport(xpathFactory), config); } private static @NonNull CustomCrossSourceStatementReactorBuilder vanillaReactorBuilder( - final @NonNull XPathSupport xpathSupport) { - final StatementSupportBundle fullDeclarationBundle = fullDeclarationBundle(xpathSupport); + final @NonNull XPathSupport xpathSupport, final YangParserConfiguration config) { + final StatementSupportBundle preLinkageBundle = preLinkageBundle(config); + final StatementSupportBundle linkageBundle = linkageBundle(preLinkageBundle, config); + final StatementSupportBundle stmtDefBundle = stmtDefBundle(linkageBundle, config); + final StatementSupportBundle fullDeclarationBundle = + fullDeclarationBundle(stmtDefBundle, xpathSupport, config); + return new CustomCrossSourceStatementReactorBuilder(SUPPORTED_VERSIONS) .addAllSupports(ModelProcessingPhase.INIT, INIT_BUNDLE) - .addAllSupports(ModelProcessingPhase.SOURCE_PRE_LINKAGE, PRE_LINKAGE_BUNDLE) - .addAllSupports(ModelProcessingPhase.SOURCE_LINKAGE, LINKAGE_BUNDLE) - .addAllSupports(ModelProcessingPhase.STATEMENT_DEFINITION, STMT_DEF_BUNDLE) + .addAllSupports(ModelProcessingPhase.SOURCE_PRE_LINKAGE, preLinkageBundle) + .addAllSupports(ModelProcessingPhase.SOURCE_LINKAGE, linkageBundle) + .addAllSupports(ModelProcessingPhase.STATEMENT_DEFINITION, stmtDefBundle) .addAllSupports(ModelProcessingPhase.FULL_DECLARATION, fullDeclarationBundle) .addAllSupports(ModelProcessingPhase.EFFECTIVE_MODEL, fullDeclarationBundle) .addValidationBundle(ValidationBundleType.SUPPORTED_REFINE_SUBSTATEMENTS, @@ -342,46 +378,49 @@ public final class RFC7950Reactors { YangValidationBundles.SUPPORTED_DATA_NODES); } - private static @NonNull StatementSupportBundle fullDeclarationBundle(final XPathSupport xpathSupport) { - return StatementSupportBundle - .derivedFrom(STMT_DEF_BUNDLE) - .addSupport(LeafStatementSupport.getInstance()) - .addSupport(ConfigStatementSupport.getInstance()) - .addSupport(DeviationStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, DeviateStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, DeviateStatementRFC7950Support.getInstance()) - .addVersionSpecificSupport(VERSION_1, ChoiceStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, ChoiceStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, CaseStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, CaseStatementSupport.rfc7950Instance()) - .addSupport(MustStatementSupport.createInstance(xpathSupport)) - .addSupport(MandatoryStatementSupport.getInstance()) - .addSupport(AnyxmlStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, AnydataStatementSupport.getInstance()) + private static @NonNull StatementSupportBundle fullDeclarationBundle(final StatementSupportBundle stmtDefBundle, + final XPathSupport xpathSupport, final YangParserConfiguration config) { + final CaseStatementSupport rfc6020case = CaseStatementSupport.rfc6020Instance(config); + final CaseStatementSupport rfc7950case = CaseStatementSupport.rfc7950Instance(config); + + return StatementSupportBundle.derivedFrom(stmtDefBundle) + .addSupport(new LeafStatementSupport(config)) + .addSupport(new ConfigStatementSupport(config)) + .addSupport(new DeviationStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, new DeviateStatementRFC6020Support(config)) + .addVersionSpecificSupport(VERSION_1_1, new DeviateStatementRFC7950Support(config)) + .addVersionSpecificSupport(VERSION_1, ChoiceStatementSupport.rfc6020Instance(config, rfc6020case)) + .addVersionSpecificSupport(VERSION_1_1, ChoiceStatementSupport.rfc7950Instance(config, rfc7950case)) + .addVersionSpecificSupport(VERSION_1, rfc6020case) + .addVersionSpecificSupport(VERSION_1_1, rfc7950case) + .addSupport(new MustStatementSupport(xpathSupport, config)) + .addSupport(new MandatoryStatementSupport(config)) + .addSupport(new AnyxmlStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1_1, new AnydataStatementSupport(config)) .addSupport(FeatureNamespace.BEHAVIOUR) - .addVersionSpecificSupport(VERSION_1, IfFeatureStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, IfFeatureStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, new IfFeatureStatementRFC6020Support(config)) + .addVersionSpecificSupport(VERSION_1_1, new IfFeatureStatementRFC7950Support(config)) .addSupport(GroupingNamespace.BEHAVIOUR) .addSupport(SourceGroupingNamespace.BEHAVIOUR) - .addSupport(UsesStatementSupport.getInstance()) - .addSupport(ErrorMessageStatementSupport.getInstance()) - .addSupport(ErrorAppTagStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, LeafListStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, LeafListStatementSupport.rfc7950Instance()) - .addSupport(PresenceStatementSupport.getInstance()) - .addSupport(MaxElementsStatementSupport.getInstance()) - .addSupport(MinElementsStatementSupport.getInstance()) - .addSupport(OrderedByStatementSupport.getInstance()) - .addSupport(WhenStatementSupport.createInstance(xpathSupport)) + .addSupport(new UsesStatementSupport(config)) + .addSupport(new ErrorMessageStatementSupport(config)) + .addSupport(new ErrorAppTagStatementSupport(config)) + .addVersionSpecificSupport(VERSION_1, LeafListStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, LeafListStatementSupport.rfc7950Instance(config)) + .addSupport(new PresenceStatementSupport(config)) + .addSupport(new MaxElementsStatementSupport(config)) + .addSupport(new MinElementsStatementSupport(config)) + .addSupport(new OrderedByStatementSupport(config)) + .addSupport(new WhenStatementSupport(xpathSupport, config)) .addSupport(AugmentImplicitHandlingNamespace.BEHAVIOUR) - .addVersionSpecificSupport(VERSION_1, AugmentStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, AugmentStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, new AugmentStatementRFC6020Support(config)) + .addVersionSpecificSupport(VERSION_1_1, new AugmentStatementRFC7950Support(config)) .addSupport(RefineTargetNamespace.BEHAVIOUR) - .addVersionSpecificSupport(VERSION_1, RefineStatementSupport.rfc6020Instance()) - .addVersionSpecificSupport(VERSION_1_1, RefineStatementSupport.rfc7950Instance()) - .addSupport(FeatureStatementSupport.getInstance()) - .addSupport(PositionStatementSupport.getInstance()) - .addSupport(ValueStatementSupport.getInstance()) + .addVersionSpecificSupport(VERSION_1, RefineStatementSupport.rfc6020Instance(config)) + .addVersionSpecificSupport(VERSION_1_1, RefineStatementSupport.rfc7950Instance(config)) + .addSupport(new FeatureStatementSupport(config)) + .addSupport(new PositionStatementSupport(config)) + .addSupport(new ValueStatementSupport(config)) .addSupport(YangNamespaceContextNamespace.BEHAVIOUR) .build(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java index 38f54d281c..ee7050b79e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absol import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -50,13 +51,13 @@ abstract class AbstractAugmentStatementSupport private static final Pattern PATH_REL_PATTERN1 = Pattern.compile("\\.\\.?\\s*/(.+)"); private static final Pattern PATH_REL_PATTERN2 = Pattern.compile("//.*"); - AbstractAugmentStatementSupport() { + AbstractAugmentStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.AUGMENT, StatementPolicy.copyDeclared( (copy, current, substatements) -> copy.getArgument().equals(current.getArgument()) && copy.moduleName().getModule().equals(current.moduleName().getModule()) && Objects.equals(copy.original(), current.original()) - )); + ), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java index f787c726ad..0916cf0187 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -28,14 +29,9 @@ public final class AugmentStatementRFC6020Support extends AbstractAugmentStateme .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) .build(); - private static final AugmentStatementRFC6020Support INSTANCE = new AugmentStatementRFC6020Support(); - private AugmentStatementRFC6020Support() { - // Hidden - } - - public static AugmentStatementRFC6020Support getInstance() { - return INSTANCE; + public AugmentStatementRFC6020Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java index 2d397c7e64..27bd038873 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java @@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -36,14 +37,9 @@ public final class AugmentStatementRFC7950Support extends AbstractAugmentStateme .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) .build(); - private static final AugmentStatementRFC7950Support INSTANCE = new AugmentStatementRFC7950Support(); - private AugmentStatementRFC7950Support() { - // Hidden - } - - public static AugmentStatementRFC7950Support getInstance() { - return INSTANCE; + public AugmentStatementRFC7950Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java index 0c7edc78b4..94794464fd 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java @@ -28,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.DeviateEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviateStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; @@ -101,8 +102,8 @@ abstract class AbstractDeviateStatementSupport private static final ImmutableSet IMPLICIT_STATEMENTS = ImmutableSet.of(YangStmtMapping.CONFIG, YangStmtMapping.MANDATORY, YangStmtMapping.MAX_ELEMENTS, YangStmtMapping.MIN_ELEMENTS); - AbstractDeviateStatementSupport() { - super(YangStmtMapping.DEVIATE, StatementPolicy.contextIndependent()); + AbstractDeviateStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.DEVIATE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java index c025ee374b..4e3f0f0f84 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java @@ -7,14 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate; -public final class DeviateStatementRFC6020Support extends AbstractDeviateStatementSupport { - private static final DeviateStatementRFC6020Support INSTANCE = new DeviateStatementRFC6020Support(); - - private DeviateStatementRFC6020Support() { - // Hidden - } +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; - public static DeviateStatementRFC6020Support getInstance() { - return INSTANCE; +public final class DeviateStatementRFC6020Support extends AbstractDeviateStatementSupport { + public DeviateStatementRFC6020Support(final YangParserConfiguration config) { + super(config); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java index 91f730f075..2b44c3cf65 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate; import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.model.api.DeviateKind; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; /** @@ -37,14 +38,9 @@ public final class DeviateStatementRFC7950Support extends AbstractDeviateStateme .addAny(YangStmtMapping.UNIQUE) .addOptional(YangStmtMapping.UNITS) .build(); - private static final DeviateStatementRFC7950Support INSTANCE = new DeviateStatementRFC7950Support(); - private DeviateStatementRFC7950Support() { - // Hidden - } - - public static DeviateStatementRFC7950Support getInstance() { - return INSTANCE; + public DeviateStatementRFC7950Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java index a5b925706e..88d52358f0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.yang.common.QName; @@ -17,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace; @@ -30,21 +33,19 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ExtensionStatementSupport extends AbstractQNameStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .EXTENSION) - .addOptional(YangStmtMapping.ARGUMENT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .build(); - private static final ExtensionStatementSupport INSTANCE = new ExtensionStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.EXTENSION) + .addOptional(YangStmtMapping.ARGUMENT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .build(); - private ExtensionStatementSupport() { - super(YangStmtMapping.EXTENSION, StatementPolicy.reject()); - } + private final YangParserConfiguration config; - public static ExtensionStatementSupport getInstance() { - return INSTANCE; + public ExtensionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.EXTENSION, StatementPolicy.reject(), config); + this.config = requireNonNull(config); } @Override @@ -71,7 +72,8 @@ public final class ExtensionStatementSupport stmt.addToNs(StatementDefinitionNamespace.class, stmt.argument(), new UnrecognizedStatementSupport(new ModelDefinedStatementDefinition(stmt.getArgument(), - argument != null ? argument.argument() : null, yinElement != null && yinElement.getArgument()))); + argument != null ? argument.argument() : null, yinElement != null && yinElement.getArgument()), + config)); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java index f669707ce1..fcee2e5891 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension; +import static java.util.Objects.requireNonNull; + import com.google.common.collect.ImmutableList; import java.util.Optional; import org.opendaylight.yangtools.yang.common.QName; @@ -15,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; @@ -26,10 +29,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; final class UnrecognizedStatementSupport extends AbstractStatementSupport implements OverrideChildStatementSupport { - UnrecognizedStatementSupport(final StatementDefinition publicDefinition) { + private final YangParserConfiguration config; + + UnrecognizedStatementSupport(final StatementDefinition publicDefinition, final YangParserConfiguration config) { // We have no idea about the statement's semantics, hence there should be noone interested in its semantics. // Nevertheless it may be of interest for various hacks to understand there was an extension involved. - super(publicDefinition, StatementPolicy.exactReplica()); + super(publicDefinition, StatementPolicy.exactReplica(), config); + this.config = requireNonNull(config); } @Override @@ -54,7 +60,7 @@ final class UnrecognizedStatementSupport } else { def = new ModelDefinedStatementDefinition(statementName); } - return new UnrecognizedStatementSupport(def); + return new UnrecognizedStatementSupport(def, config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/AbstractIfFeatureStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/AbstractIfFeatureStatementSupport.java index a690334d3b..6d23b13deb 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/AbstractIfFeatureStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/AbstractIfFeatureStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureExpr; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.FeatureNamespace; @@ -46,8 +47,8 @@ abstract class AbstractIfFeatureStatementSupport YangStmtMapping.IF_FEATURE) .build(); - AbstractIfFeatureStatementSupport() { - super(YangStmtMapping.IF_FEATURE, StatementPolicy.contextIndependent()); + AbstractIfFeatureStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.IF_FEATURE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC6020Support.java index 267030f82a..c4c7c21f6e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC6020Support.java @@ -8,18 +8,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureExpr; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; public final class IfFeatureStatementRFC6020Support extends AbstractIfFeatureStatementSupport { - private static final IfFeatureStatementRFC6020Support INSTANCE = new IfFeatureStatementRFC6020Support(); - - private IfFeatureStatementRFC6020Support() { - // Hidden on purpose - } - - public static IfFeatureStatementRFC6020Support getInstance() { - return INSTANCE; + public IfFeatureStatementRFC6020Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC7950Support.java index 16543412a6..f923a3d837 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC7950Support.java @@ -8,17 +8,12 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureExpr; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; public final class IfFeatureStatementRFC7950Support extends AbstractIfFeatureStatementSupport { - private static final IfFeatureStatementRFC7950Support INSTANCE = new IfFeatureStatementRFC7950Support(); - - private IfFeatureStatementRFC7950Support() { - // Hidden on purpose - } - - public static IfFeatureStatementRFC7950Support getInstance() { - return INSTANCE; + public IfFeatureStatementRFC7950Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java index 062c99438d..b6056b0fb4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java @@ -26,6 +26,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; 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; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace; @@ -46,34 +47,34 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class ImportStatementSupport extends AbstractStringStatementSupport { - private static final @NonNull ImportStatementSupport RFC6020_INSTANCE = new ImportStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.IMPORT) .addMandatory(YangStmtMapping.PREFIX) .addOptional(YangStmtMapping.REVISION_DATE) .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) - .build()); - private static final @NonNull ImportStatementSupport RFC7950_INSTANCE = new ImportStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.IMPORT) .addMandatory(YangStmtMapping.PREFIX) .addOptional(YangStmtMapping.REVISION_DATE) .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) - .build()); + .build(); private final SubstatementValidator validator; - private ImportStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.IMPORT, StatementPolicy.reject()); + private ImportStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.IMPORT, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull ImportStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull ImportStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new ImportStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull ImportStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull ImportStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new ImportStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java index 58c31c750c..0f8c0db26f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java @@ -29,6 +29,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; @@ -41,7 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class LeafListStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final @NonNull LeafListStatementSupport RFC6020_INSTANCE = new LeafListStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.LEAF_LIST) .addOptional(YangStmtMapping.CONFIG) .addOptional(YangStmtMapping.DESCRIPTION) @@ -55,10 +56,9 @@ public final class LeafListStatementSupport .addMandatory(YangStmtMapping.TYPE) .addOptional(YangStmtMapping.UNITS) .addOptional(YangStmtMapping.WHEN) - .build()); - private static final @NonNull LeafListStatementSupport RFC7950_INSTANCE = new LeafListStatementSupport( - SubstatementValidator.builder(YangStmtMapping - .LEAF_LIST) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.LEAF_LIST) .addOptional(YangStmtMapping.CONFIG) .addAny(YangStmtMapping.DEFAULT) .addOptional(YangStmtMapping.DESCRIPTION) @@ -72,21 +72,21 @@ public final class LeafListStatementSupport .addMandatory(YangStmtMapping.TYPE) .addOptional(YangStmtMapping.UNITS) .addOptional(YangStmtMapping.WHEN) - .build()); + .build(); private final SubstatementValidator validator; - private LeafListStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.LEAF_LIST, instantiatedPolicy()); + private LeafListStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.LEAF_LIST, instantiatedPolicy(), config); this.validator = requireNonNull(validator); } - public static @NonNull LeafListStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull LeafListStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new LeafListStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull LeafListStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull LeafListStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new LeafListStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java index 629b500ece..613dcf52cb 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java @@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; @@ -61,71 +62,69 @@ public final class ListStatementSupport private static final ImmutableSet UNINSTANTIATED_DATATREE_STATEMENTS = ImmutableSet.of( YangStmtMapping.GROUPING, YangStmtMapping.NOTIFICATION, YangStmtMapping.INPUT, YangStmtMapping.OUTPUT); - private static final @NonNull ListStatementSupport RFC6020_INSTANCE = new ListStatementSupport( - SubstatementValidator.builder(YangStmtMapping.LIST) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.KEY) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.UNIQUE) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build()); - private static final @NonNull ListStatementSupport RFC7950_INSTANCE = new ListStatementSupport( - SubstatementValidator.builder(YangStmtMapping.LIST) - .addAny(YangStmtMapping.ACTION) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.KEY) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.UNIQUE) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build()); + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.LIST) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.KEY) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.UNIQUE) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.LIST) + .addAny(YangStmtMapping.ACTION) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.KEY) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.UNIQUE) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build(); private final SubstatementValidator validator; - ListStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.LIST, instantiatedPolicy()); + ListStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.LIST, instantiatedPolicy(), config); this.validator = requireNonNull(validator); } - public static @NonNull ListStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull ListStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new ListStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull ListStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull ListStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new ListStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractImplicitStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractImplicitStatementSupport.java index c1e599e6b8..c2d7c6edba 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractImplicitStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractImplicitStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractSchemaTreeStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @@ -28,8 +29,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; abstract class AbstractImplicitStatementSupport, E extends SchemaTreeEffectiveStatement> extends AbstractSchemaTreeStatementSupport { AbstractImplicitStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractOperationContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractOperationContainerStatementSupport.java index 38849ebce9..4c27eb7c56 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractOperationContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractOperationContainerStatementSupport.java @@ -18,6 +18,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; @@ -37,8 +38,8 @@ abstract class AbstractOperationContainerStatementSupport createArgument; AbstractOperationContainerStatementSupport(final StatementDefinition publicDefinition, - final Function createArgument) { - super(publicDefinition, uninstantiatedPolicy()); + final YangParserConfiguration config, final Function createArgument) { + super(publicDefinition, uninstantiatedPolicy(), config); this.createArgument = requireNonNull(createArgument); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ActionStatementSupport.java index d88f5c6a6f..7c168a370e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ActionStatementSupport.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta; import static com.google.common.base.Verify.verify; +import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -20,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; @@ -40,25 +42,26 @@ public final class ActionStatementSupport extends private static final ImmutableSet ILLEGAL_PARENTS = ImmutableSet.of( YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION); - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.ACTION) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.INPUT) - .addOptional(YangStmtMapping.OUTPUT) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .build(); - private static final ActionStatementSupport INSTANCE = new ActionStatementSupport(); - - private ActionStatementSupport() { - super(YangStmtMapping.ACTION, uninstantiatedPolicy()); - } - - public static ActionStatementSupport getInstance() { - return INSTANCE; + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.ACTION) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.INPUT) + .addOptional(YangStmtMapping.OUTPUT) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .build(); + + private final InputStatementSupport implicitInput; + private final OutputStatementSupport implicitOutput; + + public ActionStatementSupport(final YangParserConfiguration config, final InputStatementSupport implicitInput, + final OutputStatementSupport implicitOutput) { + super(YangStmtMapping.ACTION, uninstantiatedPolicy(), config); + this.implicitInput = requireNonNull(implicitInput); + this.implicitOutput = requireNonNull(implicitOutput); } @Override @@ -81,12 +84,10 @@ public final class ActionStatementSupport extends verify(stmt instanceof StatementContextBase); if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, InputStatement.class) == null) { - ((StatementContextBase) stmt).appendImplicitSubstatement( - InputStatementSupport.rfc7950Instance(), null); + ((StatementContextBase) stmt).appendImplicitSubstatement(implicitInput, null); } if (StmtContextUtils.findFirstDeclaredSubstatement(stmt, OutputStatement.class) == null) { - ((StatementContextBase) stmt).appendImplicitSubstatement( - OutputStatementSupport.rfc7950Instance(), null); + ((StatementContextBase) stmt).appendImplicitSubstatement(implicitOutput, null); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnydataStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnydataStatementSupport.java index 7df1513a76..0a7b816336 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnydataStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnydataStatementSupport.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnydataStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -29,25 +30,20 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class AnydataStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.ANYDATA) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final AnydataStatementSupport INSTANCE = new AnydataStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.ANYDATA) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .build(); - private AnydataStatementSupport() { - super(YangStmtMapping.ANYDATA, instantiatedPolicy()); - } - - public static AnydataStatementSupport getInstance() { - return INSTANCE; + public AnydataStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ANYDATA, instantiatedPolicy(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnyxmlStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnyxmlStatementSupport.java index 5248afbf7b..47d651a13b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnyxmlStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnyxmlStatementSupport.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -29,25 +30,20 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class AnyxmlStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ANYXML) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final AnyxmlStatementSupport INSTANCE = new AnyxmlStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.ANYXML) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.WHEN) + .build(); - private AnyxmlStatementSupport() { - super(YangStmtMapping.ANYXML, instantiatedPolicy()); - } - - public static AnyxmlStatementSupport getInstance() { - return INSTANCE; + public AnyxmlStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ANYXML, instantiatedPolicy(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ArgumentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ArgumentStatementSupport.java index ae6b798375..abd927c860 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ArgumentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ArgumentStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ArgumentStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; @@ -24,18 +25,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ArgumentStatementSupport extends AbstractQNameStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .ARGUMENT) - .addOptional(YangStmtMapping.YIN_ELEMENT) - .build(); - private static final ArgumentStatementSupport INSTANCE = new ArgumentStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.ARGUMENT).addOptional(YangStmtMapping.YIN_ELEMENT).build(); - private ArgumentStatementSupport() { - super(YangStmtMapping.ARGUMENT, StatementPolicy.reject()); - } - - public static ArgumentStatementSupport getInstance() { - return INSTANCE; + public ArgumentStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ARGUMENT, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BaseStatementSupport.java index c0efea9846..6523e2a63c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BaseStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; @@ -35,14 +36,9 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class BaseStatementSupport extends AbstractQNameStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.BASE).build(); - private static final BaseStatementSupport INSTANCE = new BaseStatementSupport(); - private BaseStatementSupport() { - super(YangStmtMapping.BASE, StatementPolicy.contextIndependent()); - } - - public static BaseStatementSupport getInstance() { - return INSTANCE; + public BaseStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.BASE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java index 410797fd4b..2e8237417e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java @@ -17,6 +17,7 @@ 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.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; @@ -40,14 +41,9 @@ public final class BelongsToStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.BELONGS_TO).addMandatory(YangStmtMapping.PREFIX).build(); - private static final BelongsToStatementSupport INSTANCE = new BelongsToStatementSupport(); - private BelongsToStatementSupport() { - super(YangStmtMapping.BELONGS_TO, StatementPolicy.reject()); - } - - public static BelongsToStatementSupport getInstance() { - return INSTANCE; + public BelongsToStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.BELONGS_TO, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BitStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BitStatementSupport.java index d71163d934..d0b7d1dea8 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BitStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BitStatementSupport.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -27,35 +28,35 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class BitStatementSupport extends AbstractStatementSupport { - private static final @NonNull BitStatementSupport RFC6020_INSTANCE = new BitStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.BIT) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.POSITION) - .build()); - private static final @NonNull BitStatementSupport RFC7950_INSTANCE = new BitStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.BIT) .addOptional(YangStmtMapping.DESCRIPTION) .addAny(YangStmtMapping.IF_FEATURE) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.POSITION) - .build()); + .build(); private final SubstatementValidator validator; - private BitStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.BIT, StatementPolicy.contextIndependent()); + private BitStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.BIT, StatementPolicy.contextIndependent(), config); this.validator = requireNonNull(validator); } - public static @NonNull BitStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull BitStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new BitStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull BitStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull BitStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new BitStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/CaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/CaseStatementSupport.java index 4cbf7a9417..a1751dacb6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/CaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/CaseStatementSupport.java @@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin; import org.opendaylight.yangtools.yang.model.api.stmt.CaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.CaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements; @@ -41,8 +42,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class CaseStatementSupport extends AbstractImplicitStatementSupport { - private static final @NonNull CaseStatementSupport RFC6020_INSTANCE = new CaseStatementSupport( - SubstatementValidator.builder(YangStmtMapping.CASE) + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CASE) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CHOICE) .addAny(YangStmtMapping.CONTAINER) @@ -55,9 +55,8 @@ public final class CaseStatementSupport .addOptional(YangStmtMapping.STATUS) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) - .build()); - private static final @NonNull CaseStatementSupport RFC7950_INSTANCE = new CaseStatementSupport( - SubstatementValidator.builder(YangStmtMapping.CASE) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CASE) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CHOICE) @@ -71,21 +70,21 @@ public final class CaseStatementSupport .addOptional(YangStmtMapping.STATUS) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) - .build()); + .build(); private final SubstatementValidator validator; - private CaseStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.CASE, instantiatedPolicy()); + private CaseStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.CASE, instantiatedPolicy(), config); this.validator = requireNonNull(validator); } - public static @NonNull CaseStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull CaseStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new CaseStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull CaseStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull CaseStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new CaseStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java index 77ae7057b2..76bc640a47 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java @@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -45,8 +46,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class ChoiceStatementSupport extends AbstractSchemaTreeStatementSupport implements ImplicitParentAwareStatementSupport { - private static final @NonNull ChoiceStatementSupport RFC6020_INSTANCE = new ChoiceStatementSupport( - SubstatementValidator.builder(YangStmtMapping.CHOICE) + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CASE) .addOptional(YangStmtMapping.CONFIG) @@ -61,11 +61,9 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) - .build(), - CaseStatementSupport.rfc6020Instance()); + .build(); - private static final @NonNull ChoiceStatementSupport RFC7950_INSTANCE = new ChoiceStatementSupport( - SubstatementValidator.builder(YangStmtMapping.CHOICE) + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CHOICE) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CASE) @@ -81,24 +79,26 @@ public final class ChoiceStatementSupport .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) - .build(), - CaseStatementSupport.rfc7950Instance()); + .build(); private final SubstatementValidator validator; private final CaseStatementSupport implicitCase; - private ChoiceStatementSupport(final SubstatementValidator validator, final CaseStatementSupport implicitCase) { - super(YangStmtMapping.CHOICE, instantiatedPolicy()); + private ChoiceStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator, + final CaseStatementSupport implicitCase) { + super(YangStmtMapping.CHOICE, instantiatedPolicy(), config); this.validator = requireNonNull(validator); this.implicitCase = requireNonNull(implicitCase); } - public static @NonNull ChoiceStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull ChoiceStatementSupport rfc6020Instance(final YangParserConfiguration config, + final CaseStatementSupport implicitCase) { + return new ChoiceStatementSupport(config, RFC6020_VALIDATOR, implicitCase); } - public static @NonNull ChoiceStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull ChoiceStatementSupport rfc7950Instance(final YangParserConfiguration config, + final CaseStatementSupport implicitCase) { + return new ChoiceStatementSupport(config, RFC7950_VALIDATOR, implicitCase); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ConfigStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ConfigStatementSupport.java index 91ee45db94..d90bdb9bc4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ConfigStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ConfigStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; @@ -20,20 +21,15 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ConfigStatementSupport extends AbstractBooleanStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.CONFIG).build(); - private static final ConfigStatementSupport INSTANCE = new ConfigStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.CONFIG).build(); - private ConfigStatementSupport() { + public ConfigStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.CONFIG, EffectiveStatements.createConfig(false), EffectiveStatements.createConfig(true), // FIXME: This is not quite true. If we are instantiated in a context which ignores config, which should // really fizzle. This needs some more analysis. - StatementPolicy.contextIndependent()); - } - - public static ConfigStatementSupport getInstance() { - return INSTANCE; + StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContactStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContactStatementSupport.java index 9f8693f3ff..9cf3c78e46 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContactStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContactStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ContactStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStringStatementSupport; @@ -20,16 +21,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ContactStatementSupport extends AbstractInternedStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.CONTACT).build(); - private static final ContactStatementSupport INSTANCE = new ContactStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.CONTACT).build(); - private ContactStatementSupport() { - super(YangStmtMapping.CONTACT, StatementPolicy.reject()); - } - - public static ContactStatementSupport getInstance() { - return INSTANCE; + public ContactStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.CONTACT, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContainerStatementSupport.java index 25b8c91954..24732865b5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContainerStatementSupport.java @@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatemen import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -37,7 +38,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class ContainerStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final @NonNull ContainerStatementSupport RFC6020_INSTANCE = new ContainerStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CONTAINER) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CHOICE) @@ -56,9 +57,9 @@ public final class ContainerStatementSupport .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) - .build()); + .build(); - private static final @NonNull ContainerStatementSupport RFC7950_INSTANCE = new ContainerStatementSupport( + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.CONTAINER) .addAny(YangStmtMapping.ACTION) .addAny(YangStmtMapping.ANYDATA) @@ -80,21 +81,21 @@ public final class ContainerStatementSupport .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.WHEN) - .build()); + .build(); private final SubstatementValidator validator; - private ContainerStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.CONTAINER, instantiatedPolicy()); + private ContainerStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.CONTAINER, instantiatedPolicy(), config); this.validator = requireNonNull(validator); } - public static @NonNull ContainerStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull ContainerStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new ContainerStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull ContainerStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull ContainerStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new ContainerStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DefaultStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DefaultStatementSupport.java index 7febd16f66..be34bba3ba 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DefaultStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DefaultStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DefaultStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -22,17 +23,12 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class DefaultStatementSupport extends AbstractStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.DEFAULT).build(); - private static final DefaultStatementSupport INSTANCE = new DefaultStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DEFAULT).build(); - private DefaultStatementSupport() { + public DefaultStatementSupport(final YangParserConfiguration config) { // Note: if we start interpreting the string we'll need to use StatementPolicy.declaredCopy() - super(YangStmtMapping.DEFAULT, StatementPolicy.contextIndependent()); - } - - public static DefaultStatementSupport getInstance() { - return INSTANCE; + super(YangStmtMapping.DEFAULT, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DescriptionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DescriptionStatementSupport.java index ac17f9c71a..ee3c121a35 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DescriptionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DescriptionStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -22,16 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class DescriptionStatementSupport extends AbstractStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.DESCRIPTION).build(); - private static final DescriptionStatementSupport INSTANCE = new DescriptionStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.DESCRIPTION).build(); - private DescriptionStatementSupport() { - super(YangStmtMapping.DESCRIPTION, StatementPolicy.contextIndependent()); - } - - public static DescriptionStatementSupport getInstance() { - return INSTANCE; + public DescriptionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.DESCRIPTION, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DeviationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DeviationStatementSupport.java index 0e90bfb288..bdf147af74 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DeviationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DeviationStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DeviationStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; @@ -35,14 +36,9 @@ public final class DeviationStatementSupport .addAny(YangStmtMapping.DEVIATE) .addOptional(YangStmtMapping.REFERENCE) .build(); - private static final DeviationStatementSupport INSTANCE = new DeviationStatementSupport(); - private DeviationStatementSupport() { - super(YangStmtMapping.DEVIATION, StatementPolicy.reject()); - } - - public static DeviationStatementSupport getInstance() { - return INSTANCE; + public DeviationStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.DEVIATION, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/EnumStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/EnumStatementSupport.java index 6bd5bdecdc..14c92727cf 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/EnumStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/EnumStatementSupport.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.EnumStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -27,35 +28,33 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class EnumStatementSupport extends AbstractStatementSupport { - private static final @NonNull EnumStatementSupport RFC6020_INSTANCE = new EnumStatementSupport( - SubstatementValidator.builder(YangStmtMapping.ENUM) + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.ENUM) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.VALUE) - .build()); - private static final @NonNull EnumStatementSupport RFC7950_INSTANCE = new EnumStatementSupport( - SubstatementValidator.builder(YangStmtMapping.ENUM) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.ENUM) .addOptional(YangStmtMapping.DESCRIPTION) .addAny(YangStmtMapping.IF_FEATURE) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.VALUE) - .build()); + .build(); private final SubstatementValidator validator; - private EnumStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.ENUM, StatementPolicy.contextIndependent()); + private EnumStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.ENUM, StatementPolicy.contextIndependent(), config); this.validator = requireNonNull(validator); } - public static @NonNull EnumStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull EnumStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new EnumStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull EnumStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull EnumStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new EnumStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorAppTagStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorAppTagStatementSupport.java index a7556d72ae..5032fc1e1d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorAppTagStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorAppTagStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -24,14 +25,9 @@ public final class ErrorAppTagStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.ERROR_APP_TAG).build(); - private static final ErrorAppTagStatementSupport INSTANCE = new ErrorAppTagStatementSupport(); - private ErrorAppTagStatementSupport() { - super(YangStmtMapping.ERROR_APP_TAG, StatementPolicy.contextIndependent()); - } - - public static ErrorAppTagStatementSupport getInstance() { - return INSTANCE; + public ErrorAppTagStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ERROR_APP_TAG, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorMessageStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorMessageStatementSupport.java index b170b303bf..7dd59cb6b9 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorMessageStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorMessageStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -23,15 +24,10 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ErrorMessageStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.ERROR_MESSAGE).build(); - private static final ErrorMessageStatementSupport INSTANCE = new ErrorMessageStatementSupport(); + SubstatementValidator.builder(YangStmtMapping.ERROR_MESSAGE).build(); - private ErrorMessageStatementSupport() { - super(YangStmtMapping.ERROR_MESSAGE, StatementPolicy.contextIndependent()); - } - - public static ErrorMessageStatementSupport getInstance() { - return INSTANCE; + public ErrorMessageStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ERROR_MESSAGE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FeatureStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FeatureStatementSupport.java index 1e10c6a311..ec92e28b2b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FeatureStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FeatureStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FeatureStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -29,21 +30,16 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class FeatureStatementSupport extends AbstractQNameStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.FEATURE) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.STATUS) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - private static final FeatureStatementSupport INSTANCE = new FeatureStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.FEATURE) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.STATUS) + .addOptional(YangStmtMapping.REFERENCE) + .build(); - private FeatureStatementSupport() { - super(YangStmtMapping.FEATURE, StatementPolicy.reject()); - } - - public static FeatureStatementSupport getInstance() { - return INSTANCE; + public FeatureStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.FEATURE, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FractionDigitsStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FractionDigitsStatementSupport.java index 0c739cdc44..6d969a0685 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FractionDigitsStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FractionDigitsStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -28,7 +29,6 @@ public final class FractionDigitsStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.FRACTION_DIGITS).build(); - private static final FractionDigitsStatementSupport INSTANCE = new FractionDigitsStatementSupport(); // FIXME: move this to yang-model-spi private static final ImmutableMap EMPTY_EFF; @@ -42,12 +42,8 @@ public final class FractionDigitsStatementSupport EMPTY_EFF = effBuilder.build(); } - private FractionDigitsStatementSupport() { - super(YangStmtMapping.FRACTION_DIGITS, StatementPolicy.contextIndependent()); - } - - public static FractionDigitsStatementSupport getInstance() { - return INSTANCE; + public FractionDigitsStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.FRACTION_DIGITS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/GroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/GroupingStatementSupport.java index 586d431649..c1aea8e0ce 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/GroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/GroupingStatementSupport.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.GroupingStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; @@ -40,7 +41,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class GroupingStatementSupport extends AbstractQNameStatementSupport { - private static final @NonNull GroupingStatementSupport RFC6020_INSTANCE = new GroupingStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.GROUPING) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CHOICE) @@ -54,8 +55,8 @@ public final class GroupingStatementSupport .addOptional(YangStmtMapping.STATUS) .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) - .build()); - private static final @NonNull GroupingStatementSupport RFC7950_INSTANCE = new GroupingStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.GROUPING) .addAny(YangStmtMapping.ACTION) .addAny(YangStmtMapping.ANYDATA) @@ -72,25 +73,25 @@ public final class GroupingStatementSupport .addOptional(YangStmtMapping.STATUS) .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) - .build()); + .build(); private final SubstatementValidator validator; - GroupingStatementSupport(final SubstatementValidator validator) { + GroupingStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { super(YangStmtMapping.GROUPING, StatementPolicy.copyDeclared( (copy, current, substatements) -> copy.history().isAddedByUses() == current.history().isAddedByUses() && copy.getArgument().equals(current.getArgument()) - && copy.equalParentPath(current))); + && copy.equalParentPath(current)), config); this.validator = requireNonNull(validator); } - public static @NonNull GroupingStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull GroupingStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new GroupingStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull GroupingStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull GroupingStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new GroupingStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IdentityStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IdentityStatementSupport.java index 80f86437ef..1a97ae76da 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IdentityStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IdentityStatementSupport.java @@ -27,6 +27,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -42,35 +43,35 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class IdentityStatementSupport extends AbstractQNameStatementSupport { - private static final @NonNull IdentityStatementSupport RFC6020_INSTANCE = new IdentityStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.IDENTITY) .addOptional(YangStmtMapping.BASE) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) - .build()); - private static final @NonNull IdentityStatementSupport RFC7950_INSTANCE = new IdentityStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.IDENTITY) .addAny(YangStmtMapping.BASE) .addOptional(YangStmtMapping.DESCRIPTION) .addAny(YangStmtMapping.IF_FEATURE) .addOptional(YangStmtMapping.REFERENCE) .addOptional(YangStmtMapping.STATUS) - .build()); + .build(); private final SubstatementValidator validator; - private IdentityStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.IDENTITY, StatementPolicy.reject()); + private IdentityStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.IDENTITY, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull IdentityStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull IdentityStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new IdentityStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull IdentityStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull IdentityStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new IdentityStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java index ae186e3610..079abafea5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java @@ -23,6 +23,7 @@ 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.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; @@ -44,28 +45,30 @@ import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameTo @Beta public final class IncludeStatementSupport extends AbstractStringStatementSupport { - private static final @NonNull IncludeStatementSupport RFC6020_INSTANCE = new IncludeStatementSupport( - SubstatementValidator.builder(YangStmtMapping.INCLUDE).addOptional(YangStmtMapping.REVISION_DATE).build()); - private static final @NonNull IncludeStatementSupport RFC7950_INSTANCE = new IncludeStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.INCLUDE) + .addOptional(YangStmtMapping.REVISION_DATE) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INCLUDE) .addOptional(YangStmtMapping.REVISION_DATE) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) - .build()); + .build(); private final SubstatementValidator validator; - IncludeStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.INCLUDE, StatementPolicy.reject()); + IncludeStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.INCLUDE, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull IncludeStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull IncludeStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new IncludeStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull IncludeStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull IncludeStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new IncludeStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/InputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/InputStatementSupport.java index 2c2fbc266f..9e7ce61de5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/InputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/InputStatementSupport.java @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin; import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements; @@ -32,46 +33,44 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class InputStatementSupport extends AbstractOperationContainerStatementSupport { - private static final @NonNull InputStatementSupport RFC6020_INSTANCE = new InputStatementSupport( - SubstatementValidator.builder(YangStmtMapping.INPUT) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build()); - private static final @NonNull InputStatementSupport RFC7950_INSTANCE = new InputStatementSupport( - SubstatementValidator.builder(YangStmtMapping.INPUT) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build()); + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.INPUT) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); private final SubstatementValidator validator; - private InputStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.INPUT, YangConstants::operationInputQName); + private InputStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.INPUT, config, YangConstants::operationInputQName); this.validator = requireNonNull(validator); } - public static @NonNull InputStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull InputStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new InputStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull InputStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull InputStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new InputStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java index c83f6920c6..be86b67852 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer; @@ -55,16 +56,11 @@ public final class KeyStatementSupport private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.KEY).build(); - private static final KeyStatementSupport INSTANCE = new KeyStatementSupport(); - private KeyStatementSupport() { + public KeyStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.KEY, StatementPolicy.copyDeclared( // Identity comparison is sufficient because adaptArgumentValue() is careful about reuse. - (copy, current, substatements) -> copy.getArgument() == current.getArgument())); - } - - public static KeyStatementSupport getInstance() { - return INSTANCE; + (copy, current, substatements) -> copy.getArgument() == current.getArgument()), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafStatementSupport.java index 1d0567707f..afe0491bc4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -35,28 +36,23 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class LeafStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LEAF) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final LeafStatementSupport INSTANCE = new LeafStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.LEAF) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .addOptional(YangStmtMapping.WHEN) + .build(); - private LeafStatementSupport() { - super(YangStmtMapping.LEAF, instantiatedPolicy()); - } - - public static LeafStatementSupport getInstance() { - return INSTANCE; + public LeafStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.LEAF, instantiatedPolicy(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LengthStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LengthStatementSupport.java index 9b458dd3b3..9a20e79976 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LengthStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LengthStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; @@ -33,21 +34,16 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class LengthStatementSupport extends AbstractStatementSupport, LengthStatement, LengthEffectiveStatement> { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LENGTH) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.ERROR_APP_TAG) - .addOptional(YangStmtMapping.ERROR_MESSAGE) - .addOptional(YangStmtMapping.REFERENCE) - .build(); - private static final LengthStatementSupport INSTANCE = new LengthStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.LENGTH) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.ERROR_APP_TAG) + .addOptional(YangStmtMapping.ERROR_MESSAGE) + .addOptional(YangStmtMapping.REFERENCE) + .build(); - private LengthStatementSupport() { - super(YangStmtMapping.LENGTH, StatementPolicy.contextIndependent()); - } - - public static LengthStatementSupport getInstance() { - return INSTANCE; + public LengthStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.LENGTH, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MandatoryStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MandatoryStatementSupport.java index 69ab4f3e8d..4f762c4ff8 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MandatoryStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MandatoryStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; @@ -20,19 +21,14 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class MandatoryStatementSupport extends AbstractBooleanStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.MANDATORY).build(); - private static final MandatoryStatementSupport INSTANCE = new MandatoryStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.MANDATORY).build(); - private MandatoryStatementSupport() { + public MandatoryStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.MANDATORY, EffectiveStatements.createMandatory(DeclaredStatements.createMandatory(Boolean.FALSE)), EffectiveStatements.createMandatory(DeclaredStatements.createMandatory(Boolean.TRUE)), - StatementPolicy.contextIndependent()); - } - - public static MandatoryStatementSupport getInstance() { - return INSTANCE; + StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MaxElementsStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MaxElementsStatementSupport.java index 3054ad531f..2c1055c962 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MaxElementsStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MaxElementsStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -22,17 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class MaxElementsStatementSupport extends AbstractStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.MAX_ELEMENTS) - .build(); - private static final MaxElementsStatementSupport INSTANCE = new MaxElementsStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.MAX_ELEMENTS).build(); - private MaxElementsStatementSupport() { - super(YangStmtMapping.MAX_ELEMENTS, StatementPolicy.contextIndependent()); - } - - public static MaxElementsStatementSupport getInstance() { - return INSTANCE; + public MaxElementsStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.MAX_ELEMENTS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MinElementsStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MinElementsStatementSupport.java index e549fddad9..dd7b469cfe 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MinElementsStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MinElementsStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MinElementsStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStatementSupport; @@ -22,17 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class MinElementsStatementSupport extends AbstractInternedStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.MIN_ELEMENTS) - .build(); - private static final MinElementsStatementSupport INSTANCE = new MinElementsStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.MIN_ELEMENTS).build(); - private MinElementsStatementSupport() { - super(YangStmtMapping.MIN_ELEMENTS, StatementPolicy.contextIndependent()); - } - - public static MinElementsStatementSupport getInstance() { - return INSTANCE; + public MinElementsStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.MIN_ELEMENTS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ModifierStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ModifierStatementSupport.java index 310c4d01cb..06dbd33ca0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ModifierStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ModifierStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModifierStatement; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -24,16 +25,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class ModifierStatementSupport extends AbstractStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.MODIFIER).build(); - private static final ModifierStatementSupport INSTANCE = new ModifierStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.MODIFIER).build(); - private ModifierStatementSupport() { - super(YangStmtMapping.MODIFIER, StatementPolicy.contextIndependent()); - } - - public static ModifierStatementSupport getInstance() { - return INSTANCE; + public ModifierStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.MODIFIER, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MustStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MustStatementSupport.java index 2aca66cfb2..9430a103fc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MustStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MustStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -36,16 +37,12 @@ public final class MustStatementSupport private final @NonNull XPathSupport xpathSupport; - private MustStatementSupport(final XPathSupport xpathSupport) { + public MustStatementSupport(final XPathSupport xpathSupport, final YangParserConfiguration config) { // Note: if we end up binding expressions, this needs to become declaredCopy() - super(YangStmtMapping.MUST, StatementPolicy.contextIndependent()); + super(YangStmtMapping.MUST, StatementPolicy.contextIndependent(), config); this.xpathSupport = requireNonNull(xpathSupport); } - public static MustStatementSupport createInstance(final XPathSupport xpathSupport) { - return new MustStatementSupport(xpathSupport); - } - @Override public QualifiedBound parseArgumentValue(final StmtContext ctx, final String value) { return xpathSupport.parseXPath(ctx, value); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/NamespaceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/NamespaceStatementSupport.java index b93e5dfbe6..e702e15a62 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/NamespaceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/NamespaceStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -25,17 +26,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class NamespaceStatementSupport extends AbstractStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .NAMESPACE) - .build(); - private static final NamespaceStatementSupport INSTANCE = new NamespaceStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.NAMESPACE).build(); - private NamespaceStatementSupport() { - super(YangStmtMapping.NAMESPACE, StatementPolicy.reject()); - } - - public static NamespaceStatementSupport getInstance() { - return INSTANCE; + public NamespaceStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.NAMESPACE, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrderedByStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrderedByStatementSupport.java index 7f3ce4ce3a..4b95ce0884 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrderedByStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrderedByStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -27,7 +28,6 @@ public final class OrderedByStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.ORDERED_BY).build(); - private static final OrderedByStatementSupport INSTANCE = new OrderedByStatementSupport(); /* * Ordered-by has low argument cardinality, hence we can reuse them in case declaration does not have any @@ -43,12 +43,8 @@ public final class OrderedByStatementSupport private static final @NonNull OrderedByEffectiveStatement EMPTY_USER_EFF = EffectiveStatements.createOrderedBy(EMPTY_USER_DECL); - private OrderedByStatementSupport() { - super(YangStmtMapping.ORDERED_BY, StatementPolicy.contextIndependent()); - } - - public static OrderedByStatementSupport getInstance() { - return INSTANCE; + public OrderedByStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ORDERED_BY, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrganizationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrganizationStatementSupport.java index ac7b0c5fef..f1f92c8cf5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrganizationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrganizationStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStringStatementSupport; @@ -20,17 +21,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class OrganizationStatementSupport extends AbstractInternedStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.ORGANIZATION) - .build(); - private static final OrganizationStatementSupport INSTANCE = new OrganizationStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.ORGANIZATION).build(); - private OrganizationStatementSupport() { - super(YangStmtMapping.ORGANIZATION, StatementPolicy.reject()); - } - - public static OrganizationStatementSupport getInstance() { - return INSTANCE; + public OrganizationStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.ORGANIZATION, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OutputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OutputStatementSupport.java index ca39985599..5ef86b397a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OutputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OutputStatementSupport.java @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementOrigin; import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.ImplicitStatements; @@ -32,46 +33,44 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class OutputStatementSupport extends AbstractOperationContainerStatementSupport { - private static final @NonNull OutputStatementSupport RFC6020_INSTANCE = new OutputStatementSupport( - SubstatementValidator.builder(YangStmtMapping.OUTPUT) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build()); - private static final @NonNull OutputStatementSupport RFC7950_INSTANCE = new OutputStatementSupport( - SubstatementValidator.builder(YangStmtMapping.OUTPUT) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build()); + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.OUTPUT) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.OUTPUT) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build(); private final SubstatementValidator validator; - private OutputStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.OUTPUT, YangConstants::operationOutputQName); + private OutputStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.OUTPUT, config, YangConstants::operationOutputQName); this.validator = requireNonNull(validator); } - public static @NonNull OutputStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull OutputStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new OutputStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull OutputStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull OutputStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new OutputStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PositionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PositionStatementSupport.java index 54c044b819..fd4f43ee2e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PositionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PositionStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStatementSupport; @@ -23,16 +24,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class PositionStatementSupport extends AbstractInternedStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.POSITION).build(); - private static final PositionStatementSupport INSTANCE = new PositionStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.POSITION).build(); - private PositionStatementSupport() { - super(YangStmtMapping.POSITION, StatementPolicy.contextIndependent()); - } - - public static PositionStatementSupport getInstance() { - return INSTANCE; + public PositionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.POSITION, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PrefixStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PrefixStatementSupport.java index 62a5c52d51..f6cb1e8608 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PrefixStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PrefixStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -23,15 +24,10 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class PrefixStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.PREFIX).build(); - private static final PrefixStatementSupport INSTANCE = new PrefixStatementSupport(); + SubstatementValidator.builder(YangStmtMapping.PREFIX).build(); - private PrefixStatementSupport() { - super(YangStmtMapping.PREFIX, StatementPolicy.reject()); - } - - public static PrefixStatementSupport getInstance() { - return INSTANCE; + public PrefixStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.PREFIX, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PresenceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PresenceStatementSupport.java index 537902afef..7c473b110c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PresenceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PresenceStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -23,15 +24,10 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class PresenceStatementSupport extends AbstractStringStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.PRESENCE).build(); - private static final PresenceStatementSupport INSTANCE = new PresenceStatementSupport(); + SubstatementValidator.builder(YangStmtMapping.PRESENCE).build(); - private PresenceStatementSupport() { - super(YangStmtMapping.PRESENCE, StatementPolicy.contextIndependent()); - } - - public static PresenceStatementSupport getInstance() { - return INSTANCE; + public PresenceStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.PRESENCE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java index 6a6067beb8..8584249a0c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; @@ -41,14 +42,9 @@ public final class RangeStatementSupport .addOptional(YangStmtMapping.ERROR_MESSAGE) .addOptional(YangStmtMapping.REFERENCE) .build(); - private static final RangeStatementSupport INSTANCE = new RangeStatementSupport(); - private RangeStatementSupport() { - super(YangStmtMapping.RANGE, StatementPolicy.contextIndependent()); - } - - public static RangeStatementSupport getInstance() { - return INSTANCE; + public RangeStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.RANGE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ReferenceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ReferenceStatementSupport.java index 4a02bdaf0b..6b78825df7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ReferenceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ReferenceStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStringStatementSupport; @@ -20,17 +21,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ReferenceStatementSupport extends AbstractInternedStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.REFERENCE) - .build(); - private static final ReferenceStatementSupport INSTANCE = new ReferenceStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.REFERENCE).build(); - private ReferenceStatementSupport() { - super(YangStmtMapping.REFERENCE, StatementPolicy.contextIndependent()); - } - - public static ReferenceStatementSupport getInstance() { - return INSTANCE; + public ReferenceStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.REFERENCE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RequireInstanceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RequireInstanceStatementSupport.java index 29618230fd..52e7aa531d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RequireInstanceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RequireInstanceStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; @@ -20,18 +21,13 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class RequireInstanceStatementSupport extends AbstractBooleanStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.REQUIRE_INSTANCE).build(); - private static final RequireInstanceStatementSupport INSTANCE = new RequireInstanceStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.REQUIRE_INSTANCE).build(); - private RequireInstanceStatementSupport() { + public RequireInstanceStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.REQUIRE_INSTANCE, EffectiveStatements.createRequireInstance(false), EffectiveStatements.createRequireInstance(true), - StatementPolicy.contextIndependent()); - } - - public static RequireInstanceStatementSupport getInstance() { - return INSTANCE; + StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionDateStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionDateStatementSupport.java index fe239d39c0..63516fd30a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionDateStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionDateStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionDateStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -26,15 +27,10 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class RevisionDateStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.REVISION_DATE).build(); - private static final RevisionDateStatementSupport INSTANCE = new RevisionDateStatementSupport(); + SubstatementValidator.builder(YangStmtMapping.REVISION_DATE).build(); - private RevisionDateStatementSupport() { - super(YangStmtMapping.REVISION_DATE, StatementPolicy.contextIndependent()); - } - - public static RevisionDateStatementSupport getInstance() { - return INSTANCE; + public RevisionDateStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.REVISION_DATE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionStatementSupport.java index 92d38ca583..2103732777 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionStatementSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RevisionStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -25,19 +26,14 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class RevisionStatementSupport extends AbstractStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.REVISION) + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.REVISION) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.REFERENCE) .build(); - private static final RevisionStatementSupport INSTANCE = new RevisionStatementSupport(); - private RevisionStatementSupport() { - super(YangStmtMapping.REVISION, StatementPolicy.reject()); - } - - public static RevisionStatementSupport getInstance() { - return INSTANCE; + public RevisionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.REVISION, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RpcStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RpcStatementSupport.java index e98cf06f3d..9e50e8bff5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RpcStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RpcStatementSupport.java @@ -13,7 +13,6 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; @@ -24,6 +23,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.OutputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RpcStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -39,40 +39,28 @@ import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; @Beta public final class RpcStatementSupport extends AbstractSchemaTreeStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.RPC) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.INPUT) - .addOptional(YangStmtMapping.OUTPUT) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .build(); - private static final @NonNull RpcStatementSupport RFC6020_INSTANCE = new RpcStatementSupport( - InputStatementSupport.rfc6020Instance(), OutputStatementSupport.rfc6020Instance()); - private static final @NonNull RpcStatementSupport RFC7950_INSTANCE = new RpcStatementSupport( - InputStatementSupport.rfc7950Instance(), OutputStatementSupport.rfc7950Instance()); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.RPC) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.INPUT) + .addOptional(YangStmtMapping.OUTPUT) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .build(); private final InputStatementSupport implicitInput; private final OutputStatementSupport implicitOutput; - private RpcStatementSupport(final InputStatementSupport implicitInput, + public RpcStatementSupport(final YangParserConfiguration config, final InputStatementSupport implicitInput, final OutputStatementSupport implicitOutput) { - super(YangStmtMapping.RPC, StatementPolicy.reject()); + super(YangStmtMapping.RPC, StatementPolicy.reject(), config); this.implicitInput = requireNonNull(implicitInput); this.implicitOutput = requireNonNull(implicitOutput); } - public static @NonNull RpcStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; - } - - public static @NonNull RpcStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; - } - @Override public void onFullDefinitionDeclared(final Mutable stmt) { super.onFullDefinitionDeclared(stmt); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java index ed43894378..f3a48109fd 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -26,14 +27,9 @@ public final class StatusStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.STATUS).build(); - private static final StatusStatementSupport INSTANCE = new StatusStatementSupport(); - private StatusStatementSupport() { - super(YangStmtMapping.STATUS, StatementPolicy.contextIndependent()); - } - - public static StatusStatementSupport getInstance() { - return INSTANCE; + public StatusStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.STATUS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/TypedefStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/TypedefStatementSupport.java index 6f5c55c2ed..e145842a3b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/TypedefStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/TypedefStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypedefStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; @@ -50,14 +51,9 @@ public final class TypedefStatementSupport extends .addMandatory(YangStmtMapping.TYPE) .addOptional(YangStmtMapping.UNITS) .build(); - private static final TypedefStatementSupport INSTANCE = new TypedefStatementSupport(); - private TypedefStatementSupport() { - super(YangStmtMapping.TYPEDEF, StatementPolicy.exactReplica()); - } - - public static TypedefStatementSupport getInstance() { - return INSTANCE; + public TypedefStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.TYPEDEF, StatementPolicy.exactReplica(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java index 9ce1599daa..6e1a99e939 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absol import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UniqueStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; @@ -41,19 +42,13 @@ public final class UniqueStatementSupport private static final Splitter SEP_SPLITTER = Splitter.on(CharMatcher.anyOf(" \t\n").precomputed()) .omitEmptyStrings(); - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.UNIQUE) - .build(); - private static final UniqueStatementSupport INSTANCE = new UniqueStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.UNIQUE).build(); - private UniqueStatementSupport() { + public UniqueStatementSupport(final YangParserConfiguration config) { // FIXME: This reflects what the current implementation does. We really want to define an adaptArgumentValue(), // but how that plays with the argument and expectations needs to be investigated. - super(YangStmtMapping.UNIQUE, StatementPolicy.contextIndependent()); - } - - public static UniqueStatementSupport getInstance() { - return INSTANCE; + super(YangStmtMapping.UNIQUE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UnitsStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UnitsStatementSupport.java index 2359bd2495..9fe5a18c11 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UnitsStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UnitsStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnitsStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; @@ -22,17 +23,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class UnitsStatementSupport extends AbstractStringStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.UNITS) - .build(); - private static final UnitsStatementSupport INSTANCE = new UnitsStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.UNITS).build(); - private UnitsStatementSupport() { - super(YangStmtMapping.UNITS, StatementPolicy.contextIndependent()); - } - - public static UnitsStatementSupport getInstance() { - return INSTANCE; + public UnitsStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.UNITS, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ValueStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ValueStatementSupport.java index 6a2efa18fc..749316519a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ValueStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ValueStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractInternedStatementSupport; @@ -23,16 +24,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class ValueStatementSupport extends AbstractInternedStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.VALUE).build(); - private static final ValueStatementSupport INSTANCE = new ValueStatementSupport(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.VALUE).build(); - private ValueStatementSupport() { - super(YangStmtMapping.VALUE, StatementPolicy.contextIndependent()); - } - - public static ValueStatementSupport getInstance() { - return INSTANCE; + public ValueStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.VALUE, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/WhenStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/WhenStatementSupport.java index c5692f4637..e6b64be994 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/WhenStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/WhenStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -34,16 +35,12 @@ public final class WhenStatementSupport private final @NonNull XPathSupport xpathSupport; - private WhenStatementSupport(final XPathSupport xpathSupport) { + public WhenStatementSupport(final XPathSupport xpathSupport, final YangParserConfiguration config) { // Note: if we end up binding expressions, this needs to become declaredCopy() - super(YangStmtMapping.WHEN, StatementPolicy.contextIndependent()); + super(YangStmtMapping.WHEN, StatementPolicy.contextIndependent(), config); this.xpathSupport = requireNonNull(xpathSupport); } - public static WhenStatementSupport createInstance(final XPathSupport xpathSupport) { - return new WhenStatementSupport(xpathSupport); - } - @Override public QualifiedBound parseArgumentValue(final StmtContext ctx, final String value) { return xpathSupport.parseXPath(ctx, value); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YangVersionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YangVersionStatementSupport.java index 1b40a86703..4d7c6435df 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YangVersionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YangVersionStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -27,14 +28,9 @@ public final class YangVersionStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.YANG_VERSION).build(); - private static final YangVersionStatementSupport INSTANCE = new YangVersionStatementSupport(); - private YangVersionStatementSupport() { - super(YangStmtMapping.YANG_VERSION, StatementPolicy.reject()); - } - - public static YangVersionStatementSupport getInstance() { - return INSTANCE; + public YangVersionStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.YANG_VERSION, StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YinElementStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YinElementStatementSupport.java index 92045cf46f..19c5499a99 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YinElementStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YinElementStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.YinElementStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractBooleanStatementSupport; @@ -22,17 +23,12 @@ public final class YinElementStatementSupport extends AbstractBooleanStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.YIN_ELEMENT).build(); - private static final YinElementStatementSupport INSTANCE = new YinElementStatementSupport(); - private YinElementStatementSupport() { + public YinElementStatementSupport(final YangParserConfiguration config) { super(YangStmtMapping.YIN_ELEMENT, EffectiveStatements.createYinElement(DeclaredStatements.createYinElement(false)), EffectiveStatements.createYinElement(DeclaredStatements.createYinElement(true)), - StatementPolicy.reject()); - } - - public static YinElementStatementSupport getInstance() { - return INSTANCE; + StatementPolicy.reject(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java index d4c2f3f4d5..edcd4c822d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java @@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SemVerSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; @@ -68,81 +69,79 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class ModuleStatementSupport extends AbstractStatementSupport { - private static final @NonNull ModuleStatementSupport RFC6020_INSTANCE = new ModuleStatementSupport( - SubstatementValidator.builder(YangStmtMapping.MODULE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addMandatory(YangStmtMapping.NAMESPACE) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.YANG_VERSION) - .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) - .build()); - private static final @NonNull ModuleStatementSupport RFC7950_INSTANCE = new ModuleStatementSupport( - SubstatementValidator.builder(YangStmtMapping.MODULE) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addMandatory(YangStmtMapping.NAMESPACE) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addMandatory(YangStmtMapping.YANG_VERSION) - .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) - .build()); + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.MODULE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.YANG_VERSION) + .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.MODULE) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addMandatory(YangStmtMapping.YANG_VERSION) + .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) + .build(); private final SubstatementValidator validator; - private ModuleStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.MODULE, StatementPolicy.reject()); + private ModuleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.MODULE, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull ModuleStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull ModuleStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new ModuleStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull ModuleStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull ModuleStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new ModuleStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java index afadd137a0..975a81e629 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; @@ -25,8 +26,8 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; abstract class AbstractNotificationStatementSupport extends AbstractSchemaTreeStatementSupport { - AbstractNotificationStatementSupport() { - super(YangStmtMapping.NOTIFICATION, uninstantiatedPolicy()); + AbstractNotificationStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.NOTIFICATION, uninstantiatedPolicy(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java index f85965fb93..3327cf617f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class NotificationStatementRFC6020Support extends AbstractNotificationStatementSupport { @@ -27,14 +28,9 @@ public final class NotificationStatementRFC6020Support extends AbstractNotificat .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .build(); - private static final NotificationStatementRFC6020Support INSTANCE = new NotificationStatementRFC6020Support(); - private NotificationStatementRFC6020Support() { - // Hidden - } - - public static NotificationStatementRFC6020Support getInstance() { - return INSTANCE; + public NotificationStatementRFC6020Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java index 173d1d6c1c..f6a54d3baf 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.NotificationStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @@ -25,8 +26,8 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; */ @Beta public final class NotificationStatementRFC7950Support extends AbstractNotificationStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .NOTIFICATION) + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.NOTIFICATION) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.CHOICE) @@ -44,16 +45,11 @@ public final class NotificationStatementRFC7950Support extends AbstractNotificat .addAny(YangStmtMapping.USES) .build(); - private static final ImmutableSet ILLEGAL_PARENTS = ImmutableSet.of( - YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION); - private static final NotificationStatementRFC7950Support INSTANCE = new NotificationStatementRFC7950Support(); + private static final ImmutableSet ILLEGAL_PARENTS = + ImmutableSet.of(YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION); - private NotificationStatementRFC7950Support() { - // Hidden - } - - public static NotificationStatementRFC7950Support getInstance() { - return INSTANCE; + public NotificationStatementRFC7950Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java index 20a1733cb3..f6ba62d211 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PathStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -27,25 +28,21 @@ public final class PathStatementSupport extends AbstractStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.PATH).build(); - private static final PathStatementSupport LENIENT_INSTANCE = new PathStatementSupport( - new PathExpressionParser.Lenient()); - private static final PathStatementSupport STRICT_INSTANCE = new PathStatementSupport( - new PathExpressionParser()); private final PathExpressionParser parser; - private PathStatementSupport(final PathExpressionParser parser) { + private PathStatementSupport(final YangParserConfiguration config, final PathExpressionParser parser) { // TODO: can 'path' really be copied? - super(YangStmtMapping.PATH, StatementPolicy.contextIndependent()); + super(YangStmtMapping.PATH, StatementPolicy.contextIndependent(), config); this.parser = requireNonNull(parser); } - public static PathStatementSupport lenientInstance() { - return LENIENT_INSTANCE; + public static PathStatementSupport lenientInstance(final YangParserConfiguration config) { + return new PathStatementSupport(config, new PathExpressionParser.Lenient()); } - public static PathStatementSupport strictInstance() { - return STRICT_INSTANCE; + public static PathStatementSupport strictInstance(final YangParserConfiguration config) { + return new PathStatementSupport(config, new PathExpressionParser()); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementSupport.java index a671b87741..33e7311776 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementSupport.java @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PatternExpression; import org.opendaylight.yangtools.yang.model.api.stmt.PatternStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -31,35 +32,35 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class PatternStatementSupport extends AbstractStatementSupport { - private static final @NonNull PatternStatementSupport RFC6020_INSTANCE = new PatternStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.PATTERN) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.ERROR_APP_TAG) .addOptional(YangStmtMapping.ERROR_MESSAGE) .addOptional(YangStmtMapping.REFERENCE) - .build()); - private static final @NonNull PatternStatementSupport RFC7950_INSTANCE = new PatternStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.PATTERN) .addOptional(YangStmtMapping.DESCRIPTION) .addOptional(YangStmtMapping.ERROR_APP_TAG) .addOptional(YangStmtMapping.ERROR_MESSAGE) .addOptional(YangStmtMapping.MODIFIER) .addOptional(YangStmtMapping.REFERENCE) - .build()); + .build(); private final SubstatementValidator validator; - private PatternStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.PATTERN, StatementPolicy.contextIndependent()); + private PatternStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.PATTERN, StatementPolicy.contextIndependent(), config); this.validator = requireNonNull(validator); } - public static @NonNull PatternStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull PatternStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new PatternStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull PatternStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull PatternStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new PatternStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java index a5bf8314e1..256a97ac0a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java @@ -21,6 +21,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; @@ -31,45 +32,43 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; @Beta public final class RefineStatementSupport extends AbstractStatementSupport { - private static final @NonNull RefineStatementSupport RFC6020_INSTANCE = new RefineStatementSupport( - SubstatementValidator.builder(YangStmtMapping.REFINE) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.PRESENCE) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .build()); - private static final @NonNull RefineStatementSupport RFC7950_INSTANCE = new RefineStatementSupport( - SubstatementValidator.builder(YangStmtMapping.REFINE) - .addOptional(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MANDATORY) - .addOptional(YangStmtMapping.PRESENCE) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .build()); + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.REFINE) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.PRESENCE) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.REFINE) + .addOptional(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MANDATORY) + .addOptional(YangStmtMapping.PRESENCE) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .build(); private final SubstatementValidator validator; - private RefineStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.REFINE, StatementPolicy.reject()); + private RefineStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.REFINE, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull RefineStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull RefineStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new RefineStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull RefineStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull RefineStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new RefineStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java index 200554ea1c..0e1e7a897d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java @@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BelongsToStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.SubmoduleStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; @@ -40,7 +41,7 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @Beta public final class SubmoduleStatementSupport extends AbstractStatementSupport { - private static final @NonNull SubmoduleStatementSupport RFC6020_INSTANCE = new SubmoduleStatementSupport( + private static final SubstatementValidator RFC6020_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.SUBMODULE) .addAny(YangStmtMapping.ANYXML) .addAny(YangStmtMapping.AUGMENT) @@ -67,8 +68,8 @@ public final class SubmoduleStatementSupport .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.YANG_VERSION) - .build()); - private static final @NonNull SubmoduleStatementSupport RFC7950_INSTANCE = new SubmoduleStatementSupport( + .build(); + private static final SubstatementValidator RFC7950_VALIDATOR = SubstatementValidator.builder(YangStmtMapping.SUBMODULE) .addAny(YangStmtMapping.ANYDATA) .addAny(YangStmtMapping.ANYXML) @@ -96,21 +97,21 @@ public final class SubmoduleStatementSupport .addAny(YangStmtMapping.TYPEDEF) .addAny(YangStmtMapping.USES) .addOptional(YangStmtMapping.YANG_VERSION) - .build()); + .build(); private final SubstatementValidator validator; - private SubmoduleStatementSupport(final SubstatementValidator validator) { - super(YangStmtMapping.SUBMODULE, StatementPolicy.reject()); + private SubmoduleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) { + super(YangStmtMapping.SUBMODULE, StatementPolicy.reject(), config); this.validator = requireNonNull(validator); } - public static @NonNull SubmoduleStatementSupport rfc6020Instance() { - return RFC6020_INSTANCE; + public static @NonNull SubmoduleStatementSupport rfc6020Instance(final YangParserConfiguration config) { + return new SubmoduleStatementSupport(config, RFC6020_VALIDATOR); } - public static @NonNull SubmoduleStatementSupport rfc7950Instance() { - return RFC7950_INSTANCE; + public static @NonNull SubmoduleStatementSupport rfc7950Instance(final YangParserConfiguration config) { + return new SubmoduleStatementSupport(config, RFC7950_VALIDATOR); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java index ee60b98356..edf67dca16 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java @@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.BaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BaseStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IdentityEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.IdentityrefTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace; @@ -33,6 +34,10 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; abstract class AbstractIdentityRefSpecificationSupport extends AbstractTypeSupport { + AbstractIdentityRefSpecificationSupport(final YangParserConfiguration config) { + super(config); + } + @Override public final void onFullDefinitionDeclared(final Mutable> stmt) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java index 1daef24c87..bbb88fe0ff 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java @@ -14,6 +14,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PathEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RequireInstanceEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.LeafrefSpecification; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.LeafrefTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; @@ -22,6 +23,10 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; abstract class AbstractLeafrefSpecificationSupport extends AbstractTypeSupport { + AbstractLeafrefSpecificationSupport(final YangParserConfiguration config) { + super(config); + } + @Override protected final LeafrefSpecification createDeclared(final StmtContext ctx, final ImmutableList> substatements) { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java index 176bdd30a0..1207bc9a61 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -11,9 +11,6 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; import java.math.BigDecimal; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; @@ -56,6 +53,7 @@ import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.ri.type.BitsTypeBuilder; import org.opendaylight.yangtools.yang.model.ri.type.EnumerationTypeBuilder; @@ -83,19 +81,19 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; abstract class AbstractTypeStatementSupport extends AbstractTypeSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.BASE) - .addAny(YangStmtMapping.BIT) - .addAny(YangStmtMapping.ENUM) - .addOptional(YangStmtMapping.FRACTION_DIGITS) - .addOptional(YangStmtMapping.LENGTH) - .addOptional(YangStmtMapping.PATH) - .addAny(YangStmtMapping.PATTERN) - .addOptional(YangStmtMapping.RANGE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .addAny(YangStmtMapping.TYPE) - .build(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.BASE) + .addAny(YangStmtMapping.BIT) + .addAny(YangStmtMapping.ENUM) + .addOptional(YangStmtMapping.FRACTION_DIGITS) + .addOptional(YangStmtMapping.LENGTH) + .addOptional(YangStmtMapping.PATH) + .addAny(YangStmtMapping.PATTERN) + .addOptional(YangStmtMapping.RANGE) + .addOptional(YangStmtMapping.REQUIRE_INSTANCE) + .addAny(YangStmtMapping.TYPE) + .build(); private static final ImmutableMap STATIC_BUILT_IN_TYPES = ImmutableMap.builder() @@ -116,19 +114,20 @@ abstract class AbstractTypeStatementSupport extends AbstractTypeSupport> DYNAMIC_BUILT_IN_TYPES = - ImmutableMap.>builder() - .put(TypeDefinitions.BITS.getLocalName(), new BitsSpecificationSupport()) - .put(TypeDefinitions.DECIMAL64.getLocalName(), new Decimal64SpecificationSupport()) - .put(TypeDefinitions.ENUMERATION.getLocalName(), new EnumSpecificationSupport()) - .put(TypeDefinitions.IDENTITYREF.getLocalName(), new IdentityRefSpecificationRFC6020Support()) - .put(TypeDefinitions.INSTANCE_IDENTIFIER.getLocalName(), new InstanceIdentifierSpecificationSupport()) - .put(TypeDefinitions.LEAFREF.getLocalName(), new LeafrefSpecificationRFC6020Support()) - .put(TypeDefinitions.UNION.getLocalName(), new UnionSpecificationSupport()) + private final ImmutableMap> dynamicBuiltInTypes; + + AbstractTypeStatementSupport(final YangParserConfiguration config) { + super(config); + dynamicBuiltInTypes = ImmutableMap.>builder() + .put(TypeDefinitions.BITS.getLocalName(), new BitsSpecificationSupport(config)) + .put(TypeDefinitions.DECIMAL64.getLocalName(), new Decimal64SpecificationSupport(config)) + .put(TypeDefinitions.ENUMERATION.getLocalName(), new EnumSpecificationSupport(config)) + .put(TypeDefinitions.IDENTITYREF.getLocalName(), new IdentityRefSpecificationRFC6020Support(config)) + .put(TypeDefinitions.INSTANCE_IDENTIFIER.getLocalName(), new InstanceIdentifierSpecificationSupport(config)) + .put(TypeDefinitions.LEAFREF.getLocalName(), new LeafrefSpecificationRFC6020Support(config)) + .put(TypeDefinitions.UNION.getLocalName(), new UnionSpecificationSupport(config)) .build(); - - private static final ImmutableMap BUILT_IN_TYPES = Maps.uniqueIndex(ImmutableSet.copyOf( - Iterables.concat(STATIC_BUILT_IN_TYPES.keySet(), DYNAMIC_BUILT_IN_TYPES.keySet())), key -> key); + } @Override public final void onFullDefinitionDeclared( @@ -167,12 +166,12 @@ abstract class AbstractTypeStatementSupport extends AbstractTypeSupport getSupportSpecificForArgument(final String argument) { - return DYNAMIC_BUILT_IN_TYPES.get(argument); + return dynamicBuiltInTypes.get(argument); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeSupport.java index df2a5f05eb..51c400e42f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; import org.opendaylight.yangtools.yang.model.api.type.TypeDefinitions; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractQNameStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; @@ -46,8 +47,8 @@ abstract class AbstractTypeSupport TypeDefinitions.UNION), QName::getLocalName); - AbstractTypeSupport() { - super(YangStmtMapping.TYPE, StatementPolicy.exactReplica()); + AbstractTypeSupport(final YangParserConfiguration config) { + super(YangStmtMapping.TYPE, StatementPolicy.exactReplica(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java index aba2622bca..27b5bd5df3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.BitsSpecification; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.BitsTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; @@ -26,10 +27,12 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; final class BitsSpecificationSupport extends AbstractTypeSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addMultiple(YangStmtMapping.BIT) - .build(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE).addMultiple(YangStmtMapping.BIT).build(); + + BitsSpecificationSupport(final YangParserConfiguration config) { + super(config); + } @Override protected SubstatementValidator getSubstatementValidator() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java index 46e05fe150..ea5beadc4f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.FractionDigitsEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.Decimal64Specification; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.DecimalTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; @@ -24,11 +25,15 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; final class Decimal64SpecificationSupport extends AbstractTypeSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addMandatory(YangStmtMapping.FRACTION_DIGITS) - .addOptional(YangStmtMapping.RANGE) - .build(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE) + .addMandatory(YangStmtMapping.FRACTION_DIGITS) + .addOptional(YangStmtMapping.RANGE) + .build(); + + Decimal64SpecificationSupport(final YangParserConfiguration config) { + super(config); + } @Override protected SubstatementValidator getSubstatementValidator() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java index 4c174fdb3b..fce5ad094b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java @@ -17,6 +17,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.EnumEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.EnumSpecification; import org.opendaylight.yangtools.yang.model.api.stmt.ValueEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.EnumerationTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; @@ -29,6 +30,10 @@ final class EnumSpecificationSupport extends AbstractTypeSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.REQUIRE_INSTANCE) - .build(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE).addOptional(YangStmtMapping.REQUIRE_INSTANCE).build(); + + InstanceIdentifierSpecificationSupport(final YangParserConfiguration config) { + super(config); + } @Override protected SubstatementValidator getSubstatementValidator() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java index 699a3fe87a..0b71321baf 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java @@ -8,13 +8,16 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; final class LeafrefSpecificationRFC6020Support extends AbstractLeafrefSpecificationSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) - .addMandatory(YangStmtMapping.PATH) - .build(); + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE).addMandatory(YangStmtMapping.PATH).build(); + + LeafrefSpecificationRFC6020Support(final YangParserConfiguration config) { + super(config); + } @Override protected SubstatementValidator getSubstatementValidator() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java index 24d9f8eb3f..1091cf1218 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java @@ -8,18 +8,23 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.type; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; /** * Class providing necessary support for processing YANG 1.1 leafref statement. */ final class LeafrefSpecificationRFC7950Support extends AbstractLeafrefSpecificationSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .TYPE) + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = + SubstatementValidator.builder(YangStmtMapping.TYPE) .addMandatory(YangStmtMapping.PATH) .addOptional(YangStmtMapping.REQUIRE_INSTANCE) .build(); + LeafrefSpecificationRFC7950Support(final YangParserConfiguration config) { + super(config); + } + @Override protected SubstatementValidator getSubstatementValidator() { return SUBSTATEMENT_VALIDATOR; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java index 58b4cac396..87b478756d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java @@ -13,18 +13,13 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class TypeStatementRFC6020Support extends AbstractTypeStatementSupport { - private static final TypeStatementRFC6020Support INSTANCE = new TypeStatementRFC6020Support(); - - private TypeStatementRFC6020Support() { - // Hidden - } - - public static TypeStatementRFC6020Support getInstance() { - return INSTANCE; + public TypeStatementRFC6020Support(final YangParserConfiguration config) { + super(config); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java index 5f1054f78e..1076fc3a47 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java @@ -19,6 +19,7 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair; import org.opendaylight.yangtools.yang.model.api.type.TypeDefinitions; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -28,27 +29,23 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; */ @Beta public final class TypeStatementRFC7950Support extends AbstractTypeStatementSupport { - private static final ImmutableMap> ARGUMENT_SPECIFIC_SUPPORTS = ImmutableMap.of( - TypeDefinitions.LEAFREF.getLocalName(), new LeafrefSpecificationRFC7950Support(), - TypeDefinitions.IDENTITYREF.getLocalName(), new IdentityRefSpecificationRFC7950Support()); - private static final TypeStatementRFC7950Support INSTANCE = new TypeStatementRFC7950Support(); + private final ImmutableMap> argumentSpecificSupports; - private TypeStatementRFC7950Support() { - // Hidden - } - - public static TypeStatementRFC7950Support getInstance() { - return INSTANCE; + public TypeStatementRFC7950Support(final YangParserConfiguration config) { + super(config); + argumentSpecificSupports = ImmutableMap.of( + TypeDefinitions.LEAFREF.getLocalName(), new LeafrefSpecificationRFC7950Support(config), + TypeDefinitions.IDENTITYREF.getLocalName(), new IdentityRefSpecificationRFC7950Support(config)); } @Override public boolean hasArgumentSpecificSupports() { - return !ARGUMENT_SPECIFIC_SUPPORTS.isEmpty() || super.hasArgumentSpecificSupports(); + return !argumentSpecificSupports.isEmpty() || super.hasArgumentSpecificSupports(); } @Override public StatementSupport getSupportSpecificForArgument(final String argument) { - final StatementSupport potential = ARGUMENT_SPECIFIC_SUPPORTS.get(argument); + final StatementSupport potential = argumentSpecificSupports.get(argument); return potential != null ? potential : super.getSupportSpecificForArgument(argument); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java index b863895729..f90526c62e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java @@ -15,6 +15,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.UnionSpecification; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.type.BaseTypes; import org.opendaylight.yangtools.yang.model.ri.type.UnionTypeBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.CommonStmtCtx; @@ -25,9 +26,11 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; final class UnionSpecificationSupport extends AbstractTypeSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = - SubstatementValidator.builder(YangStmtMapping.TYPE) - .addMultiple(YangStmtMapping.TYPE) - .build(); + SubstatementValidator.builder(YangStmtMapping.TYPE).addMultiple(YangStmtMapping.TYPE).build(); + + UnionSpecificationSupport(final YangParserConfiguration config) { + super(config); + } @Override protected SubstatementValidator getSubstatementValidator() { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java index 4efba3e7f2..157d91d084 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java @@ -36,6 +36,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Desce import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins; import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.YangValidationBundles; @@ -77,14 +78,9 @@ public final class UsesStatementSupport .addOptional(YangStmtMapping.STATUS) .addOptional(YangStmtMapping.WHEN) .build(); - private static final UsesStatementSupport INSTANCE = new UsesStatementSupport(); - private UsesStatementSupport() { - super(YangStmtMapping.USES, StatementPolicy.exactReplica()); - } - - public static UsesStatementSupport getInstance() { - return INSTANCE; + public UsesStatementSupport(final YangParserConfiguration config) { + super(YangStmtMapping.USES, StatementPolicy.exactReplica(), config); } @Override diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java deleted file mode 100644 index 8f69864c34..0000000000 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. 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.thirdparty.plugin; - -import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; -import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; - -public final class CustomInferencePipeline { - public static final CrossSourceStatementReactor CUSTOM_REACTOR = RFC7950Reactors.defaultReactorBuilder() - .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyExtensionSupport.getInstance()) - .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyNamespace.BEHAVIOR) - .build(); - - private CustomInferencePipeline() { - // Hidden on purpose - } -} diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionPluginTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionPluginTest.java index b680c3b8d3..c2044ca1a4 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionPluginTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionPluginTest.java @@ -20,9 +20,12 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; +import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.BuildAction; import org.opendaylight.yangtools.yang.stmt.StmtTestUtils; public class ThirdPartyExtensionPluginTest { @@ -31,7 +34,12 @@ public class ThirdPartyExtensionPluginTest { @Test public void test() throws URISyntaxException, ReactorException, IOException, YangSyntaxErrorException { - final CrossSourceStatementReactor.BuildAction reactor = CustomInferencePipeline.CUSTOM_REACTOR.newBuild(); + final BuildAction reactor = RFC7950Reactors.defaultReactorBuilder() + .addStatementSupport(ModelProcessingPhase.FULL_DECLARATION, + new ThirdPartyExtensionSupport(YangParserConfiguration.DEFAULT)) + .addNamespaceSupport(ModelProcessingPhase.FULL_DECLARATION, ThirdPartyNamespace.BEHAVIOR) + .build() + .newBuild(); reactor.addSource(StmtTestUtils.sourceForResource("/plugin-test/foo.yang")); final SchemaContext schema = reactor.buildEffective(); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java index 906d6bd641..d11a51b4e2 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java @@ -11,6 +11,7 @@ import com.google.common.collect.ImmutableList; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @@ -19,14 +20,8 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; public final class ThirdPartyExtensionSupport extends AbstractStringStatementSupport { - private static final ThirdPartyExtensionSupport INSTANCE = new ThirdPartyExtensionSupport(); - - private ThirdPartyExtensionSupport() { - super(ThirdPartyExtensionsMapping.THIRD_PARTY_EXTENSION, StatementPolicy.contextIndependent()); - } - - public static ThirdPartyExtensionSupport getInstance() { - return INSTANCE; + public ThirdPartyExtensionSupport(final YangParserConfiguration config) { + super(ThirdPartyExtensionsMapping.THIRD_PARTY_EXTENSION, StatementPolicy.contextIndependent(), config); } @Override diff --git a/yang/yang-parser-spi/pom.xml b/yang/yang-parser-spi/pom.xml index 773919ff6c..57665acb4f 100644 --- a/yang/yang-parser-spi/pom.xml +++ b/yang/yang-parser-spi/pom.xml @@ -38,6 +38,10 @@ org.opendaylight.yangtools yang-model-api + + org.opendaylight.yangtools + yang-parser-api + org.opendaylight.yangtools yang-repo-api diff --git a/yang/yang-parser-spi/src/main/java/module-info.java b/yang/yang-parser-spi/src/main/java/module-info.java index 7d0babf5c2..cc4b0fe485 100644 --- a/yang/yang-parser-spi/src/main/java/module-info.java +++ b/yang/yang-parser-spi/src/main/java/module-info.java @@ -15,6 +15,7 @@ module org.opendaylight.yangtools.yang.parser.spi { requires transitive org.opendaylight.yangtools.concepts; requires transitive org.opendaylight.yangtools.yang.common; requires transitive org.opendaylight.yangtools.yang.model.api; + requires transitive org.opendaylight.yangtools.yang.parser.api; requires transitive org.opendaylight.yangtools.yang.repo.api; requires org.slf4j; diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java index 248d7233f4..1fe443b3d2 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java @@ -15,6 +15,7 @@ import org.eclipse.jdt.annotation.NonNull; 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.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; @@ -34,8 +35,9 @@ public abstract class AbstractBooleanStatementSupport policy) { - super(publicDefinition, policy); + final E emptyEffectiveFalse, final E emptyEffectiveTrue, final StatementPolicy policy, + final YangParserConfiguration config) { + super(publicDefinition, policy, config); this.emptyEffectiveFalse = requireNonNull(emptyEffectiveFalse); this.emptyEffectiveTrue = requireNonNull(emptyEffectiveTrue); emptyDeclaredFalse = requireNonNull(emptyEffectiveFalse.getDeclared()); diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractEmptyStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractEmptyStatementSupport.java index 8e30af0437..2e2dc95ea9 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractEmptyStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractEmptyStatementSupport.java @@ -12,13 +12,14 @@ import org.opendaylight.yangtools.yang.common.Empty; 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.model.parser.api.YangParserConfiguration; @Beta public abstract class AbstractEmptyStatementSupport, E extends EffectiveStatement> extends AbstractStatementSupport { protected AbstractEmptyStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStatementSupport.java index cf38300225..f9486695b8 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStatementSupport.java @@ -16,6 +16,7 @@ import org.eclipse.jdt.annotation.NonNull; 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.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; /** @@ -46,8 +47,8 @@ public abstract class AbstractInternedStatementSupport policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStringStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStringStatementSupport.java index 5a2894d899..27fc045299 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStringStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStringStatementSupport.java @@ -11,6 +11,7 @@ import com.google.common.annotations.Beta; 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.model.parser.api.YangParserConfiguration; /** * A specialization of {@link AbstractInternedStatementSupport} for {@link String} arguments. @@ -22,8 +23,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public abstract class AbstractInternedStringStatementSupport, E extends EffectiveStatement> extends AbstractInternedStatementSupport { protected AbstractInternedStringStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java index 23497bf77c..fe2debd8f1 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java @@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.common.QNameModule; 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.model.parser.api.YangParserConfiguration; /** * Specialization of {@link AbstractStatementSupport} for QName statement arguments. @@ -24,8 +25,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public abstract class AbstractQNameStatementSupport, E extends EffectiveStatement> extends AbstractStatementSupport { protected AbstractQNameStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java index 4e41b1b0f4..c82685d1ee 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java @@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.SchemaTreeNamespace; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; @@ -63,8 +64,8 @@ public abstract class AbstractSchemaTreeStatementSupport()); protected AbstractSchemaTreeStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } /** diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java index 2ab22dde41..8c4770ecd6 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java @@ -18,9 +18,11 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +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.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; /** @@ -34,20 +36,44 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; @Beta public abstract class AbstractStatementSupport, E extends EffectiveStatement> extends StatementSupport { - protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy policy) { + private final boolean retainDeclarationReference; + + protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy policy, + final YangParserConfiguration config) { super(publicDefinition, policy); + this.retainDeclarationReference = config.retainDeclarationReferences(); } @Override public final D createDeclared(final StmtContext ctx) { - return createDeclared(ctx, ctx.declaredSubstatements().stream() + final D stmt = createDeclared(ctx, ctx.declaredSubstatements().stream() .map(StmtContext::declared) .collect(ImmutableList.toImmutableList())); + return retainDeclarationReference ? attachDeclarationReference(stmt, ctx) : stmt; } protected abstract @NonNull D createDeclared(@NonNull StmtContext ctx, @NonNull ImmutableList> substatements); + private @NonNull D attachDeclarationReference(final @NonNull D stmt, final @NonNull StmtContext ctx) { + final DeclarationReference ref = ctx.sourceReference().declarationReference(); + return ref == null ? stmt : attachDeclarationReference(stmt, ref); + } + + /** + * Attach specified {@link DeclarationReference} to a baseline declared statement. If an implementation does not + * support attaching DeclarationReferences, it should return the statement unchanged. + * + * @param stmt Declared statement + * @param reference {@link DeclarationReference} to attach + * @return Equivalent of stmt, potentially with specified reference attached. + */ + // FIXME: make this method abstract + protected @NonNull D attachDeclarationReference(final @NonNull D stmt, + final @NonNull DeclarationReference reference) { + return stmt; + } + @Override public final E createEffective(final Current stmt, final Stream> declaredSubstatements, diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStringStatementSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStringStatementSupport.java index 9cd1fcf652..0491c408a8 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStringStatementSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStringStatementSupport.java @@ -11,6 +11,7 @@ import com.google.common.annotations.Beta; 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.model.parser.api.YangParserConfiguration; /** * Specialization of {@link AbstractStatementSupport} for String statement arguments. Note this (mostly) implies @@ -23,8 +24,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public abstract class AbstractStringStatementSupport, E extends EffectiveStatement> extends AbstractStatementSupport { protected AbstractStringStatementSupport(final StatementDefinition publicDefinition, - final StatementPolicy policy) { - super(publicDefinition, policy); + final StatementPolicy policy, final YangParserConfiguration config) { + super(publicDefinition, policy, config); } @Override -- 2.36.6