Eliminate DataSchemaContextNode.isLeaf() 88/106088/5
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 20 May 2023 20:56:04 +0000 (22:56 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 20 May 2023 21:53:23 +0000 (23:53 +0200)
This method has a rather unfortunate name, as it covers LeafNode and
LeafSetEntryNode. Capture the property as a marker interface,
SimpleValue, reducing confusion and the number of methods.

JIRA: YANGTOOLS-1413
Change-Id: Ia21cc07226d3a64a27f4cb3b88d8817472b28b8b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/XpathStringParsingPathArgumentBuilder.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractInteriorContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractLeafNodeContext.java [deleted file]
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/LeafContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/LeafListEntryContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/OpaqueContextNode.java

index 85692bb6f6c618448191998d3ff9d0d2c0110023..35bbd5bf4a5bb6ac6f9172a2260889aecd9da994 100644 (file)
@@ -19,6 +19,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
 import org.opendaylight.yangtools.yang.data.util.impl.legacy.AbstractMixinContextNode;
+import org.opendaylight.yangtools.yang.data.util.impl.legacy.LeafContextNode;
+import org.opendaylight.yangtools.yang.data.util.impl.legacy.LeafListEntryContextNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
@@ -55,6 +57,13 @@ public interface DataSchemaContextNode {
         @NonNull PathArgument mixinPathArgument();
     }
 
+    /**
+     * Marker interface for contexts which boil down to a simple, not-structured value. The
+     */
+    sealed interface SimpleValue extends DataSchemaContextNode permits LeafContextNode, LeafListEntryContextNode {
+        // Marker interface
+    }
+
     @NonNull DataSchemaNode getDataSchemaNode();
 
     // FIXME: YANGTOOLS-1413: this idea is wrong -- if does the wrong thing for items of leaf-list and keyed list
@@ -64,10 +73,6 @@ public interface DataSchemaContextNode {
     // FIXME: YANGTOOLS-1413: document this method and (most likely) split it out to a separate interface
     boolean isKeyedEntry();
 
-    // FIXME: YANGTOOLS-1413: this is counter-intuitive: anydata/anyxml are considered non-leaf. This method needs
-    //                        a better name and a proper description.
-    boolean isLeaf();
-
     /**
      * Find a child node identifier by its {@link PathArgument}.
      *
index bcc7e1583723b6362f10d25a700230eb4f4290cc..c80d102d01389e340cc973940f14828c09a66729 100644 (file)
@@ -22,6 +22,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode.PathMixin;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode.SimpleValue;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
@@ -159,7 +160,7 @@ final class XpathStringParsingPathArgumentBuilder implements Mutable {
             checkCurrentAndSkip(PRECONDITION_END, "Precondition must ends with ']'");
 
             // Break-out from method for leaf-list case
-            if (key == null && currentNode.isLeaf()) {
+            if (key == null && currentNode instanceof SimpleValue) {
                 checkValid(offset == data.length(), "Leaf argument must be last argument of instance identifier.");
                 final var currentSchema = currentNode.getDataSchemaNode();
 
index ba56d78f85a33aab293079f1cc20721fd0030e17..be5a0833424ad8863e2daf49e9935a8742ffcd80 100644 (file)
@@ -14,9 +14,4 @@ abstract class AbstractInteriorContextNode extends AbstractDataSchemaContextNode
     AbstractInteriorContextNode(final PathArgument pathArgument, final DataSchemaNode schema) {
         super(pathArgument, schema);
     }
-
-    @Override
-    public final boolean isLeaf() {
-        return false;
-    }
 }
\ No newline at end of file
diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractLeafNodeContext.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/impl/legacy/AbstractLeafNodeContext.java
deleted file mode 100644 (file)
index b4100e3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.util.impl.legacy;
-
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-
-abstract class AbstractLeafNodeContext extends AbstractLeafContextNode {
-    AbstractLeafNodeContext(final PathArgument pathArgument, final DataSchemaNode schema) {
-        super(pathArgument, schema);
-    }
-
-    @Override
-    public final boolean isLeaf() {
-        return true;
-    }
-}
index 3cf2196c039f19610a182e5ba1f12c70f42fdd5f..fd0f7ca59b7c90fce6d0d90badbfcb8703475b1f 100644 (file)
@@ -8,9 +8,10 @@
 package org.opendaylight.yangtools.yang.data.util.impl.legacy;
 
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode.SimpleValue;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 
-final class LeafContextNode extends AbstractLeafNodeContext {
+public final class LeafContextNode extends AbstractLeafContextNode implements SimpleValue {
     LeafContextNode(final LeafSchemaNode schema) {
         super(NodeIdentifier.create(schema.getQName()), schema);
     }
index 15664d1c11a3518bc8b6ec901a6f455cc0056b5d..bf87e571f5f93a41f15d828dee6becd501bf0681 100644 (file)
@@ -9,10 +9,11 @@ package org.opendaylight.yangtools.yang.data.util.impl.legacy;
 
 import org.opendaylight.yangtools.yang.common.Empty;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
+import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode.SimpleValue;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 
-final class LeafListEntryContextNode extends AbstractLeafNodeContext {
+public final class LeafListEntryContextNode extends AbstractLeafContextNode implements SimpleValue {
     LeafListEntryContextNode(final LeafListSchemaNode schema) {
         // FIXME: YANGTOOLS-1413: Empty() here is NOT NICE -- it assumes the list is of such entries...
         super(new NodeWithValue<>(schema.getQName(), Empty.value()), schema);
index 1385dd56faa0d535e738623d31cae450dafa6d92..6fc31efcd09f33d95aded14cf81dde220da6558a 100644 (file)
@@ -14,9 +14,4 @@ final class OpaqueContextNode extends AbstractLeafContextNode {
     OpaqueContextNode(final DataSchemaNode schema) {
         super(NodeIdentifier.create(schema.getQName()), schema);
     }
-
-    @Override
-    public boolean isLeaf() {
-        return false;
-    }
 }