Remove unneeded checkstyle supressions
[mdsal.git] / binding / mdsal-binding-spec-util / src / main / java / org / opendaylight / mdsal / binding / spec / reflect / BindingReflections.java
index f82d8aa401d58f7a39f4c7549d4b0bccfdce1165..2a0cbed23da3be91ff41ca4f0cb0b21f546abfb5 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.mdsal.binding.spec.reflect;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.requireNonNull;
 
 import com.google.common.annotations.Beta;
 import com.google.common.cache.CacheBuilder;
@@ -33,6 +34,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.checkerframework.checker.regex.qual.Regex;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.util.ClassLoaderUtils;
 import org.opendaylight.yangtools.yang.binding.Action;
@@ -189,9 +191,10 @@ public final class BindingReflections {
         return Optional.empty();
     }
 
-    // FIXME: 4.0.0: check that the QName is actually resolved, i.e. guarantee @NonNull here
-    public static QName getQName(final Class<? extends BaseIdentity> context) {
-        return findQName(context);
+    public static @NonNull QName getQName(final Class<? extends BaseIdentity> bindingClass) {
+        final Optional<QName> qname = CLASS_TO_QNAME.getUnchecked(requireNonNull(bindingClass));
+        checkState(qname.isPresent(), "Failed to resolve QName of %s", bindingClass);
+        return qname.get();
     }
 
     /**
@@ -454,7 +457,7 @@ public final class BindingReflections {
         return getChildrenClassToMethod(type, BindingMapping.NONNULL_PREFIX);
     }
 
-    @SuppressWarnings({ "unchecked", "rawtypes", "checkstyle:illegalCatch" })
+    @SuppressWarnings("checkstyle:illegalCatch")
     private static Optional<Class<? extends DataContainer>> getYangModeledReturnType(final Method method,
             final String prefix) {
         final String methodName = method.getName();
@@ -462,16 +465,14 @@ public final class BindingReflections {
             return Optional.empty();
         }
 
-        Class returnType = method.getReturnType();
+        final Class<?> returnType = method.getReturnType();
         if (DataContainer.class.isAssignableFrom(returnType)) {
-            return Optional.of(returnType);
-        }
-        if (List.class.isAssignableFrom(returnType)) {
+            return optionalDataContainer(returnType);
+        } else if (List.class.isAssignableFrom(returnType)) {
             try {
                 return ClassLoaderUtils.callWithClassLoader(method.getDeclaringClass().getClassLoader(), () -> {
                     return ClassLoaderUtils.getFirstGenericParameter(method.getGenericReturnType()).flatMap(
-                        result -> result instanceof Class && DataContainer.class.isAssignableFrom((Class) result)
-                            ? Optional.of((Class<? extends DataContainer>) result) : Optional.empty());
+                        result -> result instanceof Class ? optionalCast((Class<?>) result) : Optional.empty());
                 });
             } catch (Exception e) {
                 /*
@@ -485,6 +486,14 @@ public final class BindingReflections {
         return Optional.empty();
     }
 
+    private static Optional<Class<? extends DataContainer>> optionalCast(final Class<?> type) {
+        return DataContainer.class.isAssignableFrom(type) ? optionalDataContainer(type) : Optional.empty();
+    }
+
+    private static Optional<Class<? extends DataContainer>> optionalDataContainer(final Class<?> type) {
+        return Optional.of(type.asSubclass(DataContainer.class));
+    }
+
     private static class ClassToQNameLoader extends CacheLoader<Class<?>, Optional<QName>> {
 
         @Override