Split out SchemaRootCodecContext.Prototype 77/106377/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Jun 2023 21:13:49 +0000 (23:13 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Sun, 4 Jun 2023 21:29:57 +0000 (23:29 +0200)
This prototype is rather special, split it out, making the dependency
graph a tad simpler.

Change-Id: I8da7e556fdb73f729b054bfb28dbcaa57e577aeb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecPrototype.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java

index c894b28cf44064fabe90cd63c99d3bb84dc7e8f0..e446c7bdf28a1b717c6680664dfcb4c56b94c5b2 100644 (file)
@@ -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<T extends RuntimeTypeContainer
         return haveUnaddressable ? ChildAddressabilitySummary.MIXED : ChildAddressabilitySummary.ADDRESSABLE;
     }
 
-    static DataContainerCodecPrototype<BindingRuntimeTypes> rootPrototype(final CodecContextFactory factory) {
-        return new DataObjectCodecPrototype<>(DataRoot.class, NodeIdentifier.create(SchemaContext.NAME),
-            factory.getRuntimeContext().getTypes(), factory);
-    }
-
     static <T extends CompositeRuntimeType> DataContainerCodecPrototype<T> from(final Class<?> cls, final T type,
             final CodecContextFactory factory) {
         return new DataObjectCodecPrototype<>(cls, createIdentifier(type), type, factory);
index defacb257b7b9e2137b8ae810f90bc9fa55e4933..2f6bacc52519b50810927aaa501cacf6d250a2bb 100644 (file)
@@ -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<T extends RuntimeTypeContainer> extends DataContainerCodecPrototype<T> {
+// FIXME: abstract and sealed
+non-sealed class DataObjectCodecPrototype<T extends RuntimeTypeContainer> extends DataContainerCodecPrototype<T> {
     private final @NonNull NodeIdentifier yangArg;
 
     @SuppressWarnings("unchecked")
@@ -39,7 +40,7 @@ final class DataObjectCodecPrototype<T extends RuntimeTypeContainer> extends Dat
     }
 
     @Override
-    NodeIdentifier getYangArg() {
+    final NodeIdentifier getYangArg() {
         return yangArg;
     }
 
index 47386d773c898f037a5404704ab981a8eac35780..b190aad2b2377b61231fd774a7972f1dcdda6fb3 100644 (file)
@@ -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<D extends DataObject> extends DataContainerCodecContext<D, BindingRuntimeTypes>
         implements BindingDataObjectCodecTreeNode<D> {
+    /**
+     * Prototype for the root of YANG modeled world. This class only exists because DataContainerCodecContext requires
+     * a prototype.
+     */
+    private static final class Prototype extends DataObjectCodecPrototype<BindingRuntimeTypes> {
+        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<?, BindingRuntimeTypes> createInstance() {
+            throw new UnsupportedOperationException("Should never be invoked");
+        }
+    }
 
     private final LoadingCache<Class<? extends DataObject>, DataContainerCodecContext<?, ?>> childrenByClass =
         CacheBuilder.newBuilder().build(new CacheLoader<>() {
@@ -203,7 +222,7 @@ final class SchemaRootCodecContext<D extends DataObject> extends DataContainerCo
         });
 
     SchemaRootCodecContext(final CodecContextFactory factory) {
-        super(DataContainerCodecPrototype.rootPrototype(factory));
+        super(new Prototype(factory));
     }
 
     @Override