Reparent ChoiceCodecContext
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / BindingCodecContext.java
index 33d9e2ad89fa5fd26afa3c59820429b899041b49..2b351405b471bef7c1619eda01406cfe9c6e10ef 100644 (file)
@@ -151,10 +151,10 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
                 return new DataContainerSerializer(BindingCodecContext.this, streamers.get(key));
             }
         });
-    private final LoadingCache<Class<? extends DataObject>, DataContainerCodecContext<?, ?>> childrenByClass =
+    private final LoadingCache<Class<? extends DataObject>, DataContainerCodecContext<?, ?, ?>> childrenByClass =
         CacheBuilder.newBuilder().build(new CacheLoader<>() {
             @Override
-            public DataContainerCodecContext<?, ?> load(final Class<? extends DataObject> key) {
+            public DataContainerCodecContext<?, ?, ?> load(final Class<? extends DataObject> key) {
                 final var childSchema = context.getTypes().bindingChild(JavaTypeName.create(key));
                 if (childSchema instanceof ContainerLikeRuntimeType containerLike) {
                     if (childSchema instanceof ContainerRuntimeType container
@@ -167,7 +167,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
                     return list.keyType() == null ? new ListCodecContext<>(key, list, BindingCodecContext.this)
                         : MapCodecContext.of(key, list, BindingCodecContext.this);
                 } else if (childSchema instanceof ChoiceRuntimeType choice) {
-                    return new ChoiceCodecContext<>(key, choice, BindingCodecContext.this);
+                    return new ChoiceCodecContext<>(key.asSubclass(ChoiceIn.class), choice, BindingCodecContext.this);
                 } else if (childSchema == null) {
                     throw DataContainerCodecContext.childNullException(context, key, "%s is not top-level item.", key);
                 } else {
@@ -177,15 +177,15 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
         });
 
     // FIXME: this could also be a leaf!
-    private final LoadingCache<QName, DataContainerCodecContext<?, ?>> childrenByDomArg =
+    private final LoadingCache<QName, DataContainerCodecContext<?, ?, ?>> childrenByDomArg =
         CacheBuilder.newBuilder().build(new CacheLoader<>() {
             @Override
-            public DataContainerCodecContext<?, ?> load(final QName qname) throws ClassNotFoundException {
+            public DataContainerCodecContext<?, ?, ?> load(final QName qname) throws ClassNotFoundException {
                 final var type = context.getTypes();
                 final var child = type.schemaTreeChild(qname);
                 if (child == null) {
                     final var module = qname.getModule();
-                    if (context.getEffectiveModelContext().findModule(module).isEmpty()) {
+                    if (context.modelContext().findModule(module).isEmpty()) {
                         throw new MissingSchemaException(
                             "Module " + module + " is not present in current schema context.");
                     }
@@ -426,12 +426,12 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
         return new BindingToNormalizedStreamWriter(getActionCodec(action).output(), domWriter);
     }
 
-    @NonNull DataContainerCodecContext<?,?> getCodecContextNode(final InstanceIdentifier<?> binding,
+    @NonNull DataContainerCodecContext<?, ?, ?> getCodecContextNode(final InstanceIdentifier<?> binding,
             final List<PathArgument> builder) {
         final var it = binding.getPathArguments().iterator();
         final var arg = it.next();
 
-        DataContainerCodecContext<?, ?> current;
+        DataContainerCodecContext<?, ?, ?> current;
         final var caseType = arg.getCaseType();
         if (caseType.isPresent()) {
             final @NonNull Class<? extends DataObject> type = caseType.orElseThrow();
@@ -649,7 +649,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
                     final Class<?> valueType = method.getReturnType();
                     final ValueCodec<Object, Object> codec = getCodec(valueType, leafSchema.getType());
                     valueNode = LeafNodeCodecContext.of(leafSchema, codec, method.getName(), valueType,
-                        context.getEffectiveModelContext());
+                        context.modelContext());
                 } else if (schema instanceof LeafListSchemaNode leafListSchema) {
                     final Optional<Type> optType = ClassLoaderUtils.getFirstGenericParameter(
                         method.getGenericReturnType());
@@ -753,10 +753,10 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri
 
     @Override
     @SuppressWarnings("unchecked")
-    public <E extends DataObject> CommonDataObjectCodecContext<E, ?> getStreamChild(final Class<E> childClass) {
+    public <E extends DataObject> DataContainerCodecContext<E, ?, ?> getStreamChild(final Class<E> childClass) {
         final var result = Notification.class.isAssignableFrom(childClass) ? getNotificationContext(childClass)
             : getOrRethrow(childrenByClass, childClass);
-        return (CommonDataObjectCodecContext<E, ?>) result;
+        return (DataContainerCodecContext<E, ?, ?>) result;
     }
 
     @Override