From 697421917530341f0fd3cab217d162137bc2beb4 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 28 Jun 2023 11:47:28 +0200 Subject: [PATCH] Do not require DataObject for streaming DataContainer is completely sufficient, require just that. JIRA: MDSAL-805 Change-Id: Iff55143f2c3bcc8a4b678649285f170f0353db5c Signed-off-by: Robert Varga --- .../dom/codec/impl/BindingCodecContext.java | 29 +++++---- .../impl/CachingNormalizedNodeSerializer.java | 8 +-- .../dom/codec/impl/CodecContextFactory.java | 4 +- .../codec/impl/DataContainerCodecContext.java | 14 ++--- ...izer.java => DataContainerSerializer.java} | 12 ++-- .../impl/DataContainerSerializerRegistry.java | 22 +++++++ ...reamer.java => DataContainerStreamer.java} | 40 ++++++------- ...va => DataContainerStreamerGenerator.java} | 60 +++++++++---------- .../impl/DataObjectSerializerRegistry.java | 22 ------- 9 files changed, 105 insertions(+), 106 deletions(-) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/{DataObjectSerializer.java => DataContainerSerializer.java} (68%) create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerSerializerRegistry.java rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/{DataObjectStreamer.java => DataContainerStreamer.java} (82%) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/{DataObjectStreamerGenerator.java => DataContainerStreamerGenerator.java} (90%) delete mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectSerializerRegistry.java diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index ef9687dc01..e0798e2098 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -22,7 +22,6 @@ import com.google.common.collect.ImmutableMap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.File; import java.io.IOException; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -103,7 +102,7 @@ import org.slf4j.LoggerFactory; @MetaInfServices(value = BindingDOMCodecServices.class) public final class BindingCodecContext extends AbstractBindingNormalizedNodeSerializer - implements BindingDOMCodecServices, Immutable, CodecContextFactory, DataObjectSerializerRegistry { + implements BindingDOMCodecServices, Immutable, CodecContextFactory, DataContainerSerializerRegistry { private static final Logger LOG = LoggerFactory.getLogger(BindingCodecContext.class); private static final @NonNull NodeIdentifier FAKE_NODEID = new NodeIdentifier(QName.create("fake", "fake")); private static final File BYTECODE_DIRECTORY; @@ -113,21 +112,21 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri BYTECODE_DIRECTORY = Strings.isNullOrEmpty(dir) ? null : new File(dir); } - private final LoadingCache, DataObjectStreamer> streamers = CacheBuilder.newBuilder().build( - new CacheLoader, DataObjectStreamer>() { + private final LoadingCache, DataContainerStreamer> streamers = CacheBuilder.newBuilder().build( + new CacheLoader<>() { @Override - public DataObjectStreamer load(final Class key) throws ReflectiveOperationException { - final Class streamer = DataObjectStreamerGenerator.generateStreamer(loader, BindingCodecContext.this, + public DataContainerStreamer load(final Class key) throws ReflectiveOperationException { + final var streamer = DataContainerStreamerGenerator.generateStreamer(loader, BindingCodecContext.this, key); - final Field instance = streamer.getDeclaredField(DataObjectStreamerGenerator.INSTANCE_FIELD); - return (DataObjectStreamer) instance.get(null); + final var instance = streamer.getDeclaredField(DataContainerStreamerGenerator.INSTANCE_FIELD); + return (DataContainerStreamer) instance.get(null); } }); - private final LoadingCache, DataObjectSerializer> serializers = CacheBuilder.newBuilder().build( - new CacheLoader, DataObjectSerializer>() { + private final LoadingCache, DataContainerSerializer> serializers = CacheBuilder.newBuilder().build( + new CacheLoader<>() { @Override - public DataObjectSerializer load(final Class key) throws ExecutionException { - return new DataObjectSerializer(BindingCodecContext.this, streamers.get(key)); + public DataContainerSerializer load(final Class key) throws ExecutionException { + return new DataContainerSerializer(BindingCodecContext.this, streamers.get(key)); } }); @@ -171,17 +170,17 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri } @Override - public DataObjectSerializer getEventStreamSerializer(final Class type) { + public DataContainerSerializer getEventStreamSerializer(final Class type) { return serializers.getUnchecked(type); } @Override - public DataObjectStreamer getDataObjectSerializer(final Class type) { + public DataContainerStreamer getDataContainerStreamer(final Class type) { return streamers.getUnchecked(type); } @Override - public DataObjectSerializer getSerializer(final Class type) { + public DataContainerSerializer getSerializer(final Class type) { return serializers.getUnchecked(type); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeSerializer.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeSerializer.java index 7621f6f401..b02b64879a 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeSerializer.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CachingNormalizedNodeSerializer.java @@ -26,8 +26,8 @@ import org.slf4j.LoggerFactory; * This serializer implements {@link BindingStreamEventWriter} along with {@link BindingSerializer}. * *

- * {@link BindingSerializer} interface is used by generated implementations of {@link DataObjectSerializer} to provide - * Binding object for inspection and to prevent streaming of already serialized object. + * {@link BindingSerializer} interface is used by generated implementations of {@link DataContainerSerializer} to + * provide Binding object for inspection and to prevent streaming of already serialized object. */ final class CachingNormalizedNodeSerializer extends ForwardingBindingStreamEventWriter implements BindingSerializer { @@ -103,7 +103,7 @@ final class CachingNormalizedNodeSerializer extends ForwardingBindingStreamEvent * *

* Note that this optional is serialization of child node invoked from - * {@link org.opendaylight.mdsal.binding.dom.codec.impl.DataObjectSerializer}, which may opt-out from + * {@link org.opendaylight.mdsal.binding.dom.codec.impl.DataContainerSerializer}, which may opt-out from * streaming of data when non-null result is returned. */ @Override @@ -128,4 +128,4 @@ final class CachingNormalizedNodeSerializer extends ForwardingBindingStreamEvent } return null; } -} \ No newline at end of file +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java index 8b1a2ecff6..c51ff4c56d 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecContextFactory.java @@ -55,7 +55,7 @@ sealed interface CodecContextFactory permits BindingCodecContext { */ @NonNull BindingClassLoader getLoader(); - @NonNull DataObjectStreamer getDataObjectSerializer(Class type); + @NonNull DataContainerStreamer getDataContainerStreamer(Class type); - DataObjectSerializer getEventStreamSerializer(Class type); + DataContainerSerializer getEventStreamSerializer(Class type); } 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 11051c7db7..b7ed9619f6 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 @@ -64,7 +64,7 @@ abstract sealed class DataContainerCodecContext prototype) { this.prototype = requireNonNull(prototype); @@ -251,16 +251,16 @@ abstract sealed class DataContainerCodecContext delegate; +public final class DataContainerSerializer { + private final @NonNull DataContainerSerializerRegistry registry; + private final @NonNull DataContainerStreamer delegate; - DataObjectSerializer(final DataObjectSerializerRegistry registry, final DataObjectStreamer delegate) { + DataContainerSerializer(final DataContainerSerializerRegistry registry, final DataContainerStreamer delegate) { this.registry = requireNonNull(registry); this.delegate = requireNonNull(delegate); } @@ -32,7 +32,7 @@ final class DataObjectSerializer { * @param obj Source of stream events * @param stream Stream to which events should be written. */ - void serialize(final DataObject obj, final BindingStreamEventWriter stream) throws IOException { + void serialize(final DataContainer obj, final BindingStreamEventWriter stream) throws IOException { delegate.serialize(registry, obj, stream); } } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerSerializerRegistry.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerSerializerRegistry.java new file mode 100644 index 0000000000..5ebb8117ee --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerSerializerRegistry.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.dom.codec.impl; + +import org.opendaylight.yangtools.yang.binding.DataContainer; + +/** + * SPI-level contract for registry of {@link DataContainerSerializer}. The contract is kept between implementation of + * {@link DataContainerSerializer}, Registry provides lookup for serializers to support recursive serialization of + * nested {@link DataContainer}s. + */ +// FIXME: this interface should not be necessary +public interface DataContainerSerializerRegistry { + + DataContainerSerializer getSerializer(Class binding); + +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamer.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamer.java similarity index 82% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamer.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamer.java index e9d705e64a..86049f1011 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamer.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamer.java @@ -29,13 +29,13 @@ import org.slf4j.LoggerFactory; * Base superclass for all concrete streamers, that is objects which are able to turn a concrete DataObject into a * stream of events. * - * @param DataObject type + * @param DataContainer type */ @Beta -public abstract class DataObjectStreamer { - private static final Logger LOG = LoggerFactory.getLogger(DataObjectStreamer.class); +public abstract class DataContainerStreamer { + private static final Logger LOG = LoggerFactory.getLogger(DataContainerStreamer.class); - protected DataObjectStreamer() { + protected DataContainerStreamer() { } @@ -46,14 +46,14 @@ public abstract class DataObjectStreamer { * DataObjectSerializerRegistry may be used to lookup serializers for other generated classes in order to support * writing their events. */ - protected abstract void serialize(DataObjectSerializerRegistry reg, DataObject obj, BindingStreamEventWriter stream) - throws IOException; + protected abstract void serialize(DataContainerSerializerRegistry reg, DataContainer obj, + BindingStreamEventWriter stream) throws IOException; protected static final void streamAnydata(final BindingStreamEventWriter writer, final String localName, final Object value) throws IOException { - if (value != null && writer instanceof AnydataBindingStreamWriter) { + if (value != null && writer instanceof AnydataBindingStreamWriter anydataWriter) { verify(value instanceof OpaqueObject, "Unexpected data %s", value); - ((AnydataBindingStreamWriter) writer).anydataNode(localName, (OpaqueObject) value); + anydataWriter.anydataNode(localName, (OpaqueObject) value); } } @@ -64,7 +64,7 @@ public abstract class DataObjectStreamer { } } - protected static final void streamAugmentations(final DataObjectSerializerRegistry registry, + protected static final void streamAugmentations(final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final Augmentable obj) throws IOException { for (final var aug : obj.augmentations().entrySet()) { emitAugmentation(aug.getKey(), aug.getValue(), writer, registry); @@ -72,12 +72,12 @@ public abstract class DataObjectStreamer { } protected static final void streamChoice(final Class choiceClass, - final DataObjectSerializerRegistry registry, final BindingStreamEventWriter writer, final C value) + final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final C value) throws IOException { if (value != null) { final Class caseClass = value.implementedInterface(); writer.startChoiceNode(choiceClass, BindingStreamEventWriter.UNKNOWN_SIZE); - final DataObjectSerializer caseStreamer = registry.getSerializer(caseClass.asSubclass(DataObject.class)); + final DataContainerSerializer caseStreamer = registry.getSerializer(caseClass.asSubclass(DataObject.class)); if (caseStreamer != null) { if (tryCache(writer, (DataObject) value)) { caseStreamer.serialize((DataObject) value, writer); @@ -90,8 +90,8 @@ public abstract class DataObjectStreamer { } } - protected static final void streamContainer(final DataObjectStreamer childStreamer, - final DataObjectSerializerRegistry registry, final BindingStreamEventWriter writer, final C value) + protected static final void streamContainer(final DataContainerStreamer childStreamer, + final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final C value) throws IOException { if (value != null && tryCache(writer, value)) { childStreamer.serialize(registry, value, writer); @@ -122,7 +122,7 @@ public abstract class DataObjectStreamer { } protected static final void streamList(final Class childClass, - final DataObjectStreamer childStreamer, final DataObjectSerializerRegistry registry, + final DataContainerStreamer childStreamer, final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final List value) throws IOException { final int size = nullSize(value); if (size != 0) { @@ -132,7 +132,7 @@ public abstract class DataObjectStreamer { } protected static final > void streamMap(final Class childClass, - final DataObjectStreamer childStreamer, final DataObjectSerializerRegistry registry, + final DataContainerStreamer childStreamer, final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final Map value) throws IOException { final int size = nullSize(value); if (size != 0) { @@ -142,7 +142,7 @@ public abstract class DataObjectStreamer { } protected static final > void streamOrderedMap(final Class childClass, - final DataObjectStreamer childStreamer, final DataObjectSerializerRegistry registry, + final DataContainerStreamer childStreamer, final DataContainerSerializerRegistry registry, final BindingStreamEventWriter writer, final List value) throws IOException { final int size = nullSize(value); if (size != 0) { @@ -151,8 +151,8 @@ public abstract class DataObjectStreamer { } } - private static void commonStreamList(final DataObjectSerializerRegistry registry, - final BindingStreamEventWriter writer, final DataObjectStreamer childStreamer, + private static void commonStreamList(final DataContainerSerializerRegistry registry, + final BindingStreamEventWriter writer, final DataContainerStreamer childStreamer, final Collection value) throws IOException { for (E entry : value) { @@ -172,13 +172,13 @@ public abstract class DataObjectStreamer { } private static void emitAugmentation(final Class> type, final Augmentation value, - final BindingStreamEventWriter writer, final DataObjectSerializerRegistry registry) throws IOException { + final BindingStreamEventWriter writer, final DataContainerSerializerRegistry registry) throws IOException { /* * Binding Specification allowed to insert augmentation with null for value, which effectively could be used to * remove augmentation from builder / DTO. */ if (value != null) { - final DataObjectSerializer serializer = registry.getSerializer(type); + final DataContainerSerializer serializer = registry.getSerializer(type); if (serializer != null) { serializer.serialize(value, writer); } else { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamerGenerator.java similarity index 90% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamerGenerator.java index bb362171af..8c23f7a052 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataContainerStreamerGenerator.java @@ -78,17 +78,17 @@ import org.opendaylight.yangtools.yang.model.api.NotificationDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class DataObjectStreamerGenerator> implements ClassGenerator { +final class DataContainerStreamerGenerator> implements ClassGenerator { static final String INSTANCE_FIELD = "INSTANCE"; - private static final Logger LOG = LoggerFactory.getLogger(DataObjectStreamerGenerator.class); + private static final Logger LOG = LoggerFactory.getLogger(DataContainerStreamerGenerator.class); private static final Generic BB_VOID = TypeDefinition.Sort.describe(void.class); - private static final Generic BB_DATAOBJECT = TypeDefinition.Sort.describe(DataObject.class); - private static final Generic BB_DOSR = TypeDefinition.Sort.describe(DataObjectSerializerRegistry.class); + private static final Generic BB_DATA_CONTAINER = TypeDefinition.Sort.describe(DataContainer.class); + private static final Generic BB_DOSR = TypeDefinition.Sort.describe(DataContainerSerializerRegistry.class); private static final Generic BB_BESV = TypeDefinition.Sort.describe(BindingStreamEventWriter.class); private static final Generic BB_IOX = TypeDefinition.Sort.describe(IOException.class); - private static final Builder TEMPLATE = new ByteBuddy().subclass(DataObjectStreamer.class) + private static final Builder TEMPLATE = new ByteBuddy().subclass(DataContainerStreamer.class) .modifiers(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_SYNTHETIC); private static final StackManipulation REG = MethodVariableAccess.REFERENCE.loadFrom(1); @@ -118,31 +118,31 @@ final class DataObjectStreamerGenerator> impleme UNKNOWN_SIZE, invokeMethod(BindingStreamEventWriter.class, "startUnkeyedListItem", int.class)); - private static final StackManipulation STREAM_ANYDATA = invokeMethod(DataObjectStreamer.class, + private static final StackManipulation STREAM_ANYDATA = invokeMethod(DataContainerStreamer.class, "streamAnydata", BindingStreamEventWriter.class, String.class, Object.class); - private static final StackManipulation STREAM_ANYXML = invokeMethod(DataObjectStreamer.class, + private static final StackManipulation STREAM_ANYXML = invokeMethod(DataContainerStreamer.class, "streamAnyxml", BindingStreamEventWriter.class, String.class, Object.class); - private static final StackManipulation STREAM_CHOICE = invokeMethod(DataObjectStreamer.class, - "streamChoice", Class.class, DataObjectSerializerRegistry.class, BindingStreamEventWriter.class, + private static final StackManipulation STREAM_CHOICE = invokeMethod(DataContainerStreamer.class, + "streamChoice", Class.class, DataContainerSerializerRegistry.class, BindingStreamEventWriter.class, DataContainer.class); - private static final StackManipulation STREAM_CONTAINER = invokeMethod(DataObjectStreamer.class, - "streamContainer", DataObjectStreamer.class, DataObjectSerializerRegistry.class, BindingStreamEventWriter.class, - DataObject.class); - private static final StackManipulation STREAM_LEAF = invokeMethod(DataObjectStreamer.class, + private static final StackManipulation STREAM_CONTAINER = invokeMethod(DataContainerStreamer.class, + "streamContainer", DataContainerStreamer.class, DataContainerSerializerRegistry.class, + BindingStreamEventWriter.class, DataObject.class); + private static final StackManipulation STREAM_LEAF = invokeMethod(DataContainerStreamer.class, "streamLeaf", BindingStreamEventWriter.class, String.class, Object.class); - private static final StackManipulation STREAM_LEAF_LIST = invokeMethod(DataObjectStreamer.class, + private static final StackManipulation STREAM_LEAF_LIST = invokeMethod(DataContainerStreamer.class, "streamLeafList", BindingStreamEventWriter.class, String.class, Set.class); - private static final StackManipulation STREAM_ORDERED_LEAF_LIST = invokeMethod(DataObjectStreamer.class, + private static final StackManipulation STREAM_ORDERED_LEAF_LIST = invokeMethod(DataContainerStreamer.class, "streamOrderedLeafList", BindingStreamEventWriter.class, String.class, List.class); - private static final StackManipulation STREAM_LIST = invokeMethod(DataObjectStreamer.class, - "streamList", Class.class, DataObjectStreamer.class, DataObjectSerializerRegistry.class, + private static final StackManipulation STREAM_LIST = invokeMethod(DataContainerStreamer.class, + "streamList", Class.class, DataContainerStreamer.class, DataContainerSerializerRegistry.class, BindingStreamEventWriter.class, List.class); - private static final StackManipulation STREAM_MAP = invokeMethod(DataObjectStreamer.class, - "streamMap", Class.class, DataObjectStreamer.class, DataObjectSerializerRegistry.class, + private static final StackManipulation STREAM_MAP = invokeMethod(DataContainerStreamer.class, + "streamMap", Class.class, DataContainerStreamer.class, DataContainerSerializerRegistry.class, BindingStreamEventWriter.class, Map.class); - private static final StackManipulation STREAM_ORDERED_MAP = invokeMethod(DataObjectStreamer.class, - "streamOrderedMap", Class.class, DataObjectStreamer.class, DataObjectSerializerRegistry.class, + private static final StackManipulation STREAM_ORDERED_MAP = invokeMethod(DataContainerStreamer.class, + "streamOrderedMap", Class.class, DataContainerStreamer.class, DataContainerSerializerRegistry.class, BindingStreamEventWriter.class, List.class); // streamAugmentations(reg, stream, obj) @@ -150,7 +150,7 @@ final class DataObjectStreamerGenerator> impleme REG, STREAM, OBJ, - invokeMethod(DataObjectStreamer.class, "streamAugmentations", DataObjectSerializerRegistry.class, + invokeMethod(DataContainerStreamer.class, "streamAugmentations", DataContainerSerializerRegistry.class, BindingStreamEventWriter.class, Augmentable.class)); private final CodecContextFactory registry; @@ -159,7 +159,7 @@ final class DataObjectStreamerGenerator> impleme private final Class type; private final GeneratedType genType; - private DataObjectStreamerGenerator(final CodecContextFactory registry, final GeneratedType genType, + private DataContainerStreamerGenerator(final CodecContextFactory registry, final GeneratedType genType, final DataNodeContainer schema, final Class type, final StackManipulation startEvent) { this.registry = requireNonNull(registry); this.genType = requireNonNull(genType); @@ -168,7 +168,7 @@ final class DataObjectStreamerGenerator> impleme this.startEvent = requireNonNull(startEvent); } - static Class> generateStreamer(final BindingClassLoader loader, + static Class> generateStreamer(final BindingClassLoader loader, final CodecContextFactory registry, final Class type) { final var typeAndSchema = registry.getRuntimeContext().getTypeWithSchema(type); @@ -192,7 +192,7 @@ final class DataObjectStreamerGenerator> impleme return CodecPackage.STREAMER.generateClass(loader, type, // FIXME: cast to GeneratedType: we really should adjust getTypeWithSchema() - new DataObjectStreamerGenerator<>(registry, (GeneratedType) typeAndSchema.javaType(), + new DataContainerStreamerGenerator<>(registry, (GeneratedType) typeAndSchema.javaType(), (DataNodeContainer) schema, type, startEvent)); } @@ -233,7 +233,7 @@ final class DataObjectStreamerGenerator> impleme final GeneratorResult result = GeneratorResult.of(builder .defineMethod("serialize", BB_VOID, Opcodes.ACC_PROTECTED | Opcodes.ACC_FINAL | Opcodes.ACC_SYNTHETIC) - .withParameters(BB_DOSR, BB_DATAOBJECT, BB_BESV) + .withParameters(BB_DOSR, BB_DATA_CONTAINER, BB_BESV) .throwing(BB_IOX) .intercept(new SerializeImplementation(bindingInterface, startEvent, children)).make(), depBuilder.build()); @@ -295,7 +295,7 @@ final class DataObjectStreamerGenerator> impleme private ChildStream containerChildStream(final Method getter) { final Class itemClass = getter.getReturnType().asSubclass(DataObject.class); - final DataObjectStreamer streamer = registry.getDataObjectSerializer(itemClass); + final DataContainerStreamer streamer = registry.getDataContainerStreamer(itemClass); // streamContainer(FooStreamer.INSTANCE, reg, stream, obj.getFoo()) return new ChildStream(streamer, @@ -309,7 +309,7 @@ final class DataObjectStreamerGenerator> impleme private ChildStream listChildStream(final Method getter, final Class itemClass, final ListSchemaNode childSchema) { - final DataObjectStreamer streamer = registry.getDataObjectSerializer(itemClass); + final DataContainerStreamer streamer = registry.getDataContainerStreamer(itemClass); final StackManipulation method; if (childSchema.getKeyDefinition().isEmpty()) { method = STREAM_LIST; @@ -339,7 +339,7 @@ final class DataObjectStreamerGenerator> impleme method); } - private static StackManipulation streamerInstance(final DataObjectStreamer streamer) { + private static StackManipulation streamerInstance(final DataContainerStreamer streamer) { try { return getField(streamer.getClass().getDeclaredField(INSTANCE_FIELD)); } catch (NoSuchFieldException e) { @@ -436,7 +436,7 @@ final class DataObjectStreamerGenerator> impleme dependency = null; } - ChildStream(final DataObjectStreamer streamer, final StackManipulation... stackManipulation) { + ChildStream(final DataContainerStreamer streamer, final StackManipulation... stackManipulation) { super(stackManipulation); dependency = streamer.getClass(); } diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectSerializerRegistry.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectSerializerRegistry.java deleted file mode 100644 index 5e22eaec5e..0000000000 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectSerializerRegistry.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.mdsal.binding.dom.codec.impl; - -import org.opendaylight.yangtools.yang.binding.DataObject; - -/** - * SPI-level contract for registry of {@link DataObjectSerializer}. The contract is kept between implementation of - * {@link DataObjectSerializer}, Registry provides lookup for serializers to support recursive serialization of nested - * {@link DataObject}s. - */ -// FIXME: this interface should not be necessary -public interface DataObjectSerializerRegistry { - - DataObjectSerializer getSerializer(Class binding); - -} -- 2.36.6