From 2c95faed5a453756b654584ffcc2a1d05a25d7be Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 24 Oct 2018 16:24:20 +0200 Subject: [PATCH] Fix StmtContext nullness problems 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 --- ...lSchemaLocationEffectiveStatementImpl.java | 2 +- .../AnyxmlSchemaLocationStatementSupport.java | 2 +- .../AbstractHashedValueStatementSupport.java | 2 +- .../DefaultDenyAllStatementSupport.java | 2 +- .../DefaultDenyWriteStatementSupport.java | 2 +- .../parser/AnnotationStatementSupport.java | 4 +- .../YangDataEffectiveStatementImpl.java | 2 +- .../parser/YangDataStatementSupport.java | 2 +- .../stmt/reactor/StatementContextBase.java | 2 +- .../stmt/reactor/SubstatementContext.java | 4 +- ...enConfigVersionEffectiveStatementImpl.java | 2 +- .../stmt/action/ActionStatementSupport.java | 2 +- .../stmt/anydata/AnydataStatementSupport.java | 2 +- .../stmt/anyxml/AnyxmlStatementSupport.java | 2 +- .../AbstractAugmentStatementSupport.java | 16 ++--- .../AugmentEffectiveStatementImpl.java | 2 +- .../stmt/base/BaseStatementSupport.java | 4 +- .../belongs_to/BelongsToStatementSupport.java | 6 +- .../case_/AbstractCaseStatementSupport.java | 2 +- .../AbstractChoiceStatementSupport.java | 2 +- .../AbstractContainerStatementSupport.java | 2 +- .../AbstractDeviateStatementSupport.java | 4 +- .../deviation/DeviationStatementSupport.java | 2 +- .../ExtensionEffectiveStatementImpl.java | 4 +- .../extension/ExtensionStatementSupport.java | 2 +- .../UnrecognizedEffectiveStatementImpl.java | 2 +- .../AbstractGroupingStatementSupport.java | 4 +- .../GroupingEffectiveStatementImpl.java | 4 +- .../AbstractIdentityStatementSupport.java | 2 +- .../IdentityEffectiveStatementImpl.java | 2 +- .../AbstractImportStatementSupport.java | 2 +- .../import_/ImportEffectiveStatementImpl.java | 2 +- .../rfc7950/stmt/import_/RevisionImport.java | 2 +- .../stmt/import_/SemanticVersionImport.java | 2 +- .../AbstractIncludeStatementSupport.java | 2 +- .../input/AbstractInputStatementSupport.java | 2 +- .../rfc7950/stmt/key/KeyStatementSupport.java | 2 +- .../stmt/leaf/LeafStatementSupport.java | 2 +- .../AbstractLeafListStatementSupport.java | 2 +- .../list/AbstractListStatementSupport.java | 2 +- .../AbstractModuleStatementSupport.java | 2 +- .../AbstractNotificationStatementSupport.java | 2 +- .../NotificationEffectiveStatementImpl.java | 4 +- .../AbstractOutputStatementSupport.java | 2 +- .../refine/RefineEffectiveStatementImpl.java | 2 +- .../stmt/rpc/AbstractRpcStatementSupport.java | 2 +- .../AbstractSubmoduleStatementSupport.java | 2 +- ...stractIdentityRefSpecificationSupport.java | 2 +- .../type/AbstractTypeStatementSupport.java | 2 +- .../stmt/typedef/TypedefStatementSupport.java | 4 +- .../stmt/uses/UsesEffectiveStatementImpl.java | 2 +- .../rfc7950/stmt/uses/UsesStatementImpl.java | 10 ++-- ...dPartyExtensionEffectiveStatementImpl.java | 2 +- .../yang/parser/spi/meta/StmtContext.java | 59 +++++++++++++++---- .../parser/spi/meta/StmtContextUtils.java | 19 +++--- 55 files changed, 132 insertions(+), 96 deletions(-) diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java index 24b3b34288..8b8dc70a86 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationEffectiveStatementImpl.java @@ -28,7 +28,7 @@ public final class AnyxmlSchemaLocationEffectiveStatementImpl AnyxmlSchemaLocationEffectiveStatementImpl( final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType()); + path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); } @Override diff --git a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java index 2b77f4f894..9e9b13b6b5 100644 --- a/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java +++ b/yang/odlext-parser-support/src/main/java/org/opendaylight/yangtools/odlext/parser/AnyxmlSchemaLocationStatementSupport.java @@ -45,7 +45,7 @@ public final class AnyxmlSchemaLocationStatementSupport public void onFullDefinitionDeclared(final Mutable> stmt) { super.onFullDefinitionDeclared(stmt); - stmt.getParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, ANYXML_SCHEMA_LOCATION, stmt); + stmt.coerceParentContext().addToNs(AnyxmlSchemaLocationNamespace.class, ANYXML_SCHEMA_LOCATION, stmt); } @Override diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java index 1e6a7dddf2..0bbd49d5db 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java @@ -42,7 +42,7 @@ abstract class AbstractHashedValueStatementSupport Effective(final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild( + path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java index c770f0c9f1..a2b65d529b 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyAllStatementSupport.java @@ -40,7 +40,7 @@ public final class DefaultDenyAllStatementSupport Effective(final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild( + path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } diff --git a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java index 002bcc5569..65969ce5e2 100644 --- a/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java +++ b/yang/rfc6536-parser-support/src/main/java/org/opendaylight/yangtools/rfc6536/parser/DefaultDenyWriteStatementSupport.java @@ -40,7 +40,7 @@ public final class DefaultDenyWriteStatementSupport Effective(final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild( + path = ctx.coerceParentContext().getSchemaPath().get().createChild( ctx.getPublicDefinition().getStatementName()); } diff --git a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java index b22fb0691e..9a3337683d 100644 --- a/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java +++ b/yang/rfc7952-parser-support/src/main/java/org/opendaylight/yangtools/rfc7952/parser/AnnotationStatementSupport.java @@ -50,7 +50,7 @@ public final class AnnotationStatementSupport Effective(final StmtContext 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 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"); diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java index 6a4cad48d2..f5fd637129 100644 --- a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataEffectiveStatementImpl.java @@ -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 diff --git a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java index d7179ae1a1..729fbb870e 100644 --- a/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java +++ b/yang/rfc8040-parser-support/src/main/java/org/opendaylight/yangtools/rfc8040/parser/YangDataStatementSupport.java @@ -83,7 +83,7 @@ public final class YangDataStatementSupport extends AbstractStatementSupport> 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); } } diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index 7d19c52b60..cb2c434dae 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -815,7 +815,7 @@ public abstract class StatementContextBase, 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); diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java index f45d65c0bd..10e59b4051 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java @@ -140,7 +140,7 @@ final class SubstatementContext, 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, 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(), diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java index e55759cb3a..dbc862152b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/openconfig/stmt/OpenConfigVersionEffectiveStatementImpl.java @@ -25,7 +25,7 @@ final class OpenConfigVersionEffectiveStatementImpl extends OpenConfigVersionEffectiveStatementImpl(final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType()); + path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java index 9f7c83cb19..0ed659cdc0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/action/ActionStatementSupport.java @@ -60,7 +60,7 @@ public final class ActionStatementSupport @Override public void onStatementAdded( final StmtContext.Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java index cc4f665ab7..9172664640 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anydata/AnydataStatementSupport.java @@ -49,7 +49,7 @@ public final class AnydataStatementSupport extends @Override public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java index 86f7114c1c..f2ed909fe4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/anyxml/AnyxmlStatementSupport.java @@ -48,7 +48,7 @@ public final class AnyxmlStatementSupport @Override public void onStatementAdded(final Mutable stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java index 18093dc432..cd2a4226a0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -96,7 +96,7 @@ abstract class AbstractAugmentStatementSupport extends AbstractStatementSupport< augmentAction.requiresCtx(augmentNode, ModelProcessingPhase.EFFECTIVE_MODEL); final Prerequisite>> 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> 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; /* diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java index 1f567f23ca..2c13b1de45 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentEffectiveStatementImpl.java @@ -49,7 +49,7 @@ final class AugmentEffectiveStatementImpl EffectiveStatement> ctx) { super(ctx); - this.targetPath = ctx.getStatementArgument().asSchemaPath(); + this.targetPath = ctx.coerceStatementArgument().asSchemaPath(); final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx); this.namespace = rootModuleQName.getNamespace(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java index abcd1f1018..2d38253cc4 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/base/BaseStatementSupport.java @@ -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> requiresPrereq = baseIdentityAction.requiresCtx(baseStmtCtx, @@ -77,7 +77,7 @@ public final class BaseStatementSupport @Override public void apply(final InferenceContext ctx) { List> derivedIdentities = baseStmtCtx.getFromNamespace( - DerivedIdentitiesNamespace.class, baseStmtCtx.getStatementArgument()); + DerivedIdentitiesNamespace.class, baseIdentityQName); if (derivedIdentities == null) { derivedIdentities = new ArrayList<>(1); baseStmtCtx.addToNs(DerivedIdentitiesNamespace.class, baseIdentityQName, derivedIdentities); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java index b7511f69ea..29bd851a20 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/belongs_to/BelongsToStatementSupport.java @@ -74,7 +74,7 @@ public final class BelongsToStatementSupport extends final SourceIdentifier belongsToSourceIdentifier = getSourceIdentifier(belongsToCtx); final Prerequisite> 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> belongsToCtx) { - return RevisionSourceIdentifier.create(belongsToCtx.getStatementArgument()); + return RevisionSourceIdentifier.create(belongsToCtx.coerceStatementArgument()); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java index b3965a5eac..2b3d6effc0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/case_/AbstractCaseStatementSupport.java @@ -32,7 +32,7 @@ abstract class AbstractCaseStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java index 24955631f1..54bdf918a3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/choice/AbstractChoiceStatementSupport.java @@ -43,7 +43,7 @@ abstract class AbstractChoiceStatementSupport extends @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java index fb4aa1d4df..809158dcc7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java @@ -32,7 +32,7 @@ abstract class AbstractContainerStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java index 02bf569413..42a9bd8935 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviate/AbstractDeviateStatementSupport.java @@ -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> failed) { - throw new InferenceException(deviateStmtCtx.getParentContext().getStatementSourceReference(), + throw new InferenceException(deviateStmtCtx.coerceParentContext().getStatementSourceReference(), "Deviation target '%s' not found.", deviationTarget); } }); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java index e9097e678b..d38acdf6de 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/deviation/DeviationStatementSupport.java @@ -59,7 +59,7 @@ public final class DeviationStatementSupport extends AbstractStatementSupport> 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(), diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java index 87c1da13d8..126cb762d5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionEffectiveStatementImpl.java @@ -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> ctx) { super(ctx); - this.qname = verifyNotNull(ctx.getStatementArgument()); + this.qname = ctx.coerceStatementArgument(); this.schemaPath = ctx.getSchemaPath().get(); final List unknownNodesInit = new ArrayList<>(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java index 3b6745d04c..13b4983c0a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/ExtensionStatementSupport.java @@ -62,7 +62,7 @@ public final class ExtensionStatementSupport final Mutable> stmt) { super.onStatementDefinitionDeclared(stmt); - QName stmtName = stmt.getStatementArgument(); + QName stmtName = stmt.coerceStatementArgument(); if (OpenConfigStatements.OPENCONFIG_VERSION.getStatementName().isEqualWithoutRevision(stmtName)) { stmtName = stmtName.withoutRevision(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java index 72335e64b9..b68fd4effc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java @@ -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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java index 47929c3c0e..b2704128bc 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java @@ -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 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); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java index 8ad1da2a61..38ef2a6445 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingEffectiveStatementImpl.java @@ -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> ctx) { super(ctx); - qname = verifyNotNull(ctx.getStatementArgument()); + qname = ctx.coerceStatementArgument(); path = ctx.getSchemaPath().get(); addedByUses = ctx.getCopyHistory().contains(CopyType.ADDED_BY_USES); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java index d4499bd610..c24bacef4a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/AbstractIdentityStatementSupport.java @@ -42,6 +42,6 @@ abstract class AbstractIdentityStatementSupport @Override public final void onStatementDefinitionDeclared(final StmtContext.Mutable> stmt) { - stmt.addToNs(IdentityNamespace.class, stmt.getStatementArgument(), stmt); + stmt.addToNs(IdentityNamespace.class, stmt.coerceStatementArgument(), stmt); } } \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java index 8a1ec9431d..1cadac9a4f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/identity/IdentityEffectiveStatementImpl.java @@ -43,7 +43,7 @@ final class IdentityEffectiveStatementImpl extends AbstractEffectiveSchemaNode derivedIdentitiesInit = new HashSet<>(); final List> derivedIdentitiesCtxList = ctx.getFromNamespace( - DerivedIdentitiesNamespace.class, ctx.getStatementArgument()); + DerivedIdentitiesNamespace.class, ctx.coerceStatementArgument()); if (derivedIdentitiesCtxList == null) { this.derivedIdentities = ImmutableSet.of(); return; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java index c96e728070..a391c559f1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/AbstractImportStatementSupport.java @@ -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> imported = importAction.requiresCtx(stmt, PreLinkageModuleNamespace.class, moduleName, SOURCE_PRE_LINKAGE); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java index 1a7dc871c6..fe4928bb2c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/ImportEffectiveStatementImpl.java @@ -41,7 +41,7 @@ final class ImportEffectiveStatementImpl extends DeclaredEffectiveStatementBase< ImportEffectiveStatementImpl(final StmtContext ctx) { super(ctx); - moduleName = ctx.getStatementArgument(); + moduleName = ctx.coerceStatementArgument(); final Optional prefixStmt = findFirstEffectiveSubstatementArgument(PrefixEffectiveStatement.class); MissingSubstatementException.throwIf(!prefixStmt.isPresent(), ctx.getStatementSourceReference(), "Prefix is mandatory substatement of import statement"); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java index f634cce146..12f0d12858 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/RevisionImport.java @@ -46,7 +46,7 @@ final class RevisionImport { final Mutable> stmt) { final ModelActionBuilder importAction = stmt.newInferenceAction(SOURCE_LINKAGE); final Prerequisite> 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, diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java index 5ce352344f..4ad6d005e2 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/import_/SemanticVersionImport.java @@ -120,7 +120,7 @@ final class SemanticVersionImport { static void onLinkageDeclared( final Mutable> 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) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java index fc32b01b86..e6e0b1f28c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/include/AbstractIncludeStatementSupport.java @@ -66,7 +66,7 @@ abstract class AbstractIncludeStatementSupport extends @Override public final void onLinkageDeclared( final Mutable> stmt) { - final String submoduleName = stmt.getStatementArgument(); + final String submoduleName = stmt.coerceStatementArgument(); final StmtContext revision = findFirstDeclaredSubstatement(stmt, RevisionDateStatement.class); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java index 97c616f8c6..2ba945b2d2 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/input/AbstractInputStatementSupport.java @@ -32,7 +32,7 @@ abstract class AbstractInputStatementSupport @Override public final void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java index 1150cc6149..9b5f6f7c00 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/key/KeyStatementSupport.java @@ -64,7 +64,7 @@ public final class KeyStatementSupport final QNameModule targetModule) { final Builder 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)); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java index 27bcff2c9a..488009e370 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java @@ -51,7 +51,7 @@ public final class LeafStatementSupport @Override public void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java index e11e158667..9ecb77f3e8 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java @@ -27,7 +27,7 @@ abstract class AbstractLeafListStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java index f4cb2b229c..f6d460f6f7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java @@ -32,7 +32,7 @@ abstract class AbstractListStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java index ac7793ce8a..6851219ac3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java @@ -132,7 +132,7 @@ abstract class AbstractModuleStatementSupport extends private static void addToSemVerModuleNamespace( final Mutable> 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); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java index dd816bf2e4..e11a152a60 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/AbstractNotificationStatementSupport.java @@ -31,7 +31,7 @@ abstract class AbstractNotificationStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java index 1281ffb92f..5bb0d4d16d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/notification/NotificationEffectiveStatementImpl.java @@ -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> ctx) { super(ctx); - this.qname = verifyNotNull(ctx.getStatementArgument()); + this.qname = ctx.coerceStatementArgument(); this.path = ctx.getSchemaPath().get(); // initSubstatementCollections diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java index 57b156e4b2..57c1b78a5f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/output/AbstractOutputStatementSupport.java @@ -32,7 +32,7 @@ abstract class AbstractOutputStatementSupport extends @Override public final void onStatementAdded(final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java index f2f304f124..5092a4c5e1 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/refine/RefineEffectiveStatementImpl.java @@ -36,7 +36,7 @@ public final class RefineEffectiveStatementImpl RefineEffectiveStatementImpl(final StmtContext ctx) { super(ctx); - qname = verifyNotNull(ctx.getStatementArgument().getLastComponent()); + qname = verifyNotNull(ctx.coerceStatementArgument().getLastComponent()); path = ctx.getSchemaPath().get(); refineTargetNode = (SchemaNode) ctx.getEffectOfStatement().iterator().next().buildEffective(); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java index b1ef18271c..13cead2e97 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/rpc/AbstractRpcStatementSupport.java @@ -48,7 +48,7 @@ abstract class AbstractRpcStatementSupport @Override public final void onStatementAdded( final Mutable> stmt) { - stmt.getParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.getStatementArgument(), stmt); + stmt.coerceParentContext().addToNs(ChildSchemaNodeNamespace.class, stmt.coerceStatementArgument(), stmt); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java index df743ed4d2..e248f5a0a6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/submodule/AbstractSubmoduleStatementSupport.java @@ -57,7 +57,7 @@ abstract class AbstractSubmoduleStatementSupport @Override public final void onLinkageDeclared( final Mutable> stmt) { - final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.getStatementArgument(), + final SourceIdentifier submoduleIdentifier = RevisionSourceIdentifier.create(stmt.coerceStatementArgument(), StmtContextUtils.getLatestRevision(stmt.declaredSubstatements())); final StmtContext> diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java index e999729e31..91ea4029ee 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractIdentityRefSpecificationSupport.java @@ -52,7 +52,7 @@ abstract class AbstractIdentityRefSpecificationSupport final Collection> baseStatements = StmtContextUtils.findAllDeclaredSubstatements(stmt, BaseStatement.class); for (StmtContext 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)", diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java index 6b77fbb96b..f8fe34ccff 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -145,7 +145,7 @@ abstract class AbstractTypeStatementSupport // First look up the proper base type final TypeEffectiveStatement typeStmt; - switch (ctx.getStatementArgument()) { + switch (ctx.coerceStatementArgument()) { case BINARY: typeStmt = BuiltinEffectiveStatement.BINARY; break; diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java index 27cf9f4ae6..5c10bc419a 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/typedef/TypedefStatementSupport.java @@ -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 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", diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesEffectiveStatementImpl.java index a16b92a94b..4170588c3f 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesEffectiveStatementImpl.java @@ -53,7 +53,7 @@ final class UsesEffectiveStatementImpl extends AbstractEffectiveDocumentedNode> grpCtx = - ctx.getFromNamespace(GroupingNamespace.class, ctx.getStatementArgument()); + ctx.getFromNamespace(GroupingNamespace.class, ctx.coerceStatementArgument()); this.groupingPath = grpCtx.getSchemaPath().get(); // initCopyType diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java index 3a6cab552b..9b22ef3f54 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/uses/UsesStatementImpl.java @@ -114,7 +114,7 @@ final class UsesStatementImpl extends AbstractDeclaredStatement 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 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 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); diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java index 206c3d2da3..76af2f2f7a 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/thirdparty/plugin/ThirdPartyExtensionEffectiveStatementImpl.java @@ -24,7 +24,7 @@ final class ThirdPartyExtensionEffectiveStatementImpl ThirdPartyExtensionEffectiveStatementImpl(final StmtContext ctx) { super(ctx); - path = ctx.getParentContext().getSchemaPath().get().createChild(getNodeType()); + path = ctx.coerceParentContext().getSchemaPath().get().createChild(getNodeType()); valueFromNamespace = ctx.getFromNamespace(ThirdPartyNamespace.class, ctx); } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java index 63ac05fad9..4566ba9190 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContext.java @@ -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, 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, E extends Effect * @return Value, or null if there is no element * @throws NamespaceNotAvailableException when the namespace is not available. */ - @NonNull > V getFromNamespace(Class type, T key) ; + @NonNull > V getFromNamespace(Class type, T key); - > Map getAllFromNamespace( - Class type); + > Map getAllFromNamespace(Class type); > Map getAllFromCurrentStmtCtxNamespace(Class type); @@ -144,6 +178,11 @@ public interface StmtContext, 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. * diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java index d0e3bfd4da..030185d7c7 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java @@ -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> argument = (Predicate>) stmt.getStatementArgument(); + final Predicate> argument = (Predicate>) 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, ?, ?> 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; + } } } } -- 2.36.6