Disconnect DataSchemaContextNode from Identifiable 82/106082/3
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 20 May 2023 18:46:00 +0000 (20:46 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 20 May 2023 21:53:23 +0000 (23:53 +0200)
Split out getIdentifier() into an explicit pathArgument() method, so
that we can hunt down and migrate user.

JIRA: YANGTOOLS-1463
Change-Id: Ibf823e7a783b166fefa1607b0d82dd191978d9eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/ChoiceNodeContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataContainerContextNode.java
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/UnkeyedListMixinContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/UnorderedLeafListMixinContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/UnorderedMapMixinContextNode.java
data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/XpathStringParsingPathArgumentBuilder.java

index 958834bd841ee48cc972bea84eb3440905e9ea8c..da48fab6b1f2c70d62ce41af3d739e785150c6f7 100644 (file)
@@ -35,7 +35,7 @@ final class ChoiceNodeContextNode extends AbstractMixinContextNode<NodeIdentifie
         for (CaseSchemaNode caze : schema.getCases()) {
             for (DataSchemaNode cazeChild : caze.getChildNodes()) {
                 DataSchemaContextNode<?> childOp = DataSchemaContextNode.of(cazeChild);
-                byArgBuilder.put(childOp.getIdentifier(), childOp);
+                byArgBuilder.put(childOp.pathArgument(), childOp);
                 childToCaseBuilder.put(childOp, caze.getQName());
                 for (QName qname : childOp.qnameIdentifiers()) {
                     byQNameBuilder.put(qname, childOp);
@@ -75,7 +75,7 @@ final class ChoiceNodeContextNode extends AbstractMixinContextNode<NodeIdentifie
 
     @Override
     void pushToStack(final @NonNull SchemaInferenceStack stack) {
-        stack.enterChoice(getIdentifier().getNodeType());
+        stack.enterChoice(pathArgument().getNodeType());
     }
 
     private @Nullable DataSchemaContextNode<?> pushToStack(final @Nullable DataSchemaContextNode<?> child,
index 88c42b22649e5a1836bd0637c0c7eebb810c14a9..81ba0d96a9f9e42081d85a3a004188e72c9acec4 100644 (file)
@@ -79,7 +79,7 @@ abstract class DataContainerContextNode<T extends PathArgument> extends Abstract
     private DataSchemaContextNode<?> register(final DataSchemaContextNode<?> potential) {
         if (potential != null) {
             // FIXME: use putIfAbsent() to make sure we do not perform accidental overrwrites
-            byArg.put(potential.getIdentifier(), potential);
+            byArg.put(potential.pathArgument(), potential);
             for (QName qname : potential.qnameIdentifiers()) {
                 byQName.put(qname, potential);
             }
index 81f8e89880e48c4ea9f8d9d2d8148119e2acf840..96f2667c411f2c6519ded2221ae81c77de82e28b 100644 (file)
@@ -15,7 +15,6 @@ import java.util.Optional;
 import java.util.Set;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -46,25 +45,29 @@ import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 // FIXME: YANGTOOLS-1413: this really should be an interface, as there is a ton of non-trivial composition going on:
 //        - getDataSchemaNode() cannot return AugmentationSchemaNode, which is guarded by isMixinNode() and users should
 //          not be touching mixin details anyway
-//        - the idea of getIdentifier() is wrong -- if does the wrong thing for items of leaf-list and keyed list
-//          because those identifiers need a value. We also do not expect users to store the results in a Map, which
-//          defeats the idea of Identifiable
 //        - the generic argument is really an implementation detail and we really would like to also make dataSchemaNode
 //          (or rather: underlying SchemaNode) an argument. Both of these are not something users can influence and
 //          therefore we should not burden them with <?> on each reference to this class
-public abstract class DataSchemaContextNode<T extends PathArgument> extends AbstractSimpleIdentifiable<T> {
+public abstract class DataSchemaContextNode<T extends PathArgument> {
     private final @NonNull DataSchemaNode dataSchemaNode;
+    private final @NonNull T pathArgument;
 
-    DataSchemaContextNode(final T identifier, final DataSchemaNode schema) {
-        super(identifier);
-        dataSchemaNode = requireNonNull(schema);
+    DataSchemaContextNode(final T pathArgument, final DataSchemaNode dataSchemaNode) {
+        this.dataSchemaNode = requireNonNull(dataSchemaNode);
+        this.pathArgument = requireNonNull(pathArgument);
     }
 
     public final @NonNull DataSchemaNode getDataSchemaNode() {
         return dataSchemaNode;
     }
 
-    /**
+    // FIXME: YANGTOOLS-1413: this idea is wrong -- if does the wrong thing for items of leaf-list and keyed list
+    //                        because those identifiers need a value.
+    public final @NonNull T pathArgument() {
+        return pathArgument;
+    }
+
+     /**
      * This node is a {@link NormalizedNode} intermediate, not represented in RFC7950 XML encoding. This is typically
      * one of
      * <ul>
@@ -92,7 +95,7 @@ public abstract class DataSchemaContextNode<T extends PathArgument> extends Abst
     public abstract boolean isLeaf();
 
     Set<QName> qnameIdentifiers() {
-        return ImmutableSet.of(getIdentifier().getNodeType());
+        return ImmutableSet.of(pathArgument().getNodeType());
     }
 
     /**
@@ -160,7 +163,7 @@ public abstract class DataSchemaContextNode<T extends PathArgument> extends Abst
      */
     void pushToStack(final @NonNull SchemaInferenceStack stack) {
         // Accurate for most subclasses
-        stack.enterSchemaTree(getIdentifier().getNodeType());
+        stack.enterSchemaTree(pathArgument().getNodeType());
     }
 
     /**
index 4aa74cc207b09b10d77860d23c3e01506de666f2..6f998128a7ab5efa1fdc68ffb3f5af09575d9dbf 100644 (file)
@@ -35,6 +35,6 @@ final class UnkeyedListMixinContextNode extends AbstractListLikeContextNode<Node
     // FIXME: dead ringers in other AbstractMixinContextNode subclasses
     private @Nullable DataSchemaContextNode<?> innerNodeIfMatch(final QName qname) {
         // FIXME: 10.0.0: requireNonNull(qname)
-        return getIdentifier().getNodeType().equals(qname) ? innerNode : null;
+        return pathArgument().getNodeType().equals(qname) ? innerNode : null;
     }
 }
index 538a76f65b0459588d56c96b61f8baad970d3f8d..0e6819f1d66a4ea4b56073ce9d7032d744dcace2 100644 (file)
@@ -30,6 +30,6 @@ class UnorderedLeafListMixinContextNode extends AbstractListLikeContextNode<Node
     @Override
     public final DataSchemaContextNode<?> getChild(final QName child) {
         // FIXME: requireNonNull, common code with UnkeyedListMixinNode
-        return getIdentifier().getNodeType().equals(child) ? innerOp : null;
+        return pathArgument().getNodeType().equals(child) ? innerOp : null;
     }
 }
index dae9e71b0bb3661619c434c20d98540cdf0e070b..418910036d58eb322b9408709ea9bb3d3293c6b1 100644 (file)
@@ -35,6 +35,6 @@ class UnorderedMapMixinContextNode extends AbstractListLikeContextNode<NodeIdent
     // FIXME: dead ringers in other AbstractMixinContextNode subclasses
     private @Nullable DataSchemaContextNode<?> innerNodeIfMatch(final QName qname) {
         // FIXME: 10.0.0: requireNonNull(qname)
-        return getIdentifier().getNodeType().equals(qname) ? innerNode : null;
+        return pathArgument().getNodeType().equals(qname) ? innerNode : null;
     }
 }
index 2a762c2cf373eb6964cdfcb348c1b0df9b99f78c..05840805afda8bb0e75fc5283c54fa5f1701ff8b 100644 (file)
@@ -113,7 +113,7 @@ final class XpathStringParsingPathArgumentBuilder implements Mutable {
         current = current.getChild(name);
         checkValid(current != null, "%s is not correct schema node identifier.", name);
         while (current.isMixin()) {
-            product.add(current.getIdentifier());
+            product.add(current.pathArgument());
             current = current.getChild(name);
         }
         stack.enterDataTree(name);
@@ -184,7 +184,7 @@ final class XpathStringParsingPathArgumentBuilder implements Mutable {
     private PathArgument computeIdentifier(final QName name) {
         DataSchemaContextNode<?> currentNode = nextContextNode(name);
         checkValid(!currentNode.isKeyedEntry(), "Entry %s requires key or value predicate to be present", name);
-        return currentNode.getIdentifier();
+        return currentNode.pathArgument();
     }
 
     /**