Loosen BindingDataContainerCodecTreeNode.getBindingClass() 46/109746/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 11 Jan 2024 17:56:57 +0000 (18:56 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 11 Jan 2024 23:10:48 +0000 (00:10 +0100)
Do not require BindingObject, as we stream navigation encounters
ChoiceIn interface, which is not a BindingObject -- it defers to its
constituent children to provide the BindingObject contract through their
DataObject inheritence.

JIRA: MDSAL-815
Change-Id: I76d1c2405138da2f6985216aef2dfa4580cea724
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingDataContainerCodecTreeNode.java
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingObjectCodecTreeNode.java
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingOpaqueObjectCodecTreeNode.java
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingTypeObjectCodecTreeNode.java
binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingYangDataCodecTreeNode.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java

index 9d4825031808bd27b546e66da5a6ee644738ff85..7a6321d66c231af75eea1c5178b5ff41c602ee46 100644 (file)
@@ -11,7 +11,7 @@ import java.util.List;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
-import org.opendaylight.yangtools.yang.binding.BindingObject;
+import org.opendaylight.yangtools.yang.binding.BindingContract;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -23,11 +23,11 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
  *
  * @param <T> DataContainer type
  */
-public interface BindingDataContainerCodecTreeNode<T extends BindingObject & DataContainer>
-        extends BindingObjectCodecTreeNode<T>, BindingDataObjectCodecTreeParent<Empty> {
+public non-sealed interface BindingDataContainerCodecTreeNode<T extends DataContainer>
+        extends BindingObjectCodecTreeNode, BindingDataObjectCodecTreeParent<Empty> {
     /**
      * Returns binding class of interface which represents API of current schema node. The result is same as invoking
-     * {@link DataContainer#implementedInterface()} on instance of data.
+     * {@link BindingContract#implementedInterface()} on instance of data.
      *
      * @return interface which defines API of binding representation of data.
      */
index b19ed111921b4c7d83f0d5f205a27b2715e87c09..2d4d0e6d2db75a2fe6fee597d131fc8d4ee7975b 100644 (file)
@@ -9,14 +9,14 @@ package org.opendaylight.mdsal.binding.dom.codec.api;
 
 import com.google.common.annotations.Beta;
 import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.binding.BindingObject;
 
 @Beta
-public interface BindingObjectCodecTreeNode<T extends BindingObject> extends BindingCodecTreeNode {
+public sealed interface BindingObjectCodecTreeNode extends BindingCodecTreeNode
+        permits BindingDataContainerCodecTreeNode, BindingOpaqueObjectCodecTreeNode, BindingTypeObjectCodecTreeNode {
     /**
      * Returns binding class which represents API of current schema node.
      *
      * @return interface which defines API of binding representation of data.
      */
-    @NonNull Class<T> getBindingClass();
+    @NonNull Class<?> getBindingClass();
 }
index 58818fbec7020d0b9833c514861340ac9d47d55c..ad013fda0c72a91e40fb7637b22142db208179f9 100644 (file)
@@ -8,10 +8,18 @@
 package org.opendaylight.mdsal.binding.dom.codec.api;
 
 import com.google.common.annotations.Beta;
+import org.opendaylight.yangtools.yang.binding.BindingContract;
 import org.opendaylight.yangtools.yang.binding.OpaqueObject;
 
 @Beta
-public interface BindingOpaqueObjectCodecTreeNode<T extends OpaqueObject<T>> extends BindingObjectCodecTreeNode<T>,
-        BindingNormalizedNodeCodec<T> {
-
+public non-sealed interface BindingOpaqueObjectCodecTreeNode<T extends OpaqueObject<T>>
+        extends BindingObjectCodecTreeNode, BindingNormalizedNodeCodec<T> {
+    /**
+     * Returns binding class of interface which represents API of current schema node. The result is same as invoking
+     * {@link BindingContract#implementedInterface()} on instance of data.
+     *
+     * @return interface which defines API of binding representation of data.
+     */
+    @Override
+    Class<T> getBindingClass();
 }
index b714a5f5cb1d8a07d709be5a6989b2574efda4fa..20e1121ee8e725f2d942747d3ca7befe7982d82f 100644 (file)
@@ -11,7 +11,8 @@ import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.binding.TypeObject;
 
 @Beta
-public interface BindingTypeObjectCodecTreeNode<T extends TypeObject> extends BindingObjectCodecTreeNode<T>,
-        BindingNormalizedNodeCodec<T> {
-
+public non-sealed interface BindingTypeObjectCodecTreeNode<T extends TypeObject>
+        extends BindingObjectCodecTreeNode, BindingNormalizedNodeCodec<T> {
+    @Override
+    Class<T> getBindingClass();
 }
index f7a26bdc17152a4e8f662aeb389846117c67e5e6..0e39d8100443f6dd16abbede07978a9427028dee 100644 (file)
@@ -17,5 +17,5 @@ import org.opendaylight.yangtools.yang.binding.YangData;
  */
 public interface BindingYangDataCodecTreeNode<T extends YangData<T>>
         extends BindingDataContainerCodecTreeNode<T>, BindingYangDataCodec<T> {
-    // Just a combination of thwo interfaces
+    // just a class hierarchy thing
 }
index 7cfe964d3ae02a4b1924ea098345af6bc49f5e5f..d07de864c57bc4295f07c29797e6dc8db2ffeb3a 100644 (file)
@@ -38,19 +38,19 @@ abstract class AbstractBindingNormalizedNodeCacheHolder {
             }
         });
 
-    private final ImmutableSet<Class<? extends BindingObject>> cacheSpec;
+    private final ImmutableSet<Class<?>> cacheSpec;
 
-    AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet<Class<? extends BindingObject>> cacheSpec) {
+    AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet<Class<?>> cacheSpec) {
         this.cacheSpec = requireNonNull(cacheSpec);
     }
 
     @SuppressWarnings("unchecked")
-    <T extends BindingObject, C extends CodecContext & BindingObjectCodecTreeNode<?>>
+    <T extends BindingObject, C extends CodecContext & BindingObjectCodecTreeNode>
             AbstractBindingNormalizedNodeCache<T, C> getCachingSerializer(final C childCtx) {
         return isCached(childCtx.getBindingClass()) ? caches.getUnchecked(childCtx) : null;
     }
 
-    final boolean isCached(final Class<? extends BindingObject> type) {
+    final boolean isCached(final Class<?> type) {
         return cacheSpec.contains(type);
     }
 }
index 893938dfb2090aba3f78be66e8246f3176711c3f..4d8599d4c419c2293e7aca20a47ee88f74a10d2e 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.collect.ImmutableSet;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeCachingCodec;
 import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeCodec;
-import org.opendaylight.yangtools.yang.binding.BindingObject;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 
@@ -22,7 +21,7 @@ class CachingNormalizedNodeCodec<D extends DataObject,
         extends AbstractBindingNormalizedNodeCacheHolder implements BindingNormalizedNodeCachingCodec<D> {
     private final @NonNull C context;
 
-    CachingNormalizedNodeCodec(final C context, final ImmutableSet<Class<? extends BindingObject>> cacheSpec) {
+    CachingNormalizedNodeCodec(final C context, final ImmutableSet<Class<?>> cacheSpec) {
         super(cacheSpec);
         this.context = requireNonNull(context);
     }
@@ -35,7 +34,7 @@ class CachingNormalizedNodeCodec<D extends DataObject,
     @Override
     public NormalizedNode serialize(final D data) {
         // Serialize data using stream writer with child cache enable or using the cache if it is available
-        final AbstractBindingNormalizedNodeCache<D, ?> cache = getCachingSerializer(context);
+        final var cache = getCachingSerializer(context);
         return cache == null ? CachingNormalizedNodeSerializer.serializeUsingStreamWriter(this, context, data)
                 : cache.get(data);
     }
index 4dec5e68c35795b85817906898d0d9f09d065982..d919a4ae9b07dc4ea1a04f02ae88ef6fca49e950 100644 (file)
@@ -62,7 +62,7 @@ import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-abstract sealed class DataContainerCodecContext<D extends BindingObject & DataContainer, T extends CompositeRuntimeType>
+abstract sealed class DataContainerCodecContext<D extends DataContainer, T extends CompositeRuntimeType>
         extends CodecContext implements BindingDataContainerCodecTreeNode<D>
         permits CommonDataObjectCodecContext {
     private static final Logger LOG = LoggerFactory.getLogger(DataContainerCodecContext.class);