From 6adc7af9a1a13edb5bcd4d2538b31525ae63f1f0 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 21 Apr 2020 01:15:06 +0200 Subject: [PATCH] Simplify builder's addAugmentation() method All augmentation already extend DataObject, which really is to say that Augmentation should be doing the same. This has the benefit of giving us access to DataContainer.implementedInterface(), which we can use to add a simplified addAugmentation() method. JIRA: MDSAL-183 Change-Id: I053a2d23e6bf95e07fa58e4078a37661e6e726a3 Signed-off-by: Michael Vorburger Signed-off-by: Robert Varga --- .../binding/dom/codec/impl/DataObjectStreamer.java | 13 ++++--------- .../generator/impl/AbstractTypeGenerator.java | 3 +-- .../java/api/generator/BuilderTemplate.xtend | 5 +++++ .../binding/spec/util/DataObjectReadingUtil.java | 7 ++----- .../spec/reflect/BindingReflectionsTest.java | 5 +++++ .../yangtools/yang/binding/Augmentation.java | 5 +++-- 6 files changed, 20 insertions(+), 18 deletions(-) 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/DataObjectStreamer.java index f21856fdd4..547cd5b223 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/DataObjectStreamer.java @@ -7,7 +7,6 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; -import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Verify.verify; import com.google.common.annotations.Beta; @@ -165,20 +164,16 @@ public abstract class DataObjectStreamer implements DataOb writer.endNode(); } - @SuppressWarnings("rawtypes") - private static void emitAugmentation(final Class type, final Augmentation value, + private static void emitAugmentation(final Class> type, final Augmentation value, final BindingStreamEventWriter writer, final DataObjectSerializerRegistry registry) throws IOException { /* - * Binding Specification allowed to insert augmentation with null for - * value, which effectively could be used to remove augmentation - * from builder / DTO. + * Binding Specification allowed to insert augmentation with null for value, which effectively could be used to + * remove augmentation from builder / DTO. */ if (value != null) { - checkArgument(value instanceof DataObject); - @SuppressWarnings("unchecked") final DataObjectSerializer serializer = registry.getSerializer(type); if (serializer != null) { - serializer.serialize((DataObject) value, writer); + serializer.serialize(value, writer); } else { LOG.warn("DataObjectSerializer is not present for {} in registry {}", type, registry); } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java index 538c06ac88..571fbd8a30 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java @@ -1009,10 +1009,9 @@ abstract class AbstractTypeGenerator { final GeneratedTypeBuilder augTypeBuilder = typeProvider.newGeneratedTypeBuilder( JavaTypeName.create(augmentPackageName, augTypeName)); - augTypeBuilder.addImplementsType(DATA_OBJECT); + augTypeBuilder.addImplementsType(augmentation(targetTypeRef)); defaultImplementedInterace(augTypeBuilder); - augTypeBuilder.addImplementsType(augmentation(targetTypeRef)); annotateDeprecatedIfNecessary(augSchema, augTypeBuilder); addImplementedInterfaceFromUses(augSchema, augTypeBuilder); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index 673ca581d6..d687462792 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -11,6 +11,7 @@ import static extension org.apache.commons.text.StringEscapeUtils.escapeJava import static org.opendaylight.mdsal.binding.model.util.BindingTypes.DATA_OBJECT import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD +import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME import com.google.common.collect.ImmutableList import java.util.ArrayList @@ -341,6 +342,10 @@ class BuilderTemplate extends AbstractBuilderTemplate { «val augmentTypeRef = augmentType.importedName» «val jlClassRef = CLASS.importedName» «val hashMapRef = JU_HASHMAP.importedName» + public «type.name» add«AUGMENTATION_FIELD_UPPER»(«augmentTypeRef» augmentation) { + return add«AUGMENTATION_FIELD_UPPER»(augmentation.«DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME»(), augmentation); + } + public «type.name» add«AUGMENTATION_FIELD_UPPER»(«jlClassRef» augmentationType, «augmentTypeRef» augmentationValue) { if (augmentationValue == null) { return remove«AUGMENTATION_FIELD_UPPER»(augmentationType); diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/util/DataObjectReadingUtil.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/util/DataObjectReadingUtil.java index 67178c8e72..1bbe219ba9 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/util/DataObjectReadingUtil.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/util/DataObjectReadingUtil.java @@ -302,14 +302,11 @@ public final class DataObjectReadingUtil { } @Override + @SuppressWarnings({ "rawtypes", "unchecked" }) public DataContainer read(final DataContainer parent, final Class child) { checkArgument(Augmentation.class.isAssignableFrom(child), "Child must be Augmentation."); checkArgument(parent instanceof Augmentable, "Parent must be Augmentable."); - - @SuppressWarnings({ "rawtypes", "unchecked" }) - Augmentation potential = ((Augmentable) parent).augmentation(child); - checkState(potential instanceof DataContainer, "Readed augmention must be data object"); - return (DataContainer) potential; + return ((Augmentable) parent).augmentation(child); } } diff --git a/binding/mdsal-binding-spec-util/src/test/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflectionsTest.java b/binding/mdsal-binding-spec-util/src/test/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflectionsTest.java index 1065418157..a0355e6977 100644 --- a/binding/mdsal-binding-spec-util/src/test/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflectionsTest.java +++ b/binding/mdsal-binding-spec-util/src/test/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflectionsTest.java @@ -76,5 +76,10 @@ public class BindingReflectionsTest { ListenableFuture rpcMethodTest2() { return null; } + + @Override + public Class implementedInterface() { + return TestImplementation.class; + } } } \ No newline at end of file diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/Augmentation.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/Augmentation.java index 52de172fd1..c3e1283c2a 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/Augmentation.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/Augmentation.java @@ -16,6 +16,7 @@ package org.opendaylight.yangtools.yang.binding; * * @param Class to which this implementation is extension. */ -public interface Augmentation { - +public interface Augmentation extends DataObject { + @Override + Class> implementedInterface(); } -- 2.36.6