Fix StmtContext nullness problems 60/77260/3
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 24 Oct 2018 14:24:20 +0000 (16:24 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 26 Oct 2018 18:01:09 +0000 (20:01 +0200)
Introduce coerceParentContext() and coerce(Raw)StatementArgument(),
which are guaranteed to return a non-null reference or throw
a VerifyException. Convert users pointed out by Eclipse nullness
analysis to use these instead their @Nullable counterparts.

JIRA: YANGTOOLS-907
Change-Id: Ib6d80a9597ec8437194dc553ea71445599ee381c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
55 files changed:
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java
yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java
yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java
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/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java
yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.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/AugmentEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.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/deviation/DeviationStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.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/UnrecognizedEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.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/NotificationEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.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/AbstractTypeStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesEffectiveStatementImpl.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java

index 24b3b3428817cb7580ce33b291c7d8af14e1c5e0..8b8dc70a864bdbf023e868cf5e82c4f66b34a66b 100644 (file)
@@ -28,7 +28,7 @@ public final class AnyxmlSchemaLocationEffectiveStatementImpl
     AnyxmlSchemaLocationEffectiveStatementImpl(
             final StmtContext<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement, ?> ctx) {
         super(ctx);
-        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType());
     }
 
     @Override
index 2b77f4f894d695dbf66ba7a8607844406d1b02f4..9e9b13b6b5c84c43b243b7491c8794279a6320a4 100644 (file)
@@ -45,7 +45,7 @@ public final class AnyxmlSchemaLocationStatementSupport
     public void onFullDefinitionDeclared(final Mutable<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement,
             EffectiveStatement<SchemaNodeIdentifier, AnyxmlSchemaLocationStatement>> stmt) {
         super.onFullDefinitionDeclared(stmt);
-        stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, ANYXML_SCHEMA_LOCATION, stmt);
+        stmt.coerceParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, ANYXML_SCHEMA_LOCATION, stmt);
     }
 
     @Override
