Teach YANG parser to retain DeclarationReference 76/95876/12
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Apr 2021 13:49:56 +0000 (15:49 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 22 Apr 2021 14:49:48 +0000 (16:49 +0200)
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 <robert.varga@pantheon.tech>
146 files changed:
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AbstractIdentityAwareStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AugmentIdentifierStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextInstanceStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/InstanceTargetStatementSupport.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/RpcContextReferenceStatementSupport.java
yang/odlext-parser-support/src/test/java/org/opendaylight/yangtools/odlext/parser/ContextReferenceTest.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/EncryptedValueStatementSupport.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/HashedValueStatementSupport.java
yang/rfc6241-parser-support/pom.xml
yang/rfc6241-parser-support/src/main/java/org/opendaylight/yangtools/rfc6241/parser/GetFilterElementAttributesStatementSupport.java
yang/rfc6241-parser-support/src/test/java/org/opendaylight/yangtools/rfc6241/parser/NetconfTest.java
yang/rfc6536-parser-support/pom.xml
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java
yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java
yang/rfc6536-parser-support/src/test/java/org/opendaylight/yangtools/rfc6536/parser/NACMTest.java
yang/rfc6643-parser-support/pom.xml
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/AliasStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DefValStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/DisplayHintStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/ImpliedStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/MaxAccessStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/OidStatementSupport.java
yang/rfc6643-parser-support/src/main/java/org/opendaylight/yangtools/rfc6643/parser/SubIdStatementSupport.java
yang/rfc6643-parser-support/src/test/java/org/opendaylight/yangtools/rfc6643/parser/IetfYangSmiv2ExtensionPluginTest.java
yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java
yang/rfc7952-parser-support/src/test/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationTest.java
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java
yang/rfc8040-parser-support/src/test/java/org/opendaylight/yangtools/rfc8040/parser/YangDataExtensionTest.java
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementImpl.java [new file with mode: 0644]
yang/rfc8528-parser-support/src/main/java/org/opendaylight/yangtools/rfc8528/parser/MountPointStatementSupport.java
yang/rfc8528-parser-support/src/test/java/org/opendaylight/yangtools/rfc8528/parser/MountPointTest.java
yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserConfiguration.java
yang/yang-parser-api/src/main/java/org/opendaylight/yangtools/yang/model/parser/api/YangParserFactory.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/DefaultReactors.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserFactoryImpl.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/DeviateStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/AbstractIfFeatureStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/if_feature/IfFeatureStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractImplicitStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AbstractOperationContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnydataStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/AnyxmlStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ArgumentStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BelongsToStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/BitStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/CaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ChoiceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ConfigStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContactStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DefaultStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DescriptionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/DeviationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/EnumStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorAppTagStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ErrorMessageStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FeatureStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/FractionDigitsStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/GroupingStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IdentityStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/IncludeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/InputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/KeyStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LengthStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MandatoryStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MaxElementsStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MinElementsStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ModifierStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/MustStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/NamespaceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrderedByStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OrganizationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/OutputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PositionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PrefixStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/PresenceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ReferenceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RequireInstanceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionDateStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RevisionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RpcStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/StatusStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/TypedefStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UniqueStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/UnitsStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/ValueStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/WhenStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YangVersionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/YinElementStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/path/PathStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/SubmoduleStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractLeafrefSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/Decimal64SpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/EnumSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/IdentityRefSpecificationRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/InstanceIdentifierSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/LeafrefSpecificationRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/TypeStatementRFC7950Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/UnionSpecificationSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementSupport.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/CustomInferencePipeline.java [deleted file]
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionPluginTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionSupport.java
yang/yang-parser-spi/pom.xml
yang/yang-parser-spi/src/main/java/module-info.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractBooleanStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractEmptyStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractInternedStringStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractQNameStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractSchemaTreeStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStringStatementSupport.java

index 657ac0800cfa698ed7c9fcfc84f8f393dd3290b7..17ef8d13ce062347b0af38e0f1e617aaa648c428 100644 (file)
@@ -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<D extends DeclaredStatement
         E extends EffectiveStatement<QName, D>> extends AbstractStatementSupport<QName, D, E> {
     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();
     }
 
index 6d61359003efe6736f97fa17a73729bf3e2d3c65..1f1aae64692b955116759bafd6c037d820156bd5 100644 (file)
@@ -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<UnqualifiedQName, AugmentIdentifierStatement,
                                          AugmentIdentifierEffectiveStatement> {
-    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
index 7c10f5b12775d3c4b07ae7626a98b784d3d2f4e2..47a939c3e7fea8ba58ac3cf955e1c2eeaae6d269 100644 (file)
@@ -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<ContextInstanceStatement, ContextInstanceEffectiveStatement> {
-    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
index f7fc4dc870493abf2d26bf526efd20bf5b0601e7..7124fcf2d9dbb3b6140850148c66526bc7c04eb9 100644 (file)
@@ -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<ContextReferenceStatement, ContextReferenceEffectiveStatement> {
-    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
index da0f7069e3cfcab099632373450e08704c3c57f3..1d38a4396e81a9b001a08edd834dd2614a7f1350 100644 (file)
@@ -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<InstanceTargetStatement, InstanceTargetEffectiveStatement> {
-    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
index a3ea0174bfc14c1f3671deee808764b7497a2e5a..96d72231bcff808e113cfcf8bfdf1be5b125b2c9 100644 (file)
@@ -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<RpcContextReferenceStatement, RpcContextReferenceEffectiveStatement> {
-    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
index 611459ae1e426adefb84591f1e71ab2dd1af12c1..a57f799dcec4d7ee51271a37ce40c0555bd32c5e 100644 (file)
@@ -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();
     }
 
index ffcb884ee46be6fce6793498f1475cccd499ee4d..3d5cf974a70dfc35c7eb3efc3f69cb4b1d7f163a 100644 (file)
@@ -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();
     }
 
index 22cf3052b499d7218d08def0a0d4289d32092b67..556162bba6486a72c92a65ec8365f0b9ee835f1b 100644 (file)
@@ -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);
     }
 }
index 5ed33d8a1e6aeea2a75893dc150645363d713e8c..3d48ede26f11213fb0a31df0b3dd2b13fabaac8f 100644 (file)
@@ -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);
     }
 }
