Seal NormalizedNodeContainer 55/100955/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 3 May 2022 20:52:42 +0000 (22:52 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 3 May 2022 20:54:31 +0000 (22:54 +0200)
NormalizedNodeContainers come in two shapes: ordered and unordered,
make sure javac enforces this invariant.

Change-Id: Id4e1807d65e1da8ead48f55493fd0797726007b2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/DistinctNodeContainer.java
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/NormalizedNodeContainer.java
data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/schema/OrderedNodeContainer.java

index 15d66c9bab0298c184154fad20a534dfcd147ee9..dd2ad108113133e45433cb69ed302cc99538bad6 100644 (file)
@@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgum
  * @param <K> Child path argument type
  * @param <V> Child Node type
  */
-public interface DistinctNodeContainer<K extends PathArgument, V extends NormalizedNode>
+public non-sealed interface DistinctNodeContainer<K extends PathArgument, V extends NormalizedNode>
         extends NormalizedNodeContainer<V> {
     /**
      * {@inheritDoc}
index 414b7137c7c9a125c952ede12d0d985b02100760..3a8d5c5dc2cab6cd58c0b0c43734b13dfa837946 100644 (file)
@@ -17,7 +17,8 @@ import org.eclipse.jdt.annotation.NonNull;
  *
  * @param <V> Child Node type
  */
-public interface NormalizedNodeContainer<V extends NormalizedNode> extends NormalizedNode, OrderingAware {
+public sealed interface NormalizedNodeContainer<V extends NormalizedNode> extends NormalizedNode, OrderingAware
+        permits DistinctNodeContainer, OrderedNodeContainer {
     /**
      * {@inheritDoc}
      *
index ff177cb71b5a1c6af0c639436f6d860455bb9b4d..1869c67a355c6caaca7464889821aa3879bf34dc 100644 (file)
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
  */
 // FIXME: 9.0.0: we really want to do a List<@NonNull V> body(), but need to reconcile that with key-based lookup in
 //               implementations -- and those are using only a Map internally.
-public interface OrderedNodeContainer<V extends NormalizedNode>
+public non-sealed interface OrderedNodeContainer<V extends NormalizedNode>
         extends NormalizedNodeContainer<V>, MixinNode, OrderingAware.User {
     @Override
     NodeIdentifier getIdentifier();