From e5abbe1e9f9a6c46f40c04557ef3eadd7417302c Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 8 Apr 2023 22:14:38 +0200 Subject: [PATCH] Sprinkle @NonNull annotations Contexts should always be non-null, improve a few places where we do not make that explicit. Change-Id: Ia11fb8e13f98c3e4c15bf0597b2191cb8553eac2 Signed-off-by: Robert Varga --- .../yang/parser/stmt/reactor/BuildGlobalContext.java | 5 ++--- .../yang/parser/stmt/reactor/StatementContextBase.java | 4 ++-- .../stmt/reactor/StatementDefinitionContext.java | 10 +++++----- .../yang/parser/spi/meta/StatementSupport.java | 8 +++----- .../yang/parser/spi/meta/StmtContextUtils.java | 10 +++++----- 5 files changed, 17 insertions(+), 20 deletions(-) diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index ef7c542287..930c92edfc 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -29,7 +29,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.SortedMap; -import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -97,11 +96,11 @@ final class BuildGlobalContext extends AbstractNamespaceStorage implements Globa return supports.get(phase); } - void addSource(final @NonNull StatementStreamSource source) { + void addSource(final StatementStreamSource source) { sources.add(new SourceSpecificContext(this, source)); } - void addLibSource(final @NonNull StatementStreamSource libSource) { + void addLibSource(final StatementStreamSource libSource) { checkState(currentPhase == ModelProcessingPhase.INIT, "Add library source is allowed in ModelProcessingPhase.INIT only"); libSources.add(new SourceSpecificContext(this, libSource)); diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java index b87e59d5fa..527b86c09a 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementContextBase.java @@ -342,7 +342,7 @@ abstract class StatementContextBase, E extends // Split out to keep generics working without a warning private static , Z extends EffectiveStatement> void finishDeclaration( - final UndeclaredStmtCtx substatement) { + final @NonNull UndeclaredStmtCtx substatement) { substatement.definition().onDeclarationFinished(substatement, ModelProcessingPhase.FULL_DECLARATION); } @@ -445,7 +445,7 @@ abstract class StatementContextBase, E extends * @return Stream of supported effective statements. */ // FIXME: this method is currently a misnomer, but unifying with streamDeclared() would make this accurate again - abstract Stream> streamEffective(); + abstract @NonNull Stream> streamEffective(); @Override final boolean doTryToCompletePhase(final byte targetOrder) { diff --git a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java index fc77ce9e61..485bca43da 100644 --- a/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java +++ b/parser/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java @@ -37,18 +37,18 @@ final class StatementDefinitionContext, E exte StatementDefinitionContext(final StatementSupport support) { this.support = requireNonNull(support); - this.argumentSpecificSubDefinitions = support.hasArgumentSpecificSupports() ? new HashMap<>() : null; + argumentSpecificSubDefinitions = support.hasArgumentSpecificSupports() ? new HashMap<>() : null; } @NonNull StatementFactory getFactory() { return support; } - A parseArgumentValue(final StmtContext context, final String value) { + A parseArgumentValue(final @NonNull StmtContext context, final String value) { return support.parseArgumentValue(context, value); } - A adaptArgumentValue(final StmtContext context, final QNameModule targetModule) { + A adaptArgumentValue(final @NonNull StmtContext context, final QNameModule targetModule) { return support.adaptArgumentValue(context, targetModule); } @@ -62,11 +62,11 @@ final class StatementDefinitionContext, E exte ? implicit.getImplicitParentFor(parent, stmtDef) : Optional.empty(); } - void onStatementAdded(final Mutable stmt) { + void onStatementAdded(final @NonNull Mutable stmt) { support.onStatementAdded(stmt); } - void onDeclarationFinished(final Mutable statement, final ModelProcessingPhase phase) { + void onDeclarationFinished(final @NonNull Mutable statement, final ModelProcessingPhase phase) { switch (phase) { case SOURCE_PRE_LINKAGE: support.onPreLinkageDeclared(statement); diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java index 6a4a4f2e3b..0d70b124d5 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java @@ -210,7 +210,6 @@ public abstract class StatementSupport, E exte private final @NonNull StatementDefinition publicDefinition; private final @NonNull CopyPolicy copyPolicy; - @Beta protected StatementSupport(final StatementSupport delegate) { checkArgument(delegate != this); publicDefinition = delegate.publicDefinition; @@ -218,7 +217,6 @@ public abstract class StatementSupport, E exte copyPolicy = delegate.copyPolicy; } - @Beta protected StatementSupport(final StatementDefinition publicDefinition, final StatementPolicy policy) { this.publicDefinition = requireNonNull(publicDefinition); this.policy = requireNonNull(policy); @@ -301,7 +299,7 @@ public abstract class StatementSupport, E exte * @return Parsed value * @throws SourceException when an inconsistency is detected. */ - public abstract A parseArgumentValue(StmtContext ctx, String value); + public abstract A parseArgumentValue(@NonNull StmtContext ctx, String value); /** * Adapts the argument value to match a new module. Default implementation returns original value stored in context, @@ -367,7 +365,7 @@ public abstract class StatementSupport, E exte * @param stmt Context of added statement. Argument and statement parent is accessible. * @throws SourceException when an inconsistency is detected. */ - public void onStatementDefinitionDeclared(final Mutable stmt) { + public void onStatementDefinitionDeclared(final @NonNull Mutable stmt) { // NOOP for most implementations } @@ -382,7 +380,7 @@ public abstract class StatementSupport, E exte * @param stmt Context of added statement. Argument and statement parent is accessible. * @throws SourceException when an inconsistency is detected. */ - public void onFullDefinitionDeclared(final Mutable stmt) { + public void onFullDefinitionDeclared(final @NonNull Mutable stmt) { final SubstatementValidator validator = substatementValidator(); if (validator != null) { validator.validate(stmt); diff --git a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java index 73c48cf47f..21d19c37b6 100644 --- a/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java +++ b/parser/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java @@ -479,12 +479,12 @@ public final class StmtContextUtils { * @throws NullPointerException if any of the arguments are null * @throws SourceException if the string is not a valid YANG identifier */ - public static @NonNull QName parseIdentifier(final StmtContext ctx, final String str) { + public static @NonNull QName parseIdentifier(final @NonNull StmtContext ctx, final String str) { SourceException.throwIf(str.isEmpty(), ctx, "Identifier may not be an empty string"); return internedQName(ctx, str); } - public static @NonNull QName parseNodeIdentifier(final StmtContext ctx, final String prefix, + public static @NonNull QName parseNodeIdentifier(final @NonNull StmtContext ctx, final String prefix, final String localName) { return internedQName(ctx, InferenceException.throwIfNull(getModuleQNameByPrefix(ctx, prefix), ctx, @@ -501,7 +501,7 @@ public final class StmtContextUtils { * @throws NullPointerException if any of the arguments are null * @throws SourceException if the string is not a valid YANG node identifier */ - public static @NonNull QName parseNodeIdentifier(final StmtContext ctx, final String str) { + public static @NonNull QName parseNodeIdentifier(final @NonNull StmtContext ctx, final String str) { SourceException.throwIf(str.isEmpty(), ctx, "Node identifier may not be an empty string"); final int colon = str.indexOf(':'); @@ -517,11 +517,11 @@ public final class StmtContextUtils { return parseNodeIdentifier(ctx, prefix, localName); } - private static @NonNull QName internedQName(final StmtContext ctx, final String localName) { + private static @NonNull QName internedQName(final @NonNull StmtContext ctx, final String localName) { return internedQName(ctx, getModuleQName(ctx), localName); } - private static @NonNull QName internedQName(final CommonStmtCtx ctx, final QNameModule module, + private static @NonNull QName internedQName(final @NonNull CommonStmtCtx ctx, final QNameModule module, final String localName) { final QName template; try { -- 2.36.6