Binding codec v1 - fix get codec for typedef of empty type
[mdsal.git] / binding / mdsal-binding-dom-codec / src / main / java / org / opendaylight / mdsal / binding / dom / codec / impl / EncapsulatedValueCodec.java
index d52930ec451a0bb5399c3dc3e72623821d813d37..95e43f688c6a01c1a2284bd5b108617a1fa16c3e 100644 (file)
@@ -16,6 +16,9 @@ import java.lang.invoke.MethodType;
 import java.lang.reflect.Method;
 import java.util.concurrent.Callable;
 import org.opendaylight.mdsal.binding.dom.codec.impl.ValueTypeCodec.SchemaUnawareCodec;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
+import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
 
 /**
  * Derived YANG types are just immutable value holders for simple value
@@ -36,9 +39,14 @@ final class EncapsulatedValueCodec extends ReflectionBasedCodec implements Schem
         this.valueType = Preconditions.checkNotNull(valueType);
     }
 
-    static Callable<EncapsulatedValueCodec> loader(final Class<?> typeClz) {
+    static Callable<EncapsulatedValueCodec> loader(final Class<?> typeClz, TypeDefinition<?> typeDef) {
         return () -> {
-            final Method m = typeClz.getMethod("getValue");
+            final Method m;
+            if (typeDef instanceof BooleanTypeDefinition || typeDef instanceof EmptyTypeDefinition) {
+                m = typeClz.getMethod("isValue");
+            } else {
+                m = typeClz.getMethod("getValue");
+            }
             final MethodHandle getter = LOOKUP.unreflect(m).asType(OBJ_METHOD);
             final Class<?> valueType = m.getReturnType();
 
@@ -59,6 +67,7 @@ final class EncapsulatedValueCodec extends ReflectionBasedCodec implements Schem
     }
 
     @Override
+    @SuppressWarnings("checkstyle:illegalCatch")
     public Object deserialize(final Object input) {
         try {
             return constructor.invokeExact(input);
@@ -69,6 +78,7 @@ final class EncapsulatedValueCodec extends ReflectionBasedCodec implements Schem
     }
 
     @Override
+    @SuppressWarnings("checkstyle:illegalCatch")
     public Object serialize(final Object input) {
         try {
             return getter.invokeExact(input);