index 51d9ea79423f95d30ad9897910d479553da3ad21..71a24921ada74465e3ec9edb22b4d27860d2401b 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-spi</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-spi</artifactId>
             <artifactId>yang-parser-rfc7950</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-repo-api</artifactId>
index f12e41cb9dc35f3458815343a5cec08f99571edf..2f253fbe0ce92623e5bcd871d73688fe752ae019 100644 (file)
@@ -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
index b5cb5b65a1399836074486d191cb69a455b1396e..d9df80f7ae26f843db093fd4d12b29e04c849282 100644 (file)
@@ -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();
     }
 
index 82789baeb366757d8ac8651057ca8e8b6b4b51fa..7bee988037ea6184f0488a74695c868f5185ad1c 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-spi</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-spi</artifactId>
             <artifactId>yang-parser-rfc7950</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-reactor</artifactId>
index 91eb86a9280918558fb44fa8bf0809ba7ae5ab40..8e5f07be106896332479b0231942d7fd7c53cddc 100644 (file)
@@ -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
index a3e25a5f3f7a1baa9b970ef999a524bb286c80a0..25f8410a99efa0dc47efda975b4d621cb8bc709e 100644 (file)
@@ -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
index b5dd4a6576ef4852a8f4862288ff9bf1b8aa4037..a41d270e4cc993e25b67fcfa646665d09a6666f9 100644 (file)
@@ -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();
     }
 
index 914129bfbcbf80721feddaf08a365a9c125639a5..17887ef96f7d636ea385ad8894fcdb22a3090183 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-spi</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-spi</artifactId>
             <artifactId>yang-parser-rfc7950</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>yang-parser-api</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-parser-reactor</artifactId>
index a6de8823bf5ea49929fe62c2eadb6851353d85a0..0d642de549794391a3c4d1689adaa9dbcc294911 100644 (file)
@@ -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
index 0fa00a72ec82c84368a27e7974affbd75ebcdd49..3f19fd4ffeb5aa0e280d03d09b29903da6564981 100644 (file)
@@ -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<DefValStatement, DefValEffectiveStatement> {
     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
index 24b30d8028f7285dfece8f5dc9cb12b624041d5c..766f415428f6beb5361fe83f9dc201ab59e498c6 100644 (file)
@@ -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<DisplayHintStatement, DisplayHintEffectiveStatement> {
     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
index cffda60591e15c4e77aedc136527becf89ff8710..6781f267ff863cb9b67708fb542ff351f7d742fb 100644 (file)
@@ -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<ImpliedStatement, ImpliedEffectiveStatement> {
     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
index 642b93c62c136b7a67875bc2da72c212fa2fe152..3a2bda2fa8a5932b720ff45bed328bbca78c6b8d 100644 (file)
@@ -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<MaxAccess, MaxAccessStatement, MaxAccessEffectiveStatement> {
     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
index fabc6bba846a4e6f54747000a10c3a0fb9f78a47..0c798cbc4fe1b2c65c9c7c5986f4f4e992ce4dd5 100644 (file)
@@ -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<ObjectIdentifier, OidStatement, OidEffectiveStatement> {
     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
index 94a27b21b3bb468d2c5f1655b261fe0d0e0be2e3..8c257eb0153593f50e9d9f9fa8c6b5b0fd14b4cc 100644 (file)
@@ -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<Uint32, SubIdStatement, SubIdEffectiveStatement> {
     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
index e4b8a5d40cd04542c336f2062ae8e86d1abee6b2..79c19070e1779d644c352d289bd1c371e39d1c34 100644 (file)
@@ -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
index 57ff9db6989fc5961aa97e2b2790072a624c8534..515a324fda20a3ad37e9c27a54d7773f465d93e5 100644 (file)
@@ -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
index 218703faa84a9177a13d425689213c4379528bf5..c82c73a485ecfbc6cfee5c20f946d0b4d5ed5fe4 100644 (file)
@@ -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();
     }
 
index 6902224a5f2beef035d54ce5af0787e9df55cbbb..7688094a1556c53367e40e01b2a77bd0f016f11d 100644 (file)
@@ -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<String, YangDataStatement, YangDataEffectiveStatement> ctx) {
         // as per https://tools.ietf.org/html/rfc8040#section-8,
index 0be14ddf8dcb2f0642bd3c38df30cacd68ce7976..4546ec7716745a44bf3fc8e193a0c862039ce29c 100644 (file)
@@ -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 (file)
index 0000000..8d623f4
--- /dev/null
@@ -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<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}
\ No newline at end of file
index 775a943b627980ab6cf3e5f97ccc425116b8888e..25b9ab6bc1f2193545555f77ccc9274df72b12fe 100644 (file)
@@ -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<MountPointStatement, MountPointEffectiveStatement> {
+    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<? extends DeclaredStatement<?>> 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<QName, MountPointStatement, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
-        return new Declared(ctx.getArgument(), substatements);
+        return new MountPointStatementImpl(ctx.getArgument(), substatements);
     }
 
     @Override
index 6d36771fce26ffda3fd2e2d49c52ee4b3f72c8c2..1ebdd38c44b681f5239ce4e216b3048a87d5dc5e 100644 (file)
@@ -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();
     }
 
index 7040ab16fd6d414113033b020089308e5a140beb..a602a821fe72d68ec8b030bb4cfeeba0d2d3ec65 100644 (file)
@@ -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<YangParserConfiguration> {
         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;
         }
     }
index 78f827b0979aeba316a78c73a8bfbf021cebae62..9e6bab8b2454d1c01e4ee78761b9d61f15724620 100644 (file)
@@ -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());
     }
 }
