X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fyang-binding%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fbinding%2FCodeHelpers.java;h=e12cb35a88b4a4883a9072f7c19842ee99b05c53;hb=refs%2Fchanges%2F35%2F100935%2F5;hp=b378a703ba86e688acb52e01afef817f51d5b333;hpb=314a6573772c8593feecb69210357b193184e3be;p=mdsal.git diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java index b378a703ba..e12cb35a88 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java @@ -15,8 +15,10 @@ import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Arrays; import java.util.Collection; +import java.util.HexFormat; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -116,8 +118,7 @@ public final class CodeHelpers { */ public static void appendValue(final ToStringHelper helper, final String name, final byte[] value) { if (value != null) { - // FIXME: MDSAL-692: use hex-encoding instead - helper.add(name, Arrays.toString(value)); + helper.add(name, HexFormat.of().formatHex(value)); } } @@ -213,8 +214,7 @@ public final class CodeHelpers { * @throws IllegalArgumentException always */ public static void throwInvalidLength(final String expected, final byte[] actual) { - // FIXME: MDSAL-692: use hex-encoding instead - throwInvalidLength(expected, Arrays.toString(actual)); + throwInvalidLength(expected, HexFormat.of().formatHex(actual)); } /** @@ -349,6 +349,57 @@ public final class CodeHelpers { return wrapHashCode(Arrays.hashCode(obj)); } + /** + * The constant '31' is the result of folding this code: + *
+     *   
+     *     final int prime = 31;
+     *     int result = 1;
+     *     result = result * prime + Objects.hashCode(obj);
+     *     return result;
+     *   
+     * 
+ * when hashCode is returned as 0, such as due to obj being null or its hashCode being 0. + * + * @param hash Wrapped object hash + * @return Wrapper object hash + */ + private static int wrapHashCode(final int hash) { + return hash == 0 ? 31 : hash; + } + + /** + * Check that the specified {@link Enumeration} object is not {@code null}. This method is meant to be used with + * {@code ofName(String)} and {@code ofValue(int)} static factory methods. + * + * @param obj enumeration object, possibly null + * @param name User-supplied enumeration name + * @return Enumeration object + * @throws IllegalArgumentException if {@code obj} is null + */ + public static @NonNull T checkEnum(final @Nullable T obj, final String name) { + if (obj == null) { + throw new IllegalArgumentException("\"" + name + "\" is not a valid name"); + } + return obj; + } + + /** + * Check that the specified {@link Enumeration} object is not {@code null}. This method is meant to be used with + * {@code ofName(String)} and {@code ofValue(int)} static factory methods. + * + * @param obj enumeration object, possibly null + * @param value User-supplied enumeration value + * @return Enumeration object + * @throws IllegalArgumentException if {@code obj} is null + */ + public static @NonNull T checkEnum(final @Nullable T obj, final int value) { + if (obj == null) { + throw new IllegalArgumentException(value + " is not a valid value"); + } + return obj; + } + /** * Utility method for checking whether a target object is a compatible DataObject. * @@ -389,7 +440,7 @@ public final class CodeHelpers { * @param fieldName name of the field being filled * @param list List, which items should be checked * @return Type-checked List - * @throws IllegalArgumentException if a list item is not instance of {@code requiredItemClass} + * @throws IllegalArgumentException if a list item is not instance of {@code requiredClass} * @throws NullPointerException if {@code requiredClass} or {@code fieldName} is null */ @SuppressWarnings("unchecked") @@ -400,7 +451,7 @@ public final class CodeHelpers { } /** - * Utility method for checking whether the items of target list is compatible. + * Utility method for checking whether the items of target set is compatible. * * @param requiredClass Required item class * @param fieldName name of the field being filled @@ -416,34 +467,17 @@ public final class CodeHelpers { return (Set) set; } + @SuppressFBWarnings(value = "DCN_NULLPOINTER_EXCEPTION", + justification = "Internal NPE->IAE conversion") private static void checkCollectionField(final @NonNull Class requiredClass, final @NonNull String fieldName, final @Nullable Collection collection) { if (collection != null) { try { collection.forEach(item -> requiredClass.cast(requireNonNull(item))); } catch (ClassCastException | NullPointerException e) { - throw new IllegalArgumentException("Invalid input list item for property \"" + requireNonNull(fieldName) + throw new IllegalArgumentException("Invalid input item for property \"" + requireNonNull(fieldName) + "\"", e); } } } - - /** - * The constant '31' is the result of folding this code: - *
-     *   
-     *     final int prime = 31;
-     *     int result = 1;
-     *     result = result * prime + Objects.hashCode(obj);
-     *     return result;
-     *   
-     * 
- * when hashCode is returned as 0, such as due to obj being null or its hashCode being 0. - * - * @param hash Wrapped object hash - * @return Wrapper object hash - */ - private static int wrapHashCode(final int hash) { - return hash == 0 ? 31 : hash; - } }