From b1c563b20a316b45640668b748c02963bab95814 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 31 Jan 2021 20:51:54 +0100 Subject: [PATCH] Refactor EffectiveStmtCtx.Parent.schemaPath() A @Nullable return is more suited to our needs, following our normal imperative speak. JIRA: YANGTOOLS-1071 Change-Id: I135c10d83ef2a53453f0278779157cdef20d14a9 Signed-off-by: Robert Varga --- .../stmt/reactor/InferredStatementContext.java | 2 +- .../yang/parser/stmt/reactor/ReactorStmtCtx.java | 15 ++++++--------- .../stmt/reactor/ReplicaStatementContext.java | 2 +- .../parser/stmt/reactor/RootStatementContext.java | 5 ++--- .../parser/stmt/reactor/SubstatementContext.java | 3 +-- .../UnrecognizedEffectiveStatementImpl.java | 4 ++-- .../yang/parser/spi/meta/EffectiveStmtCtx.java | 8 ++++---- .../yang/parser/spi/meta/SchemaPathSupport.java | 12 ++++++++++++ 8 files changed, 29 insertions(+), 22 deletions(-) diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java index 928b851719..3ee3ad8208 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java @@ -614,7 +614,7 @@ final class InferredStatementContext, E extend */ @Override @Deprecated - public Optional schemaPath() { + public SchemaPath schemaPath() { return substatementGetSchemaPath(); } diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java index 47286d8d27..a7f3941042 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java @@ -558,7 +558,7 @@ abstract class ReactorStmtCtx, E extends Effec // Exists only to support {SubstatementContext,InferredStatementContext}.schemaPath() @Deprecated - final @NonNull Optional substatementGetSchemaPath() { + final @Nullable SchemaPath substatementGetSchemaPath() { SchemaPath local = schemaPath; if (local == null) { synchronized (this) { @@ -569,15 +569,12 @@ abstract class ReactorStmtCtx, E extends Effec } } - return Optional.ofNullable(local); + return local; } @Deprecated private SchemaPath createSchemaPath(final StatementContextBase parent) { - final Optional maybeParentPath = parent.schemaPath(); - verify(maybeParentPath.isPresent(), "Parent %s does not have a SchemaPath", parent); - final SchemaPath parentPath = maybeParentPath.get(); - + final SchemaPath parentPath = parent.getSchemaPath(); if (StmtContextUtils.isUnknownStatement(this)) { return parentPath.createChild(publicDefinition().getStatementName()); } @@ -585,7 +582,7 @@ abstract class ReactorStmtCtx, E extends Effec if (argument instanceof QName) { final QName qname = (QName) argument; if (producesDeclared(UsesStatement.class)) { - return maybeParentPath.orElse(null); + return parentPath; } return parentPath.createChild(qname); @@ -600,8 +597,8 @@ abstract class ReactorStmtCtx, E extends Effec return parentPath.createChild(((SchemaNodeIdentifier) argument).getNodeIdentifiers()); } - // FIXME: this does not look right - return maybeParentPath.orElse(null); + // FIXME: this does not look right, investigate more? + return parentPath; } private @NonNull QName interpretAsQName(final String argument) { diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java index dc2d5dec0f..9e69fa29af 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java @@ -182,7 +182,7 @@ final class ReplicaStatementContext, E extends */ @Override @Deprecated - public Optional schemaPath() { + public SchemaPath schemaPath() { return substatementGetSchemaPath(); } diff --git a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index c8a8dcc986..46c162204c 100644 --- a/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -20,7 +20,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -120,8 +119,8 @@ public final class RootStatementContext, E ext @Override @Deprecated - public Optional schemaPath() { - return Optional.of(SchemaPath.ROOT); + public SchemaPath schemaPath() { + return SchemaPath.ROOT; } @Override 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 e59695e072..1bb706b355 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 @@ -9,7 +9,6 @@ package org.opendaylight.yangtools.yang.parser.stmt.reactor; import static java.util.Objects.requireNonNull; -import java.util.Optional; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -58,7 +57,7 @@ final class SubstatementContext, E extends Eff */ @Override @Deprecated - public Optional schemaPath() { + public SchemaPath schemaPath() { return substatementGetSchemaPath(); } 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 a2881ba88e..3020a74172 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 @@ -38,8 +38,8 @@ final class UnrecognizedEffectiveStatementImpl extends UnknownEffectiveStatement SchemaPath maybePath; try { - maybePath = stmt.getEffectiveParent().schemaPath() - .map(parentPath -> parentPath.createChild(maybeQNameArgument)).orElse(null); + final SchemaPath parentPath = stmt.getEffectiveParent().schemaPath(); + maybePath = parentPath == null ? null : parentPath.createChild(maybeQNameArgument); } catch (IllegalArgumentException | SourceException e) { LOG.debug("Cannot construct path for {}, attempting to recover", stmt, e); maybePath = null; diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java index a50d7a72b5..ef3264f996 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java @@ -11,7 +11,6 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.Beta; import com.google.common.base.VerifyException; -import java.util.Objects; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; @@ -118,11 +117,11 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu */ // FIXME: 7.0.0: this needs to be a tri-state present/absent/disabled @Deprecated - @NonNull Optional schemaPath(); + @Nullable SchemaPath schemaPath(); @Deprecated default @NonNull SchemaPath getSchemaPath() { - return schemaPath().orElseThrow(); + return verifyNotNull(schemaPath(), "Missing path for %s", this); } } @@ -164,7 +163,8 @@ public interface EffectiveStmtCtx extends CommonStmtCtx, StmtContextCompat, Immu final Parent ours = effectiveParent(); final Parent theirs = other.effectiveParent(); return ours == theirs - || ours != null && theirs != null && Objects.equals(ours.schemaPath(), theirs.schemaPath()); + || ours != null && theirs != null && SchemaPathSupport.effectivelyEqual(ours.schemaPath(), + theirs.schemaPath()); } } } diff --git a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java index a3e2956548..edad0024dd 100644 --- a/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java @@ -10,6 +10,7 @@ package org.opendaylight.yangtools.yang.parser.spi.meta; import static com.google.common.base.Verify.verifyNotNull; import com.google.common.annotations.Beta; +import java.util.Objects; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.Immutable; @@ -30,6 +31,11 @@ public abstract class SchemaPathSupport implements Immutable { SchemaPath optionalPath(final SchemaPath path) { return path; } + + @Override + boolean equalPaths(final SchemaPath first, final SchemaPath second) { + return Objects.equals(first, second); + } } private static final SchemaPathSupport DEFAULT = new Enabled(); @@ -46,6 +52,10 @@ public abstract class SchemaPathSupport implements Immutable { return DEFAULT.optionalPath(path); } + public static boolean effectivelyEqual(@Nullable final SchemaPath first, @Nullable final SchemaPath second) { + return DEFAULT.equalPaths(first, second); + } + public static @NonNull QName extractQName(final @NonNull Object path) { return path instanceof QName ? (QName) path : verifyNotNull(((SchemaPath) path).getLastComponent()); } @@ -54,6 +64,8 @@ public abstract class SchemaPathSupport implements Immutable { return path instanceof SchemaPath ? (SchemaPath) path : SchemaNodeDefaults.throwUnsupported(impl); } + abstract boolean equalPaths(@Nullable SchemaPath first, @Nullable SchemaPath second); + abstract @NonNull Object effectivePath(@NonNull SchemaPath path); abstract @Nullable SchemaPath optionalPath(@Nullable SchemaPath path); -- 2.36.6