From c225c8c12a35e89168c18d99e48226c141cb8cbc Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 12 Apr 2022 11:45:28 +0200 Subject: [PATCH] SchemaUnawareCodec is AbstractIllegalArgumentCodec AbstractIllegalArgumentCodec is null-hostile, just as really all SchemaUnawareCodecs are. Express this in a the type hierarchy, coalescing things to a place where we can do a like-for like replacement. JIRA: MDSAL-704 Change-Id: I44cc2a0d0e5abcb7ea696eeba65dfe892c5daafb Signed-off-by: Robert Varga --- .../mdsal/binding/dom/codec/impl/BitsCodec.java | 6 ++++-- .../binding/dom/codec/impl/EncapsulatedValueCodec.java | 5 +++-- .../mdsal/binding/dom/codec/impl/EnumerationCodec.java | 5 +++-- .../mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java | 8 ++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BitsCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BitsCodec.java index 5da1c038fe..ea16c388ab 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BitsCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BitsCodec.java @@ -34,6 +34,8 @@ import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition.Bit; // FIXME: 'SchemaUnawareCodec' is not correct: we use BitsTypeDefinition in construction +// FIXME: require the base class to be a TypeObject +// FIXME: MDSAL-743: require BitsTypeObject base class final class BitsCodec extends SchemaUnawareCodec { /* * Use identity comparison for keys and allow classes to be GCd themselves. @@ -88,7 +90,7 @@ final class BitsCodec extends SchemaUnawareCodec { @Override @SuppressWarnings("checkstyle:illegalCatch") - public Object deserialize(final Object input) { + protected Object deserializeImpl(final Object input) { checkArgument(input instanceof Set); @SuppressWarnings("unchecked") final Set casted = (Set) input; @@ -113,7 +115,7 @@ final class BitsCodec extends SchemaUnawareCodec { } @Override - public Set serialize(final Object input) { + protected Set serializeImpl(final Object input) { final Collection result = new ArrayList<>(getters.size()); for (Entry valueGet : getters.entrySet()) { final Boolean value; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java index 6f8bcce74a..3fce3a7052 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java @@ -65,6 +65,7 @@ final class EncapsulatedValueCodec extends SchemaUnawareCodec { } static @NonNull EncapsulatedValueCodec of(final Class typeClz) throws ExecutionException { + // FIXME: require base class to be ScalarTypeObject return CACHE.get(typeClz); } @@ -80,7 +81,7 @@ final class EncapsulatedValueCodec extends SchemaUnawareCodec { @Override @SuppressWarnings("checkstyle:illegalCatch") - public Object deserialize(final Object input) { + protected Object deserializeImpl(final Object input) { try { return constructor.invokeExact(input); } catch (Throwable e) { @@ -91,7 +92,7 @@ final class EncapsulatedValueCodec extends SchemaUnawareCodec { @Override @SuppressWarnings("checkstyle:illegalCatch") - public Object serialize(final Object input) { + protected Object serializeImpl(final Object input) { try { return getter.invokeExact(input); } catch (Throwable e) { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EnumerationCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EnumerationCodec.java index 2cd03826a8..1a25ea05d4 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EnumerationCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EnumerationCodec.java @@ -86,7 +86,7 @@ final class EnumerationCodec extends SchemaUnawareCodec { } @Override - public Enum deserialize(final Object input) { + protected Enum deserializeImpl(final Object input) { checkArgument(input instanceof String, "Input %s is not a String", input); final Enum value = nameToEnum.get(input); checkArgument(value != null, "Invalid enumeration value %s. Valid values are %s", input, nameToEnum.keySet()); @@ -94,8 +94,9 @@ final class EnumerationCodec extends SchemaUnawareCodec { } @Override - public String serialize(final Object input) { + protected String serializeImpl(final Object input) { checkArgument(enumClass.isInstance(input), "Input %s is not a instance of %s", input, enumClass); + // FIXME: verifyNotNull here return requireNonNull(nameToEnum.inverse().get(input)); } } \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java index 18e68456b2..fd4f0e9b6e 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java @@ -12,7 +12,7 @@ import static java.util.Objects.requireNonNull; import java.util.concurrent.ExecutionException; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; -import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; +import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; @@ -22,19 +22,19 @@ import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition; * modules) they may have one static instance generated when first time needed. */ // FIXME: IllegalArgumentCodec is perhaps not appropriate here due to null behavior -abstract class SchemaUnawareCodec implements IllegalArgumentCodec { +abstract class SchemaUnawareCodec extends AbstractIllegalArgumentCodec { /** * No-op Codec, Java YANG Binding uses same types as NormalizedNode model for base YANG types, representing numbers, * binary, strings and empty. */ static final @NonNull SchemaUnawareCodec NOOP_CODEC = new SchemaUnawareCodec() { @Override - public Object serialize(final Object input) { + protected Object serializeImpl(final Object input) { return input; } @Override - public Object deserialize(final Object input) { + protected Object deserializeImpl(final Object input) { return input; } }; -- 2.36.6