SchemaUnawareCodec is AbstractIllegalArgumentCodec 41/100541/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Apr 2022 09:45:28 +0000 (11:45 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Apr 2022 09:47:19 +0000 (11:47 +0200)
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 <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BitsCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EncapsulatedValueCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/EnumerationCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaUnawareCodec.java

index 5da1c038fe7e4515ccc7a86aa27cec71c9d44b78..ea16c388ab1f05d234b9e6549962b5cb56552979 100644 (file)
@@ -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<String> casted = (Set<String>) input;
@@ -113,7 +115,7 @@ final class BitsCodec extends SchemaUnawareCodec {
     }
 
     @Override
-    public Set<String> serialize(final Object input) {
+    protected Set<String> serializeImpl(final Object input) {
         final Collection<String> result = new ArrayList<>(getters.size());
         for (Entry<String, Method> valueGet : getters.entrySet()) {
             final Boolean value;
index 6f8bcce74a6dc3b7049708a00cd37f671cee54ea..3fce3a705273c93e5d4a90e2c5ba9c9d8a2542bc 100644 (file)
@@ -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) {
index 2cd03826a8d7b62de3b3bd8d8551809c75b34915..1a25ea05d43768d7888aa18ec9d32a1506634c4e 100644 (file)
@@ -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
index 18e68456b264c68d0570de6fe271d5154000e3a1..fd4f0e9b6e1abb9971e2e54af5bacc77eb4f3b38 100644 (file)
@@ -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<Object, Object> {
+abstract class SchemaUnawareCodec extends AbstractIllegalArgumentCodec<Object, Object> {
     /**
      * 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;
         }
     };