Refactor EffectiveStmtCtx.Parent.schemaPath() 11/94911/1
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 31 Jan 2021 19:51:54 +0000 (20:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 31 Jan 2021 19:52:54 +0000 (20:52 +0100)
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 <robert.varga@pantheon.tech>
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/InferredStatementContext.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReactorStmtCtx.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/ReplicaStatementContext.java
yang/yang-parser-reactor/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.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/rfc7950/stmt/extension/UnrecognizedEffectiveStatementImpl.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/EffectiveStmtCtx.java
yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/SchemaPathSupport.java

index 928b851719f2441158d4df6b6a9357f87b7be127..3ee3ad820853eb52a80b0a4fcbff74759899ff0c 100644 (file)
@@ -614,7 +614,7 @@ final class InferredStatementContext<A, D extends DeclaredStatement<A>, E extend
      */
     @Override
     @Deprecated
-    public Optional<SchemaPath> schemaPath() {
+    public SchemaPath schemaPath() {
         return substatementGetSchemaPath();
     }
 
index 47286d8d2797219b71f999f3b12ba9bdad883970..a7f3941042514ddce09e8ca85b954ae8c8f3d9e4 100644 (file)
@@ -558,7 +558,7 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
 
     // Exists only to support {SubstatementContext,InferredStatementContext}.schemaPath()
     @Deprecated
-    final @NonNull Optional<SchemaPath> substatementGetSchemaPath() {
+    final @Nullable SchemaPath substatementGetSchemaPath() {
         SchemaPath local = schemaPath;
         if (local == null) {
             synchronized (this) {
@@ -569,15 +569,12 @@ abstract class ReactorStmtCtx<A, D extends DeclaredStatement<A>, E extends Effec
             }
         }
 
-        return Optional.ofNullable(local);
+        return local;
     }
 
     @Deprecated
     private SchemaPath createSchemaPath(final StatementContextBase<?, ?, ?> parent) {
-        final Optional<SchemaPath> 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<A, D extends DeclaredStatement<A>, 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<A, D extends DeclaredStatement<A>, 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) {
index dc2d5dec0f7ed0af34c15824aeb6dd015cd541d8..9e69fa29afdbf2e3ac955ff7f749e3659b005add 100644 (file)
@@ -182,7 +182,7 @@ final class ReplicaStatementContext<A, D extends DeclaredStatement<A>, E extends
      */
     @Override
     @Deprecated
-    public Optional<SchemaPath> schemaPath() {
+    public SchemaPath schemaPath() {
         return substatementGetSchemaPath();
     }
 
index c8a8dcc986a1fb64ad9b4d9ed771664487173ccf..46c162204cf6cb8ab95621ff0dc04832fad90f6f 100644 (file)
@@ -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<A, D extends DeclaredStatement<A>, E ext
 
     @Override
     @Deprecated
-    public Optional<SchemaPath> schemaPath() {
-        return Optional.of(SchemaPath.ROOT);
+    public SchemaPath schemaPath() {
+        return SchemaPath.ROOT;
     }
 
     @Override
index e59695e072e519c33579e64af70cc9ecb4737038..1bb706b355b21c46723c05d6c7db8d9c3c624f67 100644 (file)
@@ -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<A, D extends DeclaredStatement<A>, E extends Eff
      */
     @Override
     @Deprecated
-    public Optional<SchemaPath> schemaPath() {
+    public SchemaPath schemaPath() {
         return substatementGetSchemaPath();
     }
 
index a2881ba88e41bd6d88dc0bdfb1c9bd75ea03c4a8..3020a74172b92cb39b29c7dcfec33085b7cad285 100644 (file)
@@ -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;
index a50d7a72b5927f3a70861739bdc508c25657abb6..ef3264f9967ad3614dfeb922478f18443a317e0f 100644 (file)
@@ -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> 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());
         }
     }
 }
index a3e2956548b10f0af6c91d840e586efe2f7af1c4..edad0024ddaa264c7493cbd785fef9f81a9f9a5e 100644 (file)
@@ -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);