From fc327f4449b20ab1825956766a601c8148cf2ad0 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 4 Jun 2023 23:13:49 +0200 Subject: [PATCH] Split out SchemaRootCodecContext.Prototype This prototype is rather special, split it out, making the dependency graph a tad simpler. Change-Id: I8da7e556fdb73f729b054bfb28dbcaa57e577aeb Signed-off-by: Robert Varga --- .../impl/DataContainerCodecPrototype.java | 8 ------- .../codec/impl/DataObjectCodecPrototype.java | 5 +++-- .../codec/impl/SchemaRootCodecContext.java | 21 ++++++++++++++++++- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java index c894b28cf4..e446c7bdf2 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java @@ -15,12 +15,10 @@ import java.lang.invoke.VarHandle; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.dom.codec.api.CommonDataObjectCodecTreeNode.ChildAddressabilitySummary; import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory; -import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeTypes; import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.NotificationRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.RuntimeType; import org.opendaylight.mdsal.binding.runtime.api.RuntimeTypeContainer; -import org.opendaylight.yangtools.yang.binding.DataRoot; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; @@ -34,7 +32,6 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -154,11 +151,6 @@ abstract sealed class DataContainerCodecPrototype rootPrototype(final CodecContextFactory factory) { - return new DataObjectCodecPrototype<>(DataRoot.class, NodeIdentifier.create(SchemaContext.NAME), - factory.getRuntimeContext().getTypes(), factory); - } - static DataContainerCodecPrototype from(final Class cls, final T type, final CodecContextFactory factory) { return new DataObjectCodecPrototype<>(cls, createIdentifier(type), type, factory); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java index defacb257b..2f6bacc525 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java @@ -23,7 +23,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.Item; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.model.api.stmt.PresenceEffectiveStatement; -final class DataObjectCodecPrototype extends DataContainerCodecPrototype { +// FIXME: abstract and sealed +non-sealed class DataObjectCodecPrototype extends DataContainerCodecPrototype { private final @NonNull NodeIdentifier yangArg; @SuppressWarnings("unchecked") @@ -39,7 +40,7 @@ final class DataObjectCodecPrototype extends Dat } @Override - NodeIdentifier getYangArg() { + final NodeIdentifier getYangArg() { return yangArg; } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java index 47386d773c..b190aad2b2 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java @@ -45,6 +45,7 @@ import org.opendaylight.yangtools.yang.binding.BindingObject; import org.opendaylight.yangtools.yang.binding.ChoiceIn; import org.opendaylight.yangtools.yang.binding.DataContainer; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.DataRoot; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedListAction; import org.opendaylight.yangtools.yang.binding.Notification; @@ -54,6 +55,7 @@ import org.opendaylight.yangtools.yang.binding.contract.Naming; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; @@ -62,10 +64,27 @@ import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; final class SchemaRootCodecContext extends DataContainerCodecContext implements BindingDataObjectCodecTreeNode { + /** + * Prototype for the root of YANG modeled world. This class only exists because DataContainerCodecContext requires + * a prototype. + */ + private static final class Prototype extends DataObjectCodecPrototype { + private static final @NonNull NodeIdentifier ROOT_NODEID = NodeIdentifier.create(SchemaContext.NAME); + + Prototype(final CodecContextFactory factory) { + super(DataRoot.class, ROOT_NODEID, factory.getRuntimeContext().getTypes(), factory); + } + + @Override + DataContainerCodecContext createInstance() { + throw new UnsupportedOperationException("Should never be invoked"); + } + } private final LoadingCache, DataContainerCodecContext> childrenByClass = CacheBuilder.newBuilder().build(new CacheLoader<>() { @@ -203,7 +222,7 @@ final class SchemaRootCodecContext extends DataContainerCo }); SchemaRootCodecContext(final CodecContextFactory factory) { - super(DataContainerCodecPrototype.rootPrototype(factory)); + super(new Prototype(factory)); } @Override -- 2.36.6