Reparent ChoiceCodecContext
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / DataContainerCodecContext.java
index a1fd1bfc29658831fe40508ca921dbf54ba0b701..ebd628c0ff1c5c4fcdb41cf482a2c4d1df95a573 100644 (file)
@@ -65,7 +65,7 @@ import org.slf4j.LoggerFactory;
 abstract sealed class DataContainerCodecContext<D extends DataContainer, R extends CompositeRuntimeType,
         P extends DataContainerPrototype<?, R>>
         extends CodecContext implements BindingDataContainerCodecTreeNode<D>
-        permits CommonDataObjectCodecContext {
+        permits ChoiceCodecContext, CommonDataObjectCodecContext {
     private static final Logger LOG = LoggerFactory.getLogger(DataContainerCodecContext.class);
     private static final VarHandle EVENT_STREAM_SERIALIZER;
 
@@ -95,6 +95,18 @@ abstract sealed class DataContainerCodecContext<D extends DataContainer, R exten
         return prototype;
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public final Class<D> getBindingClass() {
+        return (Class<D>) prototype().javaClass();
+    }
+
+    // overridden in AugmentationCodecContext
+    @Override
+    protected NodeIdentifier getDomPathArgument() {
+        return prototype.yangArg();
+    }
+
     @Override
     public final ChildAddressabilitySummary getChildAddressabilitySummary() {
         return childAddressabilitySummary;
@@ -117,12 +129,8 @@ abstract sealed class DataContainerCodecContext<D extends DataContainer, R exten
     abstract @Nullable CodecContextSupplier yangChildSupplier(@NonNull NodeIdentifier arg);
 
     @Override
-    public CommonDataObjectCodecContext<?, ?> bindingPathArgumentChild(final PathArgument arg,
-            final List<YangInstanceIdentifier.PathArgument> builder) {
-        final var child = getStreamChild(arg.getType());
-        child.addYangPathArgument(arg, builder);
-        return child;
-    }
+    public abstract CommonDataObjectCodecContext<?, ?> bindingPathArgumentChild(PathArgument arg,
+        List<YangInstanceIdentifier.PathArgument> builder);
 
     /**
      * Serializes supplied Binding Path Argument and adds all necessary YANG instance identifiers to supplied list.
@@ -144,19 +152,19 @@ abstract sealed class DataContainerCodecContext<D extends DataContainer, R exten
     }
 
     @Override
-    public final <C extends DataObject> CommonDataObjectCodecContext<C, ?> getStreamChild(final Class<C> childClass) {
+    public final <C extends DataObject> DataContainerCodecContext<C, ?, ?> getStreamChild(final Class<C> childClass) {
         return childNonNull(streamChild(childClass), childClass,
             "Child %s is not valid child of %s", getBindingClass(), childClass);
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public final <C extends DataObject> CommonDataObjectCodecContext<C, ?> streamChild(final Class<C> childClass) {
+    public final <C extends DataObject> DataContainerCodecContext<C, ?, ?> streamChild(final Class<C> childClass) {
         final var childProto = streamChildPrototype(requireNonNull(childClass));
-        return childProto == null ? null : (CommonDataObjectCodecContext<C, ?>) childProto.getCodecContext();
+        return childProto == null ? null : (DataContainerCodecContext<C, ?, ?>) childProto.getCodecContext();
     }
 
-    abstract @Nullable CommonDataObjectCodecPrototype<?> streamChildPrototype(@NonNull Class<?> childClass);
+    abstract @Nullable DataContainerPrototype<?, ?> streamChildPrototype(@NonNull Class<?> childClass);
 
     @Override
     public String toString() {