index 1e6a7dddf2741e4f504d3ecc2d03a41ea9e7cb47..0bbd49d5db68326b8cb54286c2c54f6e05458922 100644 (file)
@@ -42,7 +42,7 @@ abstract class AbstractHashedValueStatementSupport
 
         Effective(final StmtContext<Void, OpenConfigHashedValueStatement, ?> ctx) {
             super(ctx);
-            path = ctx.getParentContext().getSchemaPath().get().createChild(
+            path = ctx.coerceParentContext().getSchemaPath().get().createChild(
                 ctx.getPublicDefinition().getStatementName());
         }
 
index c770f0c9f12b04863704923cea0bedda94579267..a2b65d529b8e9f5229273069d338fe591903ed43 100644 (file)
@@ -40,7 +40,7 @@ public final class DefaultDenyAllStatementSupport
 
         Effective(final StmtContext<Void, DefaultDenyAllStatement, ?> ctx) {
             super(ctx);
-            path = ctx.getParentContext().getSchemaPath().get().createChild(
+            path = ctx.coerceParentContext().getSchemaPath().get().createChild(
                 ctx.getPublicDefinition().getStatementName());
         }
 
index 002bcc5569068faa34b24f5550b6b840162f4f73..65969ce5e29a1d46eedb6814cdda42dc520a0e45 100644 (file)
@@ -40,7 +40,7 @@ public final class DefaultDenyWriteStatementSupport
 
         Effective(final StmtContext<Void, DefaultDenyWriteStatement, ?> ctx) {
             super(ctx);
-            path = ctx.getParentContext().getSchemaPath().get().createChild(
+            path = ctx.coerceParentContext().getSchemaPath().get().createChild(
                 ctx.getPublicDefinition().getStatementName());
         }
 
index b22fb0691e84bfa457d91df9c75d115e8831c6f8..9a3337683dedfbe952df6338459e774264e0dfc9 100644 (file)
@@ -50,7 +50,7 @@ public final class AnnotationStatementSupport
 
         Effective(final StmtContext<String, AnnotationStatement, ?> ctx) {
             super(ctx);
-            path = ctx.getParentContext().getSchemaPath().get().createChild(
+            path = ctx.coerceParentContext().getSchemaPath().get().createChild(
                 StmtContextUtils.parseIdentifier(ctx, argument()));
 
             final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
@@ -123,7 +123,7 @@ public final class AnnotationStatementSupport
 
     @Override
     public void onStatementAdded(final Mutable<String, AnnotationStatement, AnnotationEffectiveStatement> stmt) {
-        final StatementDefinition parentDef = stmt.getParentContext().getPublicDefinition();
+        final StatementDefinition parentDef = stmt.coerceParentContext().getPublicDefinition();
         SourceException.throwIf(YangStmtMapping.MODULE != parentDef && YangStmtMapping.SUBMODULE != parentDef,
                 stmt.getStatementSourceReference(),
                 "Annotations may only be defined at root of either a module or a submodule");
index 6a4cad48d26a2651c21b0676b170d9f30af274c1..f5fd637129d8fc566472f3f74fada230a12289a1 100644 (file)
@@ -41,7 +41,7 @@ final class YangDataEffectiveStatementImpl extends UnknownEffectiveStatementBase
         }
         this.maybeQNameArgument = maybeQNameArgumentInit;
 
-        path = ctx.getParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
+        path = ctx.coerceParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
         container = findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).get();
 
         // TODO: this is strong binding of two API contracts. Unfortunately ContainerEffectiveStatement design is
index d7179ae1a100e089ea207f306e3ea08c5c51f93b..729fbb870e2d768f1a7a3e397898108dd4f7ebca 100644 (file)
@@ -83,7 +83,7 @@ public final class YangDataStatementSupport extends AbstractStatementSupport<Str
             EffectiveStatement<String, YangDataStatement>> ctx) {
         // as per https://tools.ietf.org/html/rfc8040#section-8,
         // yang-data is ignored unless it appears as a top-level statement
-        if (ctx.getParentContext().getParentContext() != null) {
+        if (ctx.coerceParentContext().getParentContext() != null) {
             ctx.setIsSupportedToBuildEffective(false);
         }
     }
index 7d19c52b60934bed497d4d1dd1bf4a79e3c18709..cb2c434daeb95b0ba34bc904c9dbd72016f0e5fe 100644 (file)
@@ -815,7 +815,7 @@ public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E
             return false;
         }
         if (NOCOPY_FROM_GROUPING_SET.contains(def)) {
-            return !YangStmtMapping.GROUPING.equals(stmtContext.getParentContext().getPublicDefinition());
+            return !YangStmtMapping.GROUPING.equals(stmtContext.coerceParentContext().getPublicDefinition());
         }
 
         LOG.debug("Will copy {} statement {}", def, stmtContext);
index f45d65c0bddde499414f17ac121510d3e9fc96fb..10e59b4051478e05e9781a628828576b4de1669a 100644 (file)
@@ -140,7 +140,7 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
             }
 
             final SchemaPath path;
-            if ((StmtContextUtils.producesDeclared(getParentContext(), ChoiceStatement.class)
+            if ((StmtContextUtils.producesDeclared(parent, ChoiceStatement.class)
                     || Boolean.TRUE.equals(parent.getFromNamespace(AugmentToChoiceNamespace.class, parent)))
                     && isSupportedAsShorthandCase()) {
                 path = parentPath.createChild(qname);
@@ -200,7 +200,7 @@ final class SubstatementContext<A, D extends DeclaredStatement<A>, E extends Eff
 
         final boolean isConfig;
         if (configStatement != null) {
-            isConfig = configStatement.getStatementArgument();
+            isConfig = configStatement.coerceStatementArgument();
 
             // Validity check: if parent is config=false this cannot be a config=true
             InferenceException.throwIf(isConfig && !parentIsConfig, getStatementSourceReference(),
index e55759cb3a7e2ec3caf57757ce7c0bc574b63458..dbc862152b85ba498ce030143e922acb6f5176f5 100644 (file)
@@ -25,7 +25,7 @@ final class OpenConfigVersionEffectiveStatementImpl extends
 
     OpenConfigVersionEffectiveStatementImpl(final StmtContext<SemVer, OpenConfigVersionStatement, ?> ctx) {
         super(ctx);
-        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType());
     }
 
     @Override
index 9f7c83cb19afde37772042cc1ecd4b7955e5db02..0ed659cdc0aacd26e02e7ccf30d3e6719ee5f244 100644 (file)
@@ -60,7 +60,7 @@ public final class ActionStatementSupport
     @Override
     public void onStatementAdded(
             final StmtContext.Mutable<QName, ActionStatement, EffectiveStatement<QName, ActionStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index cc4f665ab7e6221b026a8a7a1afe7791250ec7a3..91726646402cc20439e8a3d0945c09993bdedaa3 100644 (file)
@@ -49,7 +49,7 @@ public final class AnydataStatementSupport extends
     @Override
     public void onStatementAdded(final Mutable<QName, AnydataStatement,
             EffectiveStatement<QName, AnydataStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 86f7114c1c1aae4d5de675418345cc7260bf0b23..f2ed909fe48b124fce05ce42f38b263bfb541cd0 100644 (file)
@@ -48,7 +48,7 @@ public final class AnyxmlStatementSupport
 
     @Override
     public void onStatementAdded(final Mutable<QName, AnyxmlStatement, AnyxmlEffectiveStatement> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 18093dc432d9bf111c5e698d4357683d3e638f03..cd2a4226a027d75745b6d004674e74e01562b43e 100644 (file)
@@ -96,7 +96,7 @@ abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport<
                 augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL);
         final Prerequisite<Mutable<?, ?, EffectiveStatement<?, ?>>> target =
                 augmentAction.mutatesEffectiveCtxPath(getSearchRoot(augmentNode),
-                    ChildSchemaNodeNamespace.class, augmentNode.getStatementArgument().getPathFromRoot());
+                    ChildSchemaNodeNamespace.class, augmentNode.coerceStatementArgument().getPathFromRoot());
 
         augmentAction.apply(new ModelActionBuilder.InferenceAction() {
             @Override
@@ -146,14 +146,14 @@ abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport<
                 /*
                  * Do not fail, if it is an uses-augment to an unknown node.
                  */
-                if (YangStmtMapping.USES == augmentNode.getParentContext().getPublicDefinition()) {
+                if (YangStmtMapping.USES == augmentNode.coerceParentContext().getPublicDefinition()) {
+                    final SchemaNodeIdentifier augmentArg = augmentNode.coerceStatementArgument();
                     final Optional<StmtContext<?, ?, ?>> targetNode = ChildSchemaNodeNamespace.findNode(
-                        getSearchRoot(augmentNode), augmentNode.getStatementArgument());
+                        getSearchRoot(augmentNode), augmentArg);
                     if (targetNode.isPresent() && StmtContextUtils.isUnknownStatement(targetNode.get())) {
                         augmentNode.setIsSupportedToBuildEffective(false);
-                        LOG.warn(
-                                "Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}",
-                                augmentNode.getStatementArgument(), augmentNode.getStatementSourceReference());
+                        LOG.warn("Uses-augment to unknown node {}. Augmentation has not been performed. At line: {}",
+                            augmentArg, augmentNode.getStatementSourceReference());
                         return;
                     }
                 }
@@ -165,8 +165,8 @@ abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport<
     }
 
     private static StmtContext<?, ?, ?> getSearchRoot(final StmtContext<?, ?, ?> augmentContext) {
-        final StmtContext<?, ?, ?> parent = augmentContext.getParentContext();
         // Augment is in uses - we need to augment instantiated nodes in parent.
+        final StmtContext<?, ?, ?> parent = augmentContext.coerceParentContext();
         if (YangStmtMapping.USES == parent.getPublicDefinition()) {
             return parent.getParentContext();
         }
@@ -175,7 +175,7 @@ abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport<
 
     static void copyFromSourceToTarget(final StatementContextBase<?, ?, ?> sourceCtx,
             final StatementContextBase<?, ?, ?> targetCtx) {
-        final CopyType typeOfCopy = UsesStatement.class.equals(sourceCtx.getParentContext().getPublicDefinition()
+        final CopyType typeOfCopy = UsesStatement.class.equals(sourceCtx.coerceParentContext().getPublicDefinition()
                 .getDeclaredRepresentationClass()) ? CopyType.ADDED_BY_USES_AUGMENTATION
                 : CopyType.ADDED_BY_AUGMENTATION;
         /*
index 1f567f23ca756c550df0a82e16c06aeb6293cf69..2c13b1de458a4eea387d66e13f8c1860d58d89e8 100644 (file)
@@ -49,7 +49,7 @@ final class AugmentEffectiveStatementImpl
             EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> ctx) {
         super(ctx);
 
-        this.targetPath = ctx.getStatementArgument().asSchemaPath();
+        this.targetPath = ctx.coerceStatementArgument().asSchemaPath();
 
         final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx);
         this.namespace = rootModuleQName.getNamespace();
index abcd1f1018892c7de7c954d6a05c1135be36d8c0..2d38253cc461896fe64140d37e572842469643a1 100644 (file)
@@ -65,7 +65,7 @@ public final class BaseStatementSupport
         final Mutable<?, ?, ?> baseParentCtx = baseStmtCtx.getParentContext();
         if (StmtContextUtils.producesDeclared(baseParentCtx, IdentityStatement.class)) {
 
-            final QName baseIdentityQName = baseStmtCtx.getStatementArgument();
+            final QName baseIdentityQName = baseStmtCtx.coerceStatementArgument();
             final ModelActionBuilder baseIdentityAction = baseStmtCtx.newInferenceAction(
                 ModelProcessingPhase.STATEMENT_DEFINITION);
             final Prerequisite<StmtContext<?, ?, ?>> requiresPrereq = baseIdentityAction.requiresCtx(baseStmtCtx,
@@ -77,7 +77,7 @@ public final class BaseStatementSupport
                 @Override
                 public void apply(final InferenceContext ctx) {
                     List<StmtContext<?, ?, ?>> derivedIdentities = baseStmtCtx.getFromNamespace(
-                        DerivedIdentitiesNamespace.class, baseStmtCtx.getStatementArgument());
+                        DerivedIdentitiesNamespace.class, baseIdentityQName);
                     if (derivedIdentities == null) {
                         derivedIdentities = new ArrayList<>(1);
                         baseStmtCtx.addToNs(DerivedIdentitiesNamespace.class, baseIdentityQName, derivedIdentities);
index b7511f69ea50366b42bf69fb8e516a203dad72d8..29bd851a2030874f01d3a90ca606bd4193182cb2 100644 (file)
@@ -74,7 +74,7 @@ public final class BelongsToStatementSupport extends
 
         final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx);
         final Prerequisite<StmtContext<?, ?, ?>> belongsToPrereq = belongsToAction.requiresCtx(belongsToCtx,
-            ModuleNamespaceForBelongsTo.class, belongsToCtx.getStatementArgument(),
+            ModuleNamespaceForBelongsTo.class, belongsToCtx.coerceStatementArgument(),
             ModelProcessingPhase.SOURCE_LINKAGE);
 
         belongsToAction.apply(new InferenceAction() {
@@ -84,7 +84,7 @@ public final class BelongsToStatementSupport extends
 
                 belongsToCtx.addToNs(BelongsToModuleContext.class, belongsToSourceIdentifier, belongsToModuleCtx);
                 belongsToCtx.addToNs(BelongsToPrefixToModuleCtx.class,
-                    findFirstDeclaredSubstatement(belongsToCtx, PrefixStatement.class).getStatementArgument(),
+                    findFirstDeclaredSubstatement(belongsToCtx, PrefixStatement.class).coerceStatementArgument(),
                     belongsToModuleCtx);
             }
 
@@ -100,7 +100,7 @@ public final class BelongsToStatementSupport extends
 
     private static SourceIdentifier getSourceIdentifier(final StmtContext<String, BelongsToStatement,
             EffectiveStatement<String, BelongsToStatement>> belongsToCtx) {
-        return RevisionSourceIdentifier.create(belongsToCtx.getStatementArgument());
+        return RevisionSourceIdentifier.create(belongsToCtx.coerceStatementArgument());
     }
 
     @Override
index b3965a5eac4d16e080d256d37eefd91bf1180d0d..2b3d6effc01151c860768c58925eea498a0d0700 100644 (file)
@@ -32,7 +32,7 @@ abstract class AbstractCaseStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, CaseStatement, EffectiveStatement<QName, CaseStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 24955631f12b1efb76d77aaff2b11b161c727025..54bdf918a3b8d52f091437185a508a17791e558f 100644 (file)
@@ -43,7 +43,7 @@ abstract class AbstractChoiceStatementSupport extends
     @Override
     public final void onStatementAdded(
             final Mutable<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index fb4aa1d4df57e975cd49da7882521a9710643fd3..809158dcc7bb4ff8d57fcba9911c8c7878406c6d 100644 (file)
@@ -32,7 +32,7 @@ abstract class AbstractContainerStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 02bf56941344e1459d1019f2327708f631daccc7..42a9bd8935823277ccdc17a65733560976493c59 100644 (file)
@@ -129,7 +129,7 @@ abstract class AbstractDeviateStatementSupport extends AbstractStatementSupport<
         getSubstatementValidatorForDeviate(deviateKind).validate(deviateStmtCtx);
 
         final SchemaNodeIdentifier deviationTarget =
-                (SchemaNodeIdentifier) deviateStmtCtx.getParentContext().getStatementArgument();
+                (SchemaNodeIdentifier) deviateStmtCtx.coerceParentContext().getStatementArgument();
 
         if (!isDeviationSupported(deviateStmtCtx, deviationTarget)) {
             return;
@@ -175,7 +175,7 @@ abstract class AbstractDeviateStatementSupport extends AbstractStatementSupport<
 
             @Override
             public void prerequisiteFailed(final Collection<? extends Prerequisite<?>> failed) {
-                throw new InferenceException(deviateStmtCtx.getParentContext().getStatementSourceReference(),
+                throw new InferenceException(deviateStmtCtx.coerceParentContext().getStatementSourceReference(),
                     "Deviation target '%s' not found.", deviationTarget);
             }
         });
index e9097e678b96ec6984e06037286e80d192970ca4..d38acdf6de906606e0fb349c7201c6ed5576fe62 100644 (file)
@@ -59,7 +59,7 @@ public final class DeviationStatementSupport extends AbstractStatementSupport<Sc
             EffectiveStatement<SchemaNodeIdentifier, DeviationStatement>> ctx) {
         final QNameModule currentModule = ctx.getFromNamespace(ModuleCtxToModuleQName.class,
                 ctx.getRoot());
-        final QNameModule targetModule = ctx.getStatementArgument().getLastComponent().getModule();
+        final QNameModule targetModule = ctx.coerceStatementArgument().getLastComponent().getModule();
 
         if (currentModule.equals(targetModule)) {
             throw new InferenceException(ctx.getStatementSourceReference(),
index 87c1da13d8e85f8d4e2956021abd454e67b7e0be..126cb762d5b4b342e0442ee7e5082b9fca50a009 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension;
 
-import static com.google.common.base.Verify.verifyNotNull;
-
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -78,7 +76,7 @@ final class ExtensionEffectiveStatementImpl extends AbstractEffectiveDocumentedN
     private ExtensionEffectiveStatementImpl(
             final StmtContext<QName, ExtensionStatement, EffectiveStatement<QName, ExtensionStatement>> ctx) {
         super(ctx);
-        this.qname = verifyNotNull(ctx.getStatementArgument());
+        this.qname = ctx.coerceStatementArgument();
         this.schemaPath = ctx.getSchemaPath().get();
 
         final List<UnknownSchemaNode> unknownNodesInit = new ArrayList<>();
index 3b6745d04cf9b23f1b8d1eb437103871498402ca..13b4983c0a24adaf203b82cf65574a654ab5b71a 100644 (file)
@@ -62,7 +62,7 @@ public final class ExtensionStatementSupport
             final Mutable<QName, ExtensionStatement, EffectiveStatement<QName, ExtensionStatement>> stmt) {
         super.onStatementDefinitionDeclared(stmt);
 
-        QName stmtName = stmt.getStatementArgument();
+        QName stmtName = stmt.coerceStatementArgument();
         if (OpenConfigStatements.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) {
             stmtName = stmtName.withoutRevision();
         }
index 72335e64b9d0da4d36972d7e10269905408d9c2e..b68fd4effc230b00a25ccd06e5ee93e6442dd6fb 100644 (file)
@@ -41,7 +41,7 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement
             }
             this.maybeQNameArgument = maybeQNameArgumentInit;
         }
-        path = ctx.getParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
+        path = ctx.coerceParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
     }
 
     @Override
index 47929c3c0e8c4adf59d3200197cb0be1d1b02587..b2704128bce97a0b92aedc6f7ffed6cdad60e8ef 100644 (file)
@@ -62,13 +62,13 @@ abstract class AbstractGroupingStatementSupport
                 // Shadowing check: make sure we do not trample on pre-existing definitions. This catches sibling
                 // declarations and parent declarations which have already been declared.
                 checkConflict(parent, stmt);
-                parent.addContext(GroupingNamespace.class, stmt.getStatementArgument(), stmt);
+                parent.addContext(GroupingNamespace.class, stmt.coerceStatementArgument(), stmt);
             }
         }
     }
 
     private static void checkConflict(final StmtContext<?, ?, ?> parent, final StmtContext<QName, ?, ?> stmt) {
-        final QName arg = stmt.getStatementArgument();
+        final QName arg = stmt.coerceStatementArgument();
         final StmtContext<?, ?, ?> existing = parent.getFromNamespace(GroupingNamespace.class, arg);
         SourceException.throwIf(existing != null, stmt.getStatementSourceReference(), "Duplicate name for grouping %s",
                 arg);
index 8ad1da2a61463654762c0a6a89c3e14490c7ec8c..38ef2a644501423f9413a019b308dcd04c3a7292 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping;
 
-import static com.google.common.base.Verify.verifyNotNull;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.List;
@@ -43,7 +41,7 @@ final class GroupingEffectiveStatementImpl
             final StmtContext<QName, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> ctx) {
         super(ctx);
 
-        qname = verifyNotNull(ctx.getStatementArgument());
+        qname = ctx.coerceStatementArgument();
         path = ctx.getSchemaPath().get();
         addedByUses = ctx.getCopyHistory().contains(CopyType.ADDED_BY_USES);
 
index d4499bd610ef0b2aa20c37b566b7c57570b188a9..c24bacef4a40bfdb6c615e5d941a866d0ebb86c0 100644 (file)
@@ -42,6 +42,6 @@ abstract class AbstractIdentityStatementSupport
     @Override
     public final void onStatementDefinitionDeclared(final StmtContext.Mutable<QName, IdentityStatement,
             EffectiveStatement<QName, IdentityStatement>> stmt) {
-        stmt.addToNs(IdentityNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.addToNs(IdentityNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 }
\ No newline at end of file
index 8a1ec9431d127a45af655f614369bffbaa20f687..1cadac9a4fe83e38e2d96153e7452afc6f9c04eb 100644 (file)
@@ -43,7 +43,7 @@ final class IdentityEffectiveStatementImpl extends AbstractEffectiveSchemaNode<I
         // initDerivedIdentities
         final Set<IdentitySchemaNode> derivedIdentitiesInit = new HashSet<>();
         final List<StmtContext<?, ?, ?>> derivedIdentitiesCtxList = ctx.getFromNamespace(
-                DerivedIdentitiesNamespace.class, ctx.getStatementArgument());
+                DerivedIdentitiesNamespace.class, ctx.coerceStatementArgument());
         if (derivedIdentitiesCtxList == null) {
             this.derivedIdentities = ImmutableSet.of();
             return;
index c96e72807039fb68064a3b4ee90a29ccab280380..a391c559f1d1ffb3d219500e5d033001686e7d0e 100644 (file)
@@ -62,7 +62,7 @@ abstract class AbstractImportStatementSupport extends
          */
         stmt.addRequiredSource(RevisionImport.getImportedSourceIdentifier(stmt));
 
-        final String moduleName = stmt.getStatementArgument();
+        final String moduleName = stmt.coerceStatementArgument();
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_PRE_LINKAGE);
         final Prerequisite<StmtContext<?, ?, ?>> imported = importAction.requiresCtx(stmt,
                 PreLinkageModuleNamespace.class, moduleName, SOURCE_PRE_LINKAGE);
index 1a7dc871c675e132b9732e60444ea60d48940d2c..fe4928bb2c3c133b8dc0fcab6981a738bd3e6ffd 100644 (file)
@@ -41,7 +41,7 @@ final class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase<
     ImportEffectiveStatementImpl(final StmtContext<String, ImportStatement, ?> ctx) {
         super(ctx);
 
-        moduleName = ctx.getStatementArgument();
+        moduleName = ctx.coerceStatementArgument();
         final Optional<String> prefixStmt = findFirstEffectiveSubstatementArgument(PrefixEffectiveStatement.class);
         MissingSubstatementException.throwIf(!prefixStmt.isPresent(), ctx.getStatementSourceReference(),
             "Prefix is mandatory substatement of import statement");
index f634cce146f431a5bf7cba3f21abc97914305060..12f0d128586be4c25ef2475900642faaf9055767 100644 (file)
@@ -46,7 +46,7 @@ final class RevisionImport {
             final Mutable<String, ImportStatement, EffectiveStatement<String, ImportStatement>> stmt) {
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE);
         final Prerequisite<StmtContext<?, ?, ?>> imported;
-        final String moduleName = stmt.getStatementArgument();
+        final String moduleName = stmt.coerceStatementArgument();
         final Revision revision = firstAttributeOf(stmt.declaredSubstatements(), RevisionDateStatement.class);
         if (revision == null) {
             imported = importAction.requiresCtx(stmt, ModuleNamespace.class,
index 5ce352344f554c482f4f82748193a6c7b0c78eaf..4ad6d005e29029f1f551fc9fd6a31fabac8f422c 100644 (file)
@@ -120,7 +120,7 @@ final class SemanticVersionImport {
     static void onLinkageDeclared(
             final Mutable<String, ImportStatement, EffectiveStatement<String, ImportStatement>> stmt) {
         final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE);
-        final String moduleName = stmt.getStatementArgument();
+        final String moduleName = stmt.coerceStatementArgument();
         final SemVer semanticVersion = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt);
         final SemanticVersionImport.CompatibleCriterion criterion = semanticVersion == null
                 ? new NoVerCompatibleCriterion(moduleName)
index fc32b01b8650afda1e492517d91ee772380a27fe..e6e0b1f28cbd751841dd0dee1de373735b1d388b 100644 (file)
@@ -66,7 +66,7 @@ abstract class AbstractIncludeStatementSupport extends
     @Override
     public final void onLinkageDeclared(
             final Mutable<String, IncludeStatement, EffectiveStatement<String, IncludeStatement>> stmt) {
-        final String submoduleName = stmt.getStatementArgument();
+        final String submoduleName = stmt.coerceStatementArgument();
         final StmtContext<Revision, ?, ?> revision = findFirstDeclaredSubstatement(stmt,
             RevisionDateStatement.class);
 
index 97c616f8c6d05a92fc123c52dae5b5adfce3a0d2..2ba945b2d2e2f020a9a4a9af3c5e64d15acf17a8 100644 (file)
@@ -32,7 +32,7 @@ abstract class AbstractInputStatementSupport
     @Override
     public final void onStatementAdded(final Mutable<QName, InputStatement,
             EffectiveStatement<QName, InputStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 1150cc6149cf9056c5adaa11992b8802f6719988..9b5f6f7c00a6eb658d488dd19f34cfafcd05ec46 100644 (file)
@@ -64,7 +64,7 @@ public final class KeyStatementSupport
             final QNameModule targetModule) {
         final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder();
         boolean replaced = false;
-        for (final SchemaNodeIdentifier arg : ctx.getStatementArgument()) {
+        for (final SchemaNodeIdentifier arg : ctx.coerceStatementArgument()) {
             final QName qname = arg.getLastComponent();
             if (!targetModule.equals(qname.getModule())) {
                 final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class, qname.withModule(targetModule));
index 27bcff2c9a38dfb4e90cfb567f9cb09ba776e589..488009e37007169d82508eccbc7f04dac17e46a4 100644 (file)
@@ -51,7 +51,7 @@ public final class LeafStatementSupport
 
     @Override
     public void onStatementAdded(final Mutable<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index e11e1586678d1c62ced2a9dedb62b7497deb6569..9ecb77f3e8df93e73b07b60ae046b3cc4e4f330b 100644 (file)
@@ -27,7 +27,7 @@ abstract class AbstractLeafListStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index f4cb2b229c5da26cfda643f0747b5541cdb62581..f6d460f6f73578c894750a239ac7f697279c2c9c 100644 (file)
@@ -32,7 +32,7 @@ abstract class AbstractListStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, ListStatement, EffectiveStatement<QName, ListStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index ac7793ce8ade02c7d652a001b312195df44e972e..6851219ac39ce8ac79fa4788a940e7f1aea4bfb4 100644 (file)
@@ -132,7 +132,7 @@ abstract class AbstractModuleStatementSupport extends
     private static void addToSemVerModuleNamespace(
             final Mutable<String, ModuleStatement, EffectiveStatement<String, ModuleStatement>> stmt,
             final SourceIdentifier moduleIdentifier) {
-        final String moduleName = stmt.getStatementArgument();
+        final String moduleName = stmt.coerceStatementArgument();
         final SemVer moduleSemVer = stmt.getFromNamespace(SemanticVersionNamespace.class, stmt);
         final SemVerSourceIdentifier id = SemVerSourceIdentifier.create(moduleName, moduleSemVer);
         stmt.addToNs(SemanticVersionModuleNamespace.class, id, stmt);
index dd816bf2e4d62bab42ea631bb84ba76c2159ba12..e11a152a60dcd37a0030369abe85a46cd5019869 100644 (file)
@@ -31,7 +31,7 @@ abstract class AbstractNotificationStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, NotificationStatement, EffectiveStatement<QName, NotificationStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index 1281ffb92fb038d495e9d1d9834afb94b396465f..5bb0d4d16d6a916cd705783a98d01c739ae7b485 100644 (file)
@@ -7,8 +7,6 @@
  */
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification;
 
-import static com.google.common.base.Verify.verifyNotNull;
-
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
@@ -46,7 +44,7 @@ final class NotificationEffectiveStatementImpl
     NotificationEffectiveStatementImpl(
             final StmtContext<QName, NotificationStatement, EffectiveStatement<QName, NotificationStatement>> ctx) {
         super(ctx);
-        this.qname = verifyNotNull(ctx.getStatementArgument());
+        this.qname = ctx.coerceStatementArgument();
         this.path = ctx.getSchemaPath().get();
 
         // initSubstatementCollections
index 57b156e4b27b12050cd93ec4a64f626766110a22..57c1b78a5fbecbe9a48b2965dae715f81b1f1bd1 100644 (file)
@@ -32,7 +32,7 @@ abstract class AbstractOutputStatementSupport extends
     @Override
     public final void onStatementAdded(final Mutable<QName, OutputStatement,
             EffectiveStatement<QName, OutputStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index f2f304f12476de6b432d4c354c9cebda03863b49..5092a4c5e169186538114a5e5c9447ede6a50213 100644 (file)
@@ -36,7 +36,7 @@ public final class RefineEffectiveStatementImpl
 
     RefineEffectiveStatementImpl(final StmtContext<SchemaNodeIdentifier, RefineStatement, ?> ctx) {
         super(ctx);
-        qname = verifyNotNull(ctx.getStatementArgument().getLastComponent());
+        qname = verifyNotNull(ctx.coerceStatementArgument().getLastComponent());
         path = ctx.getSchemaPath().get();
         refineTargetNode = (SchemaNode) ctx.getEffectOfStatement().iterator().next().buildEffective();
 
index b1ef18271c6bcb0ddccea9433ee8604d2c3218b8..13cead2e9740c8ddc2643bac15efdff77be5aa73 100644 (file)
@@ -48,7 +48,7 @@ abstract class AbstractRpcStatementSupport
     @Override
     public final void onStatementAdded(
             final Mutable<QName, RpcStatement, EffectiveStatement<QName, RpcStatement>> stmt) {
-        stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt);
+        stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt);
     }
 
     @Override
index df743ed4d22c5ec955b667ec8233c6c2fe4471c6..e248f5a0a65920c75b4f302cada5767f7cd7323c 100644 (file)
@@ -57,7 +57,7 @@ abstract class AbstractSubmoduleStatementSupport
     @Override
     public final void onLinkageDeclared(
             final Mutable<String, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>> stmt) {
-        final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getStatementArgument(),
+        final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.coerceStatementArgument(),
             StmtContextUtils.getLatestRevision(stmt.declaredSubstatements()));
 
         final StmtContext<?, SubmoduleStatement, EffectiveStatement<String, SubmoduleStatement>>
index e999729e319dd9e24000135434bce45777ac28f9..91ea4029ee0c6bf6ec722a2cf1fef5b9a795a475 100644 (file)
@@ -52,7 +52,7 @@ abstract class AbstractIdentityRefSpecificationSupport
         final Collection<StmtContext<QName, BaseStatement, ?>> baseStatements =
                 StmtContextUtils.findAllDeclaredSubstatements(stmt, BaseStatement.class);
         for (StmtContext<QName, BaseStatement, ?> baseStmt : baseStatements) {
-            final QName baseIdentity = baseStmt.getStatementArgument();
+            final QName baseIdentity = baseStmt.coerceStatementArgument();
             final StmtContext<?, ?, ?> stmtCtx = stmt.getFromNamespace(IdentityNamespace.class, baseIdentity);
             InferenceException.throwIfNull(stmtCtx, stmt.getStatementSourceReference(),
                 "Referenced base identity '%s' doesn't exist in given scope (module, imported modules, submodules)",
index 6b77fbb96b5a968431fd4ed4ce243068fc2daec6..f8fe34ccff8bd240bce835ef2df160ab24364147 100644 (file)
@@ -145,7 +145,7 @@ abstract class AbstractTypeStatementSupport
 
         // First look up the proper base type
         final TypeEffectiveStatement<TypeStatement> typeStmt;
-        switch (ctx.getStatementArgument()) {
+        switch (ctx.coerceStatementArgument()) {
             case BINARY:
                 typeStmt = BuiltinEffectiveStatement.BINARY;
                 break;
index 27cf9f4ae68fac6361282df67e172be59eca5222..5c10bc419a76452f41720293defa1a00913d9a64 100644 (file)
@@ -77,7 +77,7 @@ public final class TypedefStatementSupport extends
                 // Shadowing check: make sure we do not trample on pre-existing definitions. This catches sibling
                 // declarations and parent declarations which have already been declared.
                 checkConflict(parent, stmt);
-                parent.addContext(TypeNamespace.class, stmt.getStatementArgument(), stmt);
+                parent.addContext(TypeNamespace.class, stmt.coerceStatementArgument(), stmt);
             }
         }
     }
@@ -88,7 +88,7 @@ public final class TypedefStatementSupport extends
     }
 
     private static void checkConflict(final StmtContext<?, ?, ?> parent, final StmtContext<QName, ?, ?> stmt) {
-        final QName arg = stmt.getStatementArgument();
+        final QName arg = stmt.coerceStatementArgument();
         final StmtContext<?, ?, ?> existing = parent.getFromNamespace(TypeNamespace.class, arg);
         // RFC7950 sections 5.5 and 6.2.1: identifiers must not be shadowed
         SourceException.throwIf(existing != null, stmt.getStatementSourceReference(), "Duplicate name for typedef %s",
index a16b92a94bad287ebcfa69413fd208890123546e..4170588c3f4220c90df808ba851b08f1c6c98d27 100644 (file)
@@ -53,7 +53,7 @@ final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumentedNode<Q
 
         // initGroupingPath
         final StmtContext<?, GroupingStatement, EffectiveStatement<QName, GroupingStatement>> grpCtx =
-                ctx.getFromNamespace(GroupingNamespace.class, ctx.getStatementArgument());
+                ctx.getFromNamespace(GroupingNamespace.class, ctx.coerceStatementArgument());
         this.groupingPath = grpCtx.getSchemaPath().get();
 
         // initCopyType
index 3a6cab552bbccc76dd8ca66b09dedc24692e58f5..9b22ef3f5424999a9c3d503ee204fd40ad0da67e 100644 (file)
@@ -114,7 +114,7 @@ final class UsesStatementImpl extends AbstractDeclaredStatement<QName> implement
             return false;
         }
         if (NOCOPY_FROM_GROUPING_SET.contains(def)) {
-            return !YangStmtMapping.GROUPING.equals(stmtContext.getParentContext().getPublicDefinition());
+            return !YangStmtMapping.GROUPING.equals(stmtContext.coerceParentContext().getPublicDefinition());
         }
 
         LOG.trace("Will copy {} statement {}", def, stmtContext);
@@ -154,7 +154,7 @@ final class UsesStatementImpl extends AbstractDeclaredStatement<QName> implement
         if (StmtContextUtils.isUnknownStatement(refineTargetNodeCtx)) {
             LOG.trace("Refine node '{}' in uses '{}' has target node unknown statement '{}'. "
                 + "Refine has been skipped. At line: {}", subStmtCtx.getStatementArgument(),
-                subStmtCtx.getParentContext().getStatementArgument(),
+                subStmtCtx.coerceParentContext().getStatementArgument(),
                 refineTargetNodeCtx.getStatementArgument(), subStmtCtx.getStatementSourceReference());
             subStmtCtx.addAsEffectOfStatement(refineTargetNodeCtx);
             return;
@@ -182,9 +182,9 @@ final class UsesStatementImpl extends AbstractDeclaredStatement<QName> implement
         SourceException.throwIf(!isSupportedRefineTarget(refineSubstatementCtx, refineTargetNodeCtx),
                 refineSubstatementCtx.getStatementSourceReference(),
                 "Error in module '%s' in the refine of uses '%s': can not perform refine of '%s' for the target '%s'.",
-                refineSubstatementCtx.getRoot().getStatementArgument(), refineSubstatementCtx.getParentContext()
-                        .getStatementArgument(), refineSubstatementCtx.getPublicDefinition(), refineTargetNodeCtx
-                        .getPublicDefinition());
+                refineSubstatementCtx.getRoot().getStatementArgument(),
+                refineSubstatementCtx.coerceParentContext().getStatementArgument(),
+                refineSubstatementCtx.getPublicDefinition(), refineTargetNodeCtx.getPublicDefinition());
 
         if (isAllowedToAddByRefine(refineSubstatementDef)) {
             refineTargetNodeCtx.addEffectiveSubstatement(refineSubstatementCtx);
index 206c3d2da30e3d0012ea1d4b8ba8bfb01e146910..76af2f2f7abd56862ed5a6af371810e97dae4a99 100644 (file)
@@ -24,7 +24,7 @@ final class ThirdPartyExtensionEffectiveStatementImpl
 
     ThirdPartyExtensionEffectiveStatementImpl(final StmtContext<String, ThirdPartyExtensionStatement, ?> ctx) {
         super(ctx);
-        path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType());
+        path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType());
         valueFromNamespace = ctx.getFromNamespace(ThirdPartyNamespace.class, ctx);
     }
 
index 63ac05fad9a7cc791d4070c857060f26db6236c8..4566ba91903fd0bb70029eb47a96a42aade719b9 100644 (file)
@@ -7,14 +7,17 @@
  */
 package org.opendaylight.yangtools.yang.parser.spi.meta;
 
+import static com.google.common.base.Verify.verifyNotNull;
+
+import com.google.common.base.VerifyException;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Streams;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Stream;
-import javax.annotation.Nullable;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QNameModule;
 import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -39,19 +42,51 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
      *
      * @return context of parent of statement, or null if this is the root statement.
      */
-    @Nullable
-    StmtContext<?, ?, ?> getParentContext();
+    @Nullable StmtContext<?, ?, ?> getParentContext();
+
+    /**
+     * Return the parent statement context, forcing a VerifyException if this is the root statement.
+     *
+     * @return context of parent of statement
+     * @throws VerifyException if this statement is the root statement
+     */
+    default @NonNull StmtContext<?, ?, ?> coerceParentContext() {
+        return verifyNotNull(getParentContext(), "Root context %s does not have a parent", this);
+    }
+
+    /**
+     * Return the statement argument in literal format.
+     *
+     * @return raw statement argument string, or null if this statement does not have an argument.
+     */
+    @Nullable String rawStatementArgument();
 
     /**
      * Return the statement argument in literal format.
      *
      * @return raw statement argument string
+     * @throws VerifyException if this statement does not have an argument
      */
-    @Nullable
-    String rawStatementArgument();
+    default @NonNull String coerceRawStatementArgument() {
+        return verifyNotNull(rawStatementArgument(), "Statement context %s does not have an argument", this);
+    }
 
-    @Nullable
-    A getStatementArgument();
+    /**
+     * Return the statement argument.
+     *
+     * @return statement argument, or null if this statement does not have an argument
+     */
+    @Nullable A getStatementArgument();
+
+    /**
+     * Return the statement argument in literal format.
+     *
+     * @return raw statement argument string
+     * @throws VerifyException if this statement does not have an argument
+     */
+    default @NonNull A coerceStatementArgument() {
+        return verifyNotNull(getStatementArgument(), "Statement context %s does not have an argument", this);
+    }
 
     /**
      * Return the {@link SchemaPath} of this statement. Not all statements have a SchemaPath, in which case
@@ -77,10 +112,9 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
      * @return Value, or null if there is no element
      * @throws NamespaceNotAvailableException when the namespace is not available.
      */
-    @NonNull <K, V, T extends K, N extends IdentifierNamespace<K, V>> V getFromNamespace(Class<N> type, T key) ;
+    @NonNull <K, V, T extends K, N extends IdentifierNamespace<K, V>> V getFromNamespace(Class<N> type, T key);
 
-    <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAllFromNamespace(
-            Class<N> type);
+    <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAllFromNamespace(Class<N> type);
 
     <K, V, N extends IdentifierNamespace<K, V>> Map<K, V> getAllFromCurrentStmtCtxNamespace(Class<N> type);
 
@@ -144,6 +178,11 @@ public interface StmtContext<A, D extends DeclaredStatement<A>, E extends Effect
         @Override
         Mutable<?, ?, ?> getParentContext();
 
+        @Override
+        default Mutable<?, ?, ?> coerceParentContext() {
+            return verifyNotNull(getParentContext(), "Root context %s does not have a parent", this);
+        }
+
         /**
          * Associate a value with a key within a namespace.
          *
index d0e3bfd4dacc227ed4c34eb09ec88f1d9701774e..030185d7c77196c08506fddf250e8db881593d23 100644 (file)
@@ -206,7 +206,7 @@ public final class StmtContextUtils {
 
     public static boolean isInExtensionBody(final StmtContext<?, ?, ?> stmtCtx) {
         StmtContext<?, ?, ?> current = stmtCtx;
-        while (current.getParentContext().getParentContext() != null) {
+        while (current.coerceParentContext().getParentContext() != null) {
             current = current.getParentContext();
             if (isUnknownStatement(current)) {
                 return true;
@@ -256,7 +256,7 @@ public final class StmtContextUtils {
             if (YangStmtMapping.IF_FEATURE.equals(stmt.getPublicDefinition())) {
                 containsIfFeature = true;
                 @SuppressWarnings("unchecked")
-                final Predicate<Set<QName>> argument = (Predicate<Set<QName>>) stmt.getStatementArgument();
+                final Predicate<Set<QName>> argument = (Predicate<Set<QName>>) stmt.coerceStatementArgument();
                 if (argument.test(supportedFeatures)) {
                     isSupported = true;
                 } else {
@@ -379,7 +379,7 @@ public final class StmtContextUtils {
         requireNonNull(ancestorType);
         requireNonNull(ancestorChildType);
 
-        StmtContext<?, ?, ?> current = ctx.getParentContext();
+        StmtContext<?, ?, ?> current = ctx.coerceParentContext();
         StmtContext<?, ?, ?> parent = current.getParentContext();
         while (parent != null) {
             if (ancestorType.equals(current.getPublicDefinition())) {
@@ -447,12 +447,13 @@ public final class StmtContextUtils {
     private static boolean isRelevantForIfFeatureAndWhenOnListKeysCheck(final StmtContext<?, ?, ?> ctx) {
         return YangVersion.VERSION_1_1.equals(ctx.getRootVersion())
                 && StmtContextUtils.hasParentOfType(ctx, YangStmtMapping.LIST)
-                && StmtContextUtils.findFirstDeclaredSubstatement(ctx.getParentContext(), KeyStatement.class) != null;
+                && StmtContextUtils.findFirstDeclaredSubstatement(ctx.coerceParentContext(),
+                    KeyStatement.class) != null;
     }
 
     private static boolean isListKey(final StmtContext<?, ?, ?> leafStmtCtx,
             final StmtContext<Collection<SchemaNodeIdentifier>, ?, ?> keyStmtCtx) {
-        for (final SchemaNodeIdentifier keyIdentifier : keyStmtCtx.getStatementArgument()) {
+        for (final SchemaNodeIdentifier keyIdentifier : keyStmtCtx.coerceStatementArgument()) {
             if (leafStmtCtx.getStatementArgument().equals(keyIdentifier.getLastComponent())) {
                 return true;
             }
@@ -639,9 +640,11 @@ public final class StmtContextUtils {
                     RevisionStatement.class)) {
                 if (revision == null && subStmt.getStatementArgument() != null) {
                     revision = (Revision) subStmt.getStatementArgument();
-                } else if (subStmt.getStatementArgument() != null
-                        && ((Revision) subStmt.getStatementArgument()).compareTo(revision) > 0) {
-                    revision = (Revision) subStmt.getStatementArgument();
+                } else {
+                    final Revision subArg = (Revision) subStmt.getStatementArgument();
+                    if (subArg != null && subArg.compareTo(revision) > 0) {
+                        revision = subArg;
+                    }
                 }
             }
         }