index ff991b13a514cde1dd22f1e6b1b3aa759afaa94c..9ffa9a193656f5d111282c13f144660d7eac99dc 100644 (file)
@@ -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));
     }
 }
index 6f393cb99b3aa7d7273a6530a3b94a60e316083b..03ec36c79ab4bd8914d86586e46a89c88d8bc77a 100644 (file)
@@ -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<StatementParserMode> 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<YangParserConfiguration, CrossSourceStatementReactor> reactors =
+        new ConcurrentHashMap<>(2);
+    private final Function<YangParserConfiguration, CrossSourceStatementReactor> 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));
     }
 }
index c997cb1221f41265d84267e515674898340ab85c..5d57aa003d6d65dca09110868dad5a4e13582914 100644 (file)
@@ -85,6 +85,10 @@ final class BuildGlobalContext extends NamespaceStorageSupport implements Regist
     private final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supports;
     private final Set<SourceSpecificContext> sources = new HashSet<>();
     private final ImmutableSet<YangVersion> 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<SourceSpecificContext> libSources = new HashSet<>();
index eb51f196e505a97cf8d3e92038cbee72e3f9b438..88ffeda0cc6180b2eb840f2ce5cdf5e8ab39ee9b 100644 (file)
@@ -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<SemVer, OpenConfigVersionStatement, OpenConfigVersionEffectiveStatement> {
-    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
index 5cf46cc6ed879d8be904cf35a9a6a1757e6f0763..b3fb09280c333ae17c97b2c65284552daaf741c7 100644 (file)
@@ -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<YangVersion> 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();
     }
