From 13177e045a5596e762c589c953945521a6c11cad Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 11 Jan 2024 18:56:57 +0100 Subject: [PATCH] Loosen BindingDataContainerCodecTreeNode.getBindingClass() 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 --- .../api/BindingDataContainerCodecTreeNode.java | 8 ++++---- .../dom/codec/api/BindingObjectCodecTreeNode.java | 6 +++--- .../api/BindingOpaqueObjectCodecTreeNode.java | 14 +++++++++++--- .../codec/api/BindingTypeObjectCodecTreeNode.java | 7 ++++--- .../codec/api/BindingYangDataCodecTreeNode.java | 2 +- .../AbstractBindingNormalizedNodeCacheHolder.java | 8 ++++---- .../dom/codec/impl/CachingNormalizedNodeCodec.java | 5 ++--- .../dom/codec/impl/DataContainerCodecContext.java | 2 +- 8 files changed, 30 insertions(+), 22 deletions(-) diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingDataContainerCodecTreeNode.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingDataContainerCodecTreeNode.java index 9d48250318..7a6321d66c 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingDataContainerCodecTreeNode.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingDataContainerCodecTreeNode.java @@ -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 DataContainer type */ -public interface BindingDataContainerCodecTreeNode - extends BindingObjectCodecTreeNode, BindingDataObjectCodecTreeParent { +public non-sealed interface BindingDataContainerCodecTreeNode + extends BindingObjectCodecTreeNode, BindingDataObjectCodecTreeParent { /** * 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. */ diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingObjectCodecTreeNode.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingObjectCodecTreeNode.java index b19ed11192..2d4d0e6d2d 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingObjectCodecTreeNode.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingObjectCodecTreeNode.java @@ -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 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 getBindingClass(); + @NonNull Class getBindingClass(); } diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingOpaqueObjectCodecTreeNode.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingOpaqueObjectCodecTreeNode.java index 58818fbec7..ad013fda0c 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingOpaqueObjectCodecTreeNode.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingOpaqueObjectCodecTreeNode.java @@ -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> extends BindingObjectCodecTreeNode, - BindingNormalizedNodeCodec { - +public non-sealed interface BindingOpaqueObjectCodecTreeNode> + extends BindingObjectCodecTreeNode, BindingNormalizedNodeCodec { + /** + * 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 getBindingClass(); } diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingTypeObjectCodecTreeNode.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingTypeObjectCodecTreeNode.java index b714a5f5cb..20e1121ee8 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingTypeObjectCodecTreeNode.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingTypeObjectCodecTreeNode.java @@ -11,7 +11,8 @@ import com.google.common.annotations.Beta; import org.opendaylight.yangtools.yang.binding.TypeObject; @Beta -public interface BindingTypeObjectCodecTreeNode extends BindingObjectCodecTreeNode, - BindingNormalizedNodeCodec { - +public non-sealed interface BindingTypeObjectCodecTreeNode + extends BindingObjectCodecTreeNode, BindingNormalizedNodeCodec { + @Override + Class getBindingClass(); } diff --git a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingYangDataCodecTreeNode.java b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingYangDataCodecTreeNode.java index f7a26bdc17..0e39d81004 100644 --- a/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingYangDataCodecTreeNode.java +++ b/binding/mdsal-binding-dom-codec-api/src/main/java/org/opendaylight/mdsal/binding/dom/codec/api/BindingYangDataCodecTreeNode.java @@ -17,5 +17,5 @@ import org.opendaylight.yangtools.yang.binding.YangData; */ public interface BindingYangDataCodecTreeNode> extends BindingDataContainerCodecTreeNode, BindingYangDataCodec { - // Just a combination of thwo interfaces + // just a class hierarchy thing } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java index 7cfe964d3a..d07de864c5 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AbstractBindingNormalizedNodeCacheHolder.java @@ -38,19 +38,19 @@ abstract class AbstractBindingNormalizedNodeCacheHolder { } }); - private final ImmutableSet> cacheSpec; + private final ImmutableSet> cacheSpec; - AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet> cacheSpec) { + AbstractBindingNormalizedNodeCacheHolder(final ImmutableSet> cacheSpec) { this.cacheSpec = requireNonNull(cacheSpec); } @SuppressWarnings("unchecked") - > + AbstractBindingNormalizedNodeCache getCachingSerializer(final C childCtx) { return isCached(childCtx.getBindingClass()) ? caches.getUnchecked(childCtx) : null; } - final boolean isCached(final Class type) { + final boolean isCached(final Class type) { return cacheSpec.contains(type); } } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeCodec.java index 893938dfb2..4d8599d4c4 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeCodec.java @@ -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 { private final @NonNull C context; - CachingNormalizedNodeCodec(final C context, final ImmutableSet> cacheSpec) { + CachingNormalizedNodeCodec(final C context, final ImmutableSet> cacheSpec) { super(cacheSpec); this.context = requireNonNull(context); } @@ -35,7 +34,7 @@ class CachingNormalizedNodeCodec cache = getCachingSerializer(context); + final var cache = getCachingSerializer(context); return cache == null ? CachingNormalizedNodeSerializer.serializeUsingStreamWriter(this, context, data) : cache.get(data); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java index 4dec5e68c3..d919a4ae9b 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecContext.java @@ -62,7 +62,7 @@ import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -abstract sealed class DataContainerCodecContext +abstract sealed class DataContainerCodecContext extends CodecContext implements BindingDataContainerCodecTreeNode permits CommonDataObjectCodecContext { private static final Logger LOG = LoggerFactory.getLogger(DataContainerCodecContext.class); -- 2.36.6