From: Robert Varga Date: Thu, 11 Oct 2018 18:31:02 +0000 (+0200) Subject: Enable spotbugs in mdsal-binding-spec-util X-Git-Tag: v3.0.1~16 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=cb11424d2284796495172393eff3042892c59b73;p=mdsal.git Enable spotbugs in mdsal-binding-spec-util This fixes up the issues reported and flips enforcement to on. Change-Id: I24d7722143253cc4c16cfac6f6d38976741ee6b2 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-spec-util/pom.xml b/binding/mdsal-binding-spec-util/pom.xml index e3547c1937..510673445b 100644 --- a/binding/mdsal-binding-spec-util/pom.xml +++ b/binding/mdsal-binding-spec-util/pom.xml @@ -40,6 +40,13 @@ checkstyle.violationSeverity=error + + com.github.spotbugs + spotbugs-maven-plugin + + true + + diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/naming/BindingMapping.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/naming/BindingMapping.java index 4d1ac4ce56..118c6d374a 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/naming/BindingMapping.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/naming/BindingMapping.java @@ -148,7 +148,7 @@ public final class BindingMapping { final StringBuilder builder = new StringBuilder(); boolean first = true; - for (String p : DOT_SPLITTER.split(packageName.toLowerCase())) { + for (String p : DOT_SPLITTER.split(packageName.toLowerCase(Locale.ENGLISH))) { if (first) { first = false; } else { @@ -237,9 +237,9 @@ public final class BindingMapping { return str; } if (str.length() == 1) { - return str.toUpperCase(); + return str.toUpperCase(Locale.ENGLISH); } - return str.substring(0, 1).toUpperCase() + str.substring(1); + return str.substring(0, 1).toUpperCase(Locale.ENGLISH) + str.substring(1); } /** @@ -258,9 +258,9 @@ public final class BindingMapping { return str; } if (str.length() == 1) { - return str.toLowerCase(); + return str.toLowerCase(Locale.ENGLISH); } - return str.substring(0, 1).toLowerCase() + str.substring(1); + return str.substring(0, 1).toLowerCase(Locale.ENGLISH) + str.substring(1); } /** diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/AugmentationFieldGetter.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/AugmentationFieldGetter.java index 37e47f0a0f..33009197f1 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/AugmentationFieldGetter.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/AugmentationFieldGetter.java @@ -17,6 +17,9 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; import java.lang.reflect.Field; +import java.security.AccessController; +import java.security.PrivilegedActionException; +import java.security.PrivilegedExceptionAction; import java.util.Collections; import java.util.Map; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; @@ -70,9 +73,12 @@ abstract class AugmentationFieldGetter { public AugmentationFieldGetter load(final Class key) throws IllegalAccessException { final Field field; try { - field = key.getDeclaredField(BindingMapping.AUGMENTATION_FIELD); - field.setAccessible(true); - } catch (NoSuchFieldException | SecurityException e) { + field = AccessController.doPrivileged((PrivilegedExceptionAction) () -> { + final Field f = key.getDeclaredField(BindingMapping.AUGMENTATION_FIELD); + f.setAccessible(true); + return f; + }); + } catch (PrivilegedActionException e) { LOG.warn("Failed to acquire augmentation field {}, ignoring augmentations in class {}", BindingMapping.AUGMENTATION_FIELD, key, e); return DUMMY; diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/StringValueObjectFactory.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/StringValueObjectFactory.java index 41328d5469..ac281ca986 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/StringValueObjectFactory.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/StringValueObjectFactory.java @@ -17,6 +17,8 @@ import java.lang.invoke.MethodType; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; +import java.security.AccessController; +import java.security.PrivilegedAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,8 +77,6 @@ public final class StringValueObjectFactory { } final Field f = findValueField(clazz); - f.setAccessible(true); - final StringValueObjectFactory ret; try { ret = new StringValueObjectFactory<>(template, @@ -113,17 +113,24 @@ public final class StringValueObjectFactory { private static Field findValueField(final Class orig) { NoSuchFieldException cause = null; Class clazz = orig; - do { + while (clazz != null) { + final Field f; try { - return clazz.getDeclaredField("_value"); + f = clazz.getDeclaredField("_value"); } catch (NoSuchFieldException e) { if (cause != null) { e.addSuppressed(cause); } cause = e; + clazz = clazz.getSuperclass(); + continue; } - clazz = clazz.getSuperclass(); - } while (clazz != null); + + return AccessController.doPrivileged((PrivilegedAction) () -> { + f.setAccessible(true); + return f; + }); + } throw new IllegalArgumentException(orig + " nor its superclasses define required internal field _value", cause); }