index 38f54d281c2014522c1f5a04357dcc9db1ef5973..ee7050b79e9e717e0765153943f062fd12334b47 100644 (file)
@@ -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
index f787c726adee82babad79c36b651ab64125af212..0916cf01875e964e6990bb13bf49e1e7e29a293e 100644 (file)
@@ -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
index 2d397c7e64220039b7ed31ccbadeeb3f52ea0667..27bd03887307e045df1535977eae17708dc23264 100644 (file)
@@ -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
index 0c7edc78b4879790d98f2206019859fa320882ba..94794464fdf84ba8f540962540cd99b86a912b31 100644 (file)
@@ -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<YangStmtMapping> 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
index c025ee374be7cc0016c1f48b387e3d2c0767f26e..4e3f0f0f841b0938885e197f7e73ad55db6820a7 100644 (file)
@@ -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
index 91f730f07554a6b8f2023f530dbfb520be89897a..2b44c3cf6555375d2e82066a4863b17098a9013b 100644 (file)
@@ -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
index a5b925706e3f2c802bf203e1f3520eb4ed75585f..88d52358f0889f2faf792360ec900a3838c59428 100644 (file)
@@ -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<ExtensionStatement, ExtensionEffectiveStatement> {
-    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
index f669707ce1dc9bb3af80be4f98d6a4e7a735eb32..fcee2e589196ea0a7d8413d2f1274c6c2714db33 100644 (file)
@@ -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<Object, UnrecognizedStatement, UnrecognizedEffectiveStatement>
         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
index a690334d3b5f8be5c7058b2dd4bc2558028bb0bc..6d23b13deb2c76f68986c82037d36ffe3d8d7bb4 100644 (file)
@@ -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
index 267030f82ab073d3f81d6d1142c061b8be253b9b..c4c7c21f6ed28233c521d796cee20e7c5833ffba 100644 (file)
@@ -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
index 16543412a60532caa24d17afbc4731da04f56ac0..f923a3d8377d235624fcdbf0c51c0001ff073d06 100644 (file)
@@ -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
index 062c99438d53718c10c50f96191bda2128e7c8f4..b6056b0fb4e77969fb114d9846c5f82db27fef55 100644 (file)
@@ -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<ImportStatement, ImportEffectiveStatement> {
-    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
index 58c31c750c26ff38060bbe99421302cbba744a03..0f8c0db26fedb17b38b1f943ea66e0eb4e3231c2 100644 (file)
@@ -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<LeafListStatement, LeafListEffectiveStatement> {
-    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
index 629b500ecee0e81fd43d587c19d7440cf4d8d8be..613dcf52cbd342c8350422b84b22c8741e287f8a 100644 (file)
@@ -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<YangStmtMapping> 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
index c1e599e6b8e4e34d3da15b702b043babb4dcced7..c2d7c6edba958805eae32320624182ab69cecf7a 100644 (file)
@@ -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<D extends DeclaredStatement<QName>,
         E extends SchemaTreeEffectiveStatement<D>> extends AbstractSchemaTreeStatementSupport<D, E> {
     AbstractImplicitStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<QName, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<QName, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override
index 38849ebce99e3a732da0f120526e2c196c3b24e2..4c27eb7c56672a833de42fef3f97515ffede6ed6 100644 (file)
@@ -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<D extends DeclaredStat
     private final Function<QNameModule, QName> createArgument;
 
     AbstractOperationContainerStatementSupport(final StatementDefinition publicDefinition,
-            final Function<QNameModule, QName> createArgument) {
-        super(publicDefinition, uninstantiatedPolicy());
+            final YangParserConfiguration config, final Function<QNameModule, QName> createArgument) {
+        super(publicDefinition, uninstantiatedPolicy(), config);
         this.createArgument = requireNonNull(createArgument);
     }
 
index d88f5c6a6fa69f869d203c4e219e25a6b76b87da..7c168a370e1296e74aeb95e804fcdc6df7b2ff5a 100644 (file)
@@ -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<StatementDefinition> 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);
         }
     }
 
index 7df1513a76901b9d973a717a17ff842a64f6d66f..0a7b8163362e9a3ebd8cb317a579d7a0597fb61f 100644 (file)
@@ -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<AnydataStatement, AnydataEffectiveStatement> {
-    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
index 5248afbf7b8a2752d3cc37963aaf752cf2d7e815..47d651a13b56136de36b86494a76ce89ca09e288 100644 (file)
@@ -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<AnyxmlStatement, AnyxmlEffectiveStatement> {
-    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
index ae6b798375bacf502382878b09e1527bda82e4b3..abd927c860d17dc91595dc0bc6f8ddb1463faf94 100644 (file)
@@ -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<ArgumentStatement, ArgumentEffectiveStatement> {
-    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
index c0efea9846708026e8b01918747821621ba9ddcd..6523e2a63c894d49c42f186753c431e27e47ca4e 100644 (file)
@@ -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<BaseStatement, BaseEffectiveStatement> {
     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
index 410797fd4bed03a64bc9f5033c8e3aba1823b9b2..2e8237417e460c1387558ab8e92a1e9970e57d83 100644 (file)
@@ -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<BelongsToStatement, BelongsToEffectiveStatement> {
     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
index d71163d9348f164c95751913a5524937ac8b443c..d0b7d1dea8f18a51d47cf4192e2da08757d364cb 100644 (file)
@@ -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<String, BitStatement, BitEffectiveStatement> {
-    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
index 4cbf7a9417d8bcbc7d6da200203b9fc05ffcb06d..a1751dacb674fc375cefd57550e113d3261a46cc 100644 (file)
@@ -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<CaseStatement, CaseEffectiveStatement> {
-    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
index 77ae7057b2da47577f10be0d360c58d78ad096c7..76bc640a476ea3f61082e969a485b3b068018f61 100644 (file)
@@ -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<ChoiceStatement, ChoiceEffectiveStatement>
         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
index 91ee45db9478b2c200e4c68d6f711e3f7cdc2681..d90bdb9bc49942b47cf6b28eaf774fb8dffc8455 100644 (file)
@@ -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<ConfigStatement, ConfigEffectiveStatement> {
-    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
index 9f8693f3fff650bb3a1c7d94c3263d93ec627333..9cf3c78e46450082b89ba0380b59a50bd4fca23b 100644 (file)
@@ -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<ContactStatement, ContactEffectiveStatement> {
-    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
index 25b8c9195494ee3eb9cf20af0077b14c44bb8fe4..24732865b56dfdf8dedf45453b61175838d6a8d3 100644 (file)
@@ -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<ContainerStatement, ContainerEffectiveStatement> {
-    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
index 7febd16f66f0f88c2a6192a8711665506df5a114..be34bba3bad9b8bf7b34f767e186c19a76ac6773 100644 (file)
@@ -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<DefaultStatement, DefaultEffectiveStatement> {
-    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
index ac17f9c71a65072eb826fc7267eb29213d546f20..ee3c121a354a4fa93ace0c3f891e7887e060a822 100644 (file)
@@ -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<DescriptionStatement, DescriptionEffectiveStatement> {
-    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
index 0e90bfb288dccabec00dd7859c263a3742397d42..bdf147af740763478b1c8eab7fafed9765c442dd 100644 (file)
@@ -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
index 6bd5bdecdc1815c6bdcf45a7ae352980e3b6b994..14c92727cff63d2966da6376deb552088538d3de 100644 (file)
@@ -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<String, EnumStatement, EnumEffectiveStatement> {
-    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
index a7556d72ae61659ca9a3122a2307e90c4d9ccf5a..5032fc1e1d294d1ed27bbc759d851f52f8b92987 100644 (file)
@@ -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<ErrorAppTagStatement, ErrorAppTagEffectiveStatement> {
     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
index b170b303bff889ee62306312f5ac06cf221bf01b..7dd59cb6b98a9f3ed87c0b549e3e69c4409908f4 100644 (file)
@@ -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<ErrorMessageStatement, ErrorMessageEffectiveStatement> {
     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
index 1e10c6a3117e39e98a977e8105b975f0ab5df9b9..ec92e28b2b1664d2f54c22ae5652fe0ccfc99121 100644 (file)
@@ -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<FeatureStatement, FeatureEffectiveStatement> {
-    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
index 0c739cdc443a68aba8a8643af677dc016ba0415c..6d969a06859564c1080928fa43c3774e9b73a58d 100644 (file)
@@ -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<Integer, FractionDigitsStatement, FractionDigitsEffectiveStatement> {
     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<FractionDigitsStatement, FractionDigitsEffectiveStatement> 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
index 586d431649adbac49464e1930295cdcbe6dc84b3..c1aea8e0ceedb4793c93047763e7573a2073be12 100644 (file)
@@ -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<GroupingStatement, GroupingEffectiveStatement> {
-    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
index 80f86437efbfdc3ca996ebb22a0ebfc0b572322e..1a97ae76da7398b2431d90d7893026914bb8c341 100644 (file)
@@ -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<IdentityStatement, IdentityEffectiveStatement> {
-    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
index ae186e361087f4cca3076732a7e59fe79ccbfa9f..079abafea5651699f8eccbb10a9f7e2ce9192d3d 100644 (file)
@@ -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<IncludeStatement, IncludeEffectiveStatement> {
-    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
index 2c2fbc266fa19d138df594f5c6de277f29233e23..9e7ce61de56ab88942120e40fb7fb6180f530c3a 100644 (file)
@@ -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<InputStatement, InputEffectiveStatement> {
-    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
index c83f6920c633df1d723ffe5c82e7f781561938ba..be86b67852b3abd3144807894cc1ddee7073f7c8 100644 (file)
@@ -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
index 1d0567707fa69a30e1cfb8fa37ea23bd672ec1df..afe0491bc4249fc1aa88d5c05144ab29471768e3 100644 (file)
@@ -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<LeafStatement, LeafEffectiveStatement> {
-    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
index 9b458dd3b344d40abb3d3faf28c857f394c24f6e..9a20e7997689c0902baeac3c6a4f1269866cc7a1 100644 (file)
@@ -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<List<ValueRange>, 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
index 69ab4f3e8dc31d9bdcd117f0ffb570e62ecc2bb2..4f762c4ff8bfe495bf1b4b2d0c7c25ae18470e8b 100644 (file)
@@ -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<MandatoryStatement, MandatoryEffectiveStatement> {
-    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
index 3054ad531f0bcb0f989b92c310b38361ddf14fbe..2c1055c9620fade1b4b2faac2e39062a93637f2c 100644 (file)
@@ -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<MaxElementsStatement, MaxElementsEffectiveStatement> {
-    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
index e549fddad96112bfd65419d8b6d1467c97c24dba..dd7b469cfe246fc45a07ac0bc09feab165678032 100644 (file)
@@ -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<Integer, MinElementsStatement, MinElementsEffectiveStatement> {
-    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
index 310c4d01cba84294cf73ba0de4c17c9f91aa0f82..06dbd33ca0fd45744e262d0e80510c40aebc80ba 100644 (file)
@@ -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<ModifierKind, ModifierStatement, ModifierEffectiveStatement> {
-    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
index 2aca66cfb29f837e498b384dbf9245caec7cc61a..9430a103fc98b5258e454f70b7ae37d7ea17934c 100644 (file)
@@ -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);
index b93e5dfbe6c9c8ffc72ea94a41204c26276a946f..e702e15a62f5f62ff1838ea4bd64252685f1d1a0 100644 (file)
@@ -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<XMLNamespace, NamespaceStatement, NamespaceEffectiveStatement> {
-    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
index 7f3ce4ce3a675d13609e99bcf433a3b81b26c48a..4b95ce08844fafd11dc1744ae79fa39973d76e46 100644 (file)
@@ -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<Ordering, OrderedByStatement, OrderedByEffectiveStatement> {
     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
index ac7b0c5fef3782847d9cbe18081fdca8ceba2840..f1f92c8cf5d1209477a259f8563ccf6dea4b112c 100644 (file)
@@ -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<OrganizationStatement, OrganizationEffectiveStatement> {
-    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
index ca39985599fe63a98b68b89a4bed4fc68eb96cb3..5ef86b397a4b5d3f03f4f753a18963db6346ce22 100644 (file)
@@ -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<OutputStatement, OutputEffectiveStatement> {
-    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
index 54c044b8199f9ae2fc8257ffeae19b38b958e5bb..fd4f43ee2e5e11290ac40c9191e022618be2fa6d 100644 (file)
@@ -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<Uint32, PositionStatement, PositionEffectiveStatement> {
-    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
index 62a5c52d516d3d00153b97f6e026d14a7f671770..f6cb1e8608178b8a43b5c2832773a569e784a432 100644 (file)
@@ -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<PrefixStatement, PrefixEffectiveStatement> {
     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
index 537902afef8bace404b74d2a9ed2ca5cbe209e5e..7c473b110c9caf3fc85db3e3c5cc9eefeacbab80 100644 (file)
@@ -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<PresenceStatement, PresenceEffectiveStatement> {
     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
index 6a6067beb892de598845597781b6a944c57758cc..8584249a0c8d06037c22caab1394407e829d3cfa 100644 (file)
@@ -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
index 4a02bdaf0b6e1ebd53b2345045fafca8a6864d40..6b78825df739512375a49db3c2454a13764847b2 100644 (file)
@@ -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<ReferenceStatement, ReferenceEffectiveStatement> {
-    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
index 29618230fd1ddde9b4a0dcebbd58625976c98524..52e7aa531de13d3530531f4c760e8137f686b1a8 100644 (file)
@@ -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<RequireInstanceStatement, RequireInstanceEffectiveStatement> {
-    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
index fe239d39c04d7ffc8bed58bb9110d4aac16da6d7..63516fd30a6812914fdf04c9c5230f42fd83df8b 100644 (file)
@@ -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<Revision, RevisionDateStatement, RevisionDateEffectiveStatement> {
     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
index 92d38ca583d0862022124b53fd923fa0310437e0..21037327771d8d0f1d2d10466437ea7631e422e1 100644 (file)
@@ -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<Revision, RevisionStatement, RevisionEffectiveStatement> {
-    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
index e98cf06f3dba57ea0de18ac5d9b56d8d24f88c2a..9e50e8bff5cd520433044e27c85bec4ec9f2c9cd 100644 (file)
@@ -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<RpcStatement, RpcEffectiveStatement> {
-    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<QName, RpcStatement, RpcEffectiveStatement> stmt) {
         super.onFullDefinitionDeclared(stmt);
index ed43894378c8b931b56f13329e70baa0cd399d61..f3a48109fd198d46ef6ebb0460db147da4b60fe0 100644 (file)
@@ -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<Status, StatusStatement, StatusEffectiveStatement> {
     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
index 6f5c55c2ed644cbbfd9317547a608f7a89a83d57..e145842a3bd554b363366df0e061c3e3b03d4751 100644 (file)
@@ -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
index 9ce1599daa357699d7997a6e3643843c63ef4c9c..6e1a99e939ea69e1c9674136140fc974bd0eaf20 100644 (file)
@@ -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
index 2359bd24957671b2464cae2b32e6f1dbf5500832..9fe5a18c11be265f24dbc29910c78d4198fae122 100644 (file)
@@ -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<UnitsStatement, UnitsEffectiveStatement> {
-    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
index 6a2efa18fca728da796d1c8beb88b2f0035f517a..749316519ac4d1a062f9cd11bc923389101a2311 100644 (file)
@@ -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<Integer, ValueStatement, ValueEffectiveStatement> {
-    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
index c5692f4637ca8e5d259e6ca95aad9309cce2d1de..e6b64be9945dd5b0d25e5b7211e25b503faf272c 100644 (file)
@@ -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);
index 1b40a86703ca73a7ae234f8696c753ac6dc1d02e..4d7c6435df8e07744cf5951a7591d19eb0eae2c7 100644 (file)
@@ -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<YangVersion, YangVersionStatement, YangVersionEffectiveStatement> {
     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
index 92045cf46fab7ddb4cb38c9e122881b44197fa0b..19c5499a994369eb370f52b2d10a96eabe4772ae 100644 (file)
@@ -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<YinElementStatement, YinElementEffectiveStatement> {
     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
index d4c2f3f4d5df20634bc1fcc1bb975f6826196ec4..edcd4c822deacee75ff381803e9ccc49d31e3158 100644 (file)
@@ -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<UnqualifiedQName, ModuleStatement, ModuleEffectiveStatement> {
-    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
index afadd137a08fff41da8f978568910ba87f754b94..975a81e62984ece953f91744f126109b829342c3 100644 (file)
@@ -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<NotificationStatement, NotificationEffectiveStatement> {
-    AbstractNotificationStatementSupport() {
-        super(YangStmtMapping.NOTIFICATION, uninstantiatedPolicy());
+    AbstractNotificationStatementSupport(final YangParserConfiguration config) {
+        super(YangStmtMapping.NOTIFICATION, uninstantiatedPolicy(), config);
     }
 
     @Override
index f85965fb9373ef0c9edf56dc1e363ce86f91b369..3327cf617fc2242b8a400b04c2ac54d947cc719c 100644 (file)
@@ -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
index 173d1d6c1ca94b5110d475f55c1796d2dc31ce1c..f6a54d3bafaa5a0993c75a999f0904dffde794e2 100644 (file)
@@ -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<StatementDefinition> ILLEGAL_PARENTS = ImmutableSet.of(
-            YangStmtMapping.NOTIFICATION, YangStmtMapping.RPC, YangStmtMapping.ACTION);
-    private static final NotificationStatementRFC7950Support INSTANCE = new NotificationStatementRFC7950Support();
+    private static final ImmutableSet<StatementDefinition> 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
index 20a1733cb3848ad8aa3091bc584003776e78f55c..f6ba62d21146793f681e67312ea72c9518131a8f 100644 (file)
@@ -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<PathExpression, PathStatement, PathEffectiveStatement> {
     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
index a671b87741cc939df2af71e9684095e471a0ed73..33e7311776ffaa4bd9a7d2d3ef6c196df7b801e1 100644 (file)
@@ -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<PatternExpression, PatternStatement, PatternEffectiveStatement> {
-    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
index a5bf8314e13b4e75e3f4bf5323aaeae7cb63493a..256a97ac0a7340f8714083ff78a80a6dc946cd24 100644 (file)
@@ -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<Descendant, RefineStatement, RefineEffectiveStatement> {
-    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
index 200554ea1c1e83aeb1bf69be2ec91459d736b950..0e1e7a897d24e38b70212abfe96d4939b36e89d0 100644 (file)
@@ -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<UnqualifiedQName, SubmoduleStatement, SubmoduleEffectiveStatement> {
-    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
index ee60b98356e106069d6c6332acd18d565a62a4d0..edf67dca168a905941b40abe1613e83b99e3125a 100644 (file)
@@ -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<IdentityRefSpecification> {
+    AbstractIdentityRefSpecificationSupport(final YangParserConfiguration config) {
+        super(config);
+    }
+
     @Override
     public final void onFullDefinitionDeclared(final Mutable<QName, IdentityRefSpecification,
             EffectiveStatement<QName, IdentityRefSpecification>> stmt) {
index 1daef24c874c9da71d87f1c98bcee8689fc2beff..bbb88fe0ff7f5c46d41cf9cbc6e9817a918db6de 100644 (file)
@@ -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<LeafrefSpecification> {
+    AbstractLeafrefSpecificationSupport(final YangParserConfiguration config) {
+        super(config);
+    }
+
     @Override
     protected final LeafrefSpecification createDeclared(final StmtContext<QName, LeafrefSpecification, ?> ctx,
             final ImmutableList<? extends DeclaredStatement<?>> substatements) {
index 176bdd30a050ae837e0dd5f795e11c87c5298499..1207bc9a616ad8f21db7a93006897f5f0efcdcfb 100644 (file)
@@ -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<TypeStatement> {
-    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<String, BuiltinEffectiveStatement> STATIC_BUILT_IN_TYPES =
         ImmutableMap.<String, BuiltinEffectiveStatement>builder()
@@ -116,19 +114,20 @@ abstract class AbstractTypeStatementSupport extends AbstractTypeSupport<TypeStat
             .put(TypeDefinitions.UINT64.getLocalName(), BuiltinEffectiveStatement.UINT64)
             .build();
 
-    private static final ImmutableMap<String, StatementSupport<?, ?, ?>> DYNAMIC_BUILT_IN_TYPES =
-            ImmutableMap.<String, StatementSupport<?, ?, ?>>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<String, StatementSupport<?, ?, ?>> dynamicBuiltInTypes;
+
+    AbstractTypeStatementSupport(final YangParserConfiguration config) {
+        super(config);
+        dynamicBuiltInTypes = ImmutableMap.<String, StatementSupport<?, ?, ?>>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<String, String> BUILT_IN_TYPES = Maps.uniqueIndex(ImmutableSet.copyOf(
-        Iterables.<String>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<TypeStat
 
     @Override
     public boolean hasArgumentSpecificSupports() {
-        return !DYNAMIC_BUILT_IN_TYPES.isEmpty();
+        return !dynamicBuiltInTypes.isEmpty();
     }
 
     @Override
     public StatementSupport<?, ?, ?> getSupportSpecificForArgument(final String argument) {
-        return DYNAMIC_BUILT_IN_TYPES.get(argument);
+        return dynamicBuiltInTypes.get(argument);
     }
 
     @Override
index df2a5f05eb637a05d4caab31a17441530323d242..51c400e42f233d7fe5ca641372b82fb278f7723e 100644 (file)
@@ -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<T extends TypeStatement>
         TypeDefinitions.UNION),
         QName::getLocalName);
 
-    AbstractTypeSupport() {
-        super(YangStmtMapping.TYPE, StatementPolicy.exactReplica());
+    AbstractTypeSupport(final YangParserConfiguration config) {
+        super(YangStmtMapping.TYPE, StatementPolicy.exactReplica(), config);
     }
 
     @Override
index aba2622bca018559265c20f1ba36d80a7aa3c602..27b5bd5df37574845ca28f87fe326e03f399e9e6 100644 (file)
@@ -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<BitsSpecification> {
-    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() {
index 46e05fe150bc02f3a1205b01e9993d2819ae6fb3..ea5beadc4f89e766aab9f62f459881e9e447dd90 100644 (file)
@@ -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<Decimal64Specification> {
-    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() {
index 4c174fdb3b1017ffe544a41e70b2b0e0b4ddc8d5..fce5ad094b79f659830e8b7daf6bb8c9b63482bd 100644 (file)
@@ -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<EnumSpecificati
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
             SubstatementValidator.builder(YangStmtMapping.TYPE).addMultiple(YangStmtMapping.ENUM).build();
 
+    EnumSpecificationSupport(final YangParserConfiguration config) {
+        super(config);
+    }
+
     @Override
     protected SubstatementValidator getSubstatementValidator() {
         return SUBSTATEMENT_VALIDATOR;
index bc2eb81d5ecb3c1b4016882d81200730f38d310f..2a2ab844fb0155d6edaad73d0d29e99167229a04 100644 (file)
@@ -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 IdentityRefSpecificationRFC6020Support extends AbstractIdentityRefSpecificationSupport {
-    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
-        .TYPE)
-        .addMandatory(YangStmtMapping.BASE)
-        .build();
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+        SubstatementValidator.builder(YangStmtMapping.TYPE).addMandatory(YangStmtMapping.BASE).build();
+
+    IdentityRefSpecificationRFC6020Support(final YangParserConfiguration config) {
+        super(config);
+    }
 
     @Override
     protected SubstatementValidator getSubstatementValidator() {
index 18559754a0f6c39ead04d1fe9d8b2624ca2f0257..176442e6a2eb6338e40f8d892183e2667950cc86 100644 (file)
@@ -8,16 +8,19 @@
 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 identityref statement.
  */
 final class IdentityRefSpecificationRFC7950Support extends AbstractIdentityRefSpecificationSupport {
-    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
-            .TYPE)
-            .addMultiple(YangStmtMapping.BASE)
-            .build();
+    private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
+        SubstatementValidator.builder(YangStmtMapping.TYPE).addMultiple(YangStmtMapping.BASE).build();
+
+    IdentityRefSpecificationRFC7950Support(final YangParserConfiguration config) {
+        super(config);
+    }
 
     @Override
     protected SubstatementValidator getSubstatementValidator() {
index 4daeeb9ed5a8ff3b177186d78c810bb3a431c1e5..f30af56c5695cdffc4a0da6c82a0f4887dc1cfe2 100644 (file)
@@ -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.RequireInstanceEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.InstanceIdentifierSpecification;
+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.InstanceIdentifierTypeBuilder;
 import org.opendaylight.yangtools.yang.model.ri.type.RestrictedTypes;
@@ -23,10 +24,12 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 final class InstanceIdentifierSpecificationSupport
         extends AbstractTypeSupport<InstanceIdentifierSpecification> {
-    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() {
index 699a3fe87a6ea93b3309c567bbbb55afc413c672..0b71321baf33406f00c71eee7254390bd5a12680 100644 (file)
@@ -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() {
index 24d9f8eb3f13084e5ca14ea4c0e97348c8e4bbb1..1091cf1218929c6105ec231dbe9c48407163d265 100644 (file)
@@ -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;
index 58b4cac396c4d7256d68e4073014ac61d0bc5542..87b478756d7abe87fdf5a0e9540f8c83083dbfa4 100644 (file)
@@ -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
index 5f1054f78e0286e6807bfeace30be0a60e4c592b..1076fc3a47d03bd1273530ea2c305b540082547c 100644 (file)
@@ -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<String, StatementSupport<?, ?, ?>> 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<String, StatementSupport<?, ?, ?>> 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);
     }
 
index b8638957292e35fb4ade99a5eaef05440905c91a..f90526c62e39b386975281552b287ad09efb90da 100644 (file)
@@ -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<UnionSpecification> {
     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() {
index 4efba3e7f256745f93c1e5cd36d7cb7ea13a9f46..157d91d0848ac80eb577b9f052103a60dcb41a90 100644 (file)
@@ -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 (file)
index 8f69864..0000000
+++ /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
-    }
-}
index b680c3b8d38d8a5b03e99d2de55d43890fb2879f..c2044ca1a48854b66c808b51bc873b9b387b8301 100644 (file)
@@ -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();
index 906d6bd64106f813cc97d2b718b6dd3c68255744..d11a51b4e2b0301200ac968abd3a659fb36610ba 100644 (file)
@@ -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<ThirdPartyExtensionStatement, ThirdPartyExtensionEffectiveStatement> {
-    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
index 773919ff6ce3d83f3ef397dad43368ca4fd0c831..57665acb4f14a24adcebffee57367077a50bc8aa 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-parser-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-repo-api</artifactId>
index 7d0babf5c20d5845d490a76043e71a7f02db8089..cc4b0fe48564f483a7dd3c734dc2c2e84739cf40 100644 (file)
@@ -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;
 
index 248d7233f4a3cacef0d5fb31f6f62a31124c931a..1fe443b3d2fd9cf7209d25eba99895eb5c01018a 100644 (file)
@@ -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<D extends DeclaredStatemen
     private final @NonNull D emptyDeclaredTrue;
 
     protected AbstractBooleanStatementSupport(final StatementDefinition publicDefinition,
-            final E emptyEffectiveFalse, final E emptyEffectiveTrue, final StatementPolicy<Boolean, D> policy) {
-        super(publicDefinition, policy);
+            final E emptyEffectiveFalse, final E emptyEffectiveTrue, final StatementPolicy<Boolean, D> policy,
+            final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
         this.emptyEffectiveFalse = requireNonNull(emptyEffectiveFalse);
         this.emptyEffectiveTrue = requireNonNull(emptyEffectiveTrue);
         emptyDeclaredFalse = requireNonNull(emptyEffectiveFalse.getDeclared());
index 8e30af043751276ccf5652ad50ec20231f587940..2e2dc95ea9637978cc0bd6e153b9325ca4adc2f5 100644 (file)
@@ -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<D extends DeclaredStatement<Empty>,
         E extends EffectiveStatement<Empty, D>> extends AbstractStatementSupport<Empty, D, E> {
     protected AbstractEmptyStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<Empty, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<Empty, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override
index cf38300225f1028401bdedd2f43862b57dc2ab59..f9486695b8ebb11f0349423be2abca53cf805f27 100644 (file)
@@ -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<A, D extends DeclaredStat
             });
 
     protected AbstractInternedStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<A, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<A, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override
index 5a2894d899a2b3e0f536f2621c4348edf60366f7..27fc045299148c01cbe37a54a50008a9aaf60657 100644 (file)
@@ -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<D extends DeclaredStatement<String>,
         E extends EffectiveStatement<String, D>> extends AbstractInternedStatementSupport<String, D, E> {
     protected AbstractInternedStringStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<String, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<String, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override
index 23497bf77c8737032905f2beda96bf54d89b2ca9..fe2debd8f147327efc8c458a258f7bfcae550e2d 100644 (file)
@@ -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<D extends DeclaredStatement<QName>,
         E extends EffectiveStatement<QName, D>> extends AbstractStatementSupport<QName, D, E> {
     protected AbstractQNameStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<QName, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<QName, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override
index 4e41b1b0f44d57a0d119c1eca8e564cd0522312e..c82685d1ee9ce22717756170ae3384acac883c0a 100644 (file)
@@ -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<D extends DeclaredState
         StatementPolicy.copyDeclared(new SchemaTreeEquality<>());
 
     protected AbstractSchemaTreeStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<QName, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<QName, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     /**
index 2ab22dde41b06cfba49714e2b5572ef12b554753..8c4770ecd643b79cebb622d42bea5915dd0dbfe0 100644 (file)
@@ -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<A, D extends DeclaredStatement<A>,
         E extends EffectiveStatement<A, D>> extends StatementSupport<A, D, E> {
-    protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy<A, D> policy) {
+    private final boolean retainDeclarationReference;
+
+    protected AbstractStatementSupport(final StatementDefinition publicDefinition, final StatementPolicy<A, D> policy,
+            final YangParserConfiguration config) {
         super(publicDefinition, policy);
+        this.retainDeclarationReference = config.retainDeclarationReferences();
     }
 
     @Override
     public final D createDeclared(final StmtContext<A, D, ?> 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<A, D, ?> ctx,
             @NonNull ImmutableList<? extends DeclaredStatement<?>> substatements);
 
+    private @NonNull D attachDeclarationReference(final @NonNull D stmt, final @NonNull StmtContext<A, D, ?> 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<A, D> stmt,
             final Stream<? extends StmtContext<?, ?, ?>> declaredSubstatements,
index 9cd1fcf6524c50f9b190d25208b1185b14d00947..0491c408a8498980872417b5bfd07cd14ce1ee71 100644 (file)
@@ -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<D extends DeclaredStatement<String>,
         E extends EffectiveStatement<String, D>> extends AbstractStatementSupport<String, D, E> {
     protected AbstractStringStatementSupport(final StatementDefinition publicDefinition,
-            final StatementPolicy<String, D> policy) {
-        super(publicDefinition, policy);
+            final StatementPolicy<String, D> policy, final YangParserConfiguration config) {
+        super(publicDefinition, policy, config);
     }
 
     @Override