BUG-7464: enable FindBugs enforcement 62/49962/12
authorRobert Varga <rovarga@cisco.com>
Tue, 3 Jan 2017 02:24:15 +0000 (03:24 +0100)
committerRobert Varga <nite@hq.sk>
Tue, 10 Jan 2017 23:44:42 +0000 (23:44 +0000)
So far it produces only false positives, but it is good to have
some defences.

Change-Id: Id72be114ed6d8c93e822f4325649025b7860e996
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
third-party/triemap/pom.xml
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/INode.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/ImmutableTrieMap.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/LNodeEntry.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/MutableTrieMap.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/SNode.java
third-party/triemap/src/main/java/org/opendaylight/yangtools/triemap/TNode.java

index 3399a7a97bb04e528b47635caace45a92578e70d..479f6c58d982be2e740cd5817a6313eef84a6671 100644 (file)
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <configuration>
                     <skip>true</skip>
+                    <propertyExpansion>checkstyle.violationSeverity=warning</propertyExpansion>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>findbugs-maven-plugin</artifactId>
+                <configuration>
+                    <failOnError>true</failOnError>
                 </configuration>
             </plugin>
         </plugins>
index 7031b396c50c8fa12159146d8ef819e3824b1c4b..65e22fd6bd4a443ff817e8061a23a4c08e6ace24 100644 (file)
@@ -19,6 +19,7 @@ import static org.opendaylight.yangtools.triemap.LookupResult.RESTART;
 import static org.opendaylight.yangtools.triemap.PresencePredicate.ABSENT;
 import static org.opendaylight.yangtools.triemap.PresencePredicate.PRESENT;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
@@ -203,6 +204,8 @@ final class INode<K, V> extends BasicNode {
         return rec_insertif(k, v, hc, cond, lev, parent, gen, ct);
     }
 
+    @SuppressFBWarnings(value = "NP_OPTIONAL_RETURN_NULL",
+            justification = "Returning null Optional indicates the need to restart.")
     private Optional<V> insertDual(final TrieMap<K, V> ct, final CNode<K, V> cn, final int pos, final SNode<K, V> sn,
             final K k, final V v, final int hc, final int lev) {
         final CNode<K, V> rn = (cn.gen == gen) ? cn : cn.renewed(gen, ct);
@@ -210,6 +213,8 @@ final class INode<K, V> extends BasicNode {
         return GCAS(cn, nn, ct) ? Optional.empty() : null;
     }
 
+    @SuppressFBWarnings(value = "NP_OPTIONAL_RETURN_NULL",
+            justification = "Returning null Optional indicates the need to restart.")
     private Optional<V> rec_insertif(final K k, final V v, final int hc, final Object cond, final int lev,
             final INode<K, V> parent, final Gen startgen, final TrieMap<K, V> ct) {
         while (true) {
@@ -433,6 +438,8 @@ final class INode<K, V> extends BasicNode {
         return rec_remove(k, cond, hc, lev, parent, gen, ct);
     }
 
+    @SuppressFBWarnings(value = "NP_OPTIONAL_RETURN_NULL",
+            justification = "Returning null Optional indicates the need to restart.")
     private Optional<V> rec_remove(final K k, final Object cond, final int hc, final int lev, final INode<K, V> parent,
             final Gen startgen, final TrieMap<K, V> ct) {
         final MainNode<K, V> m = GCAS_READ(ct); // use -Yinline!
index 4ea607e5c02b64d38625b3f7efed3a42358bbba0..167a4b2a6544c12c93b9b95d5452f2620bf73e5b 100644 (file)
@@ -18,6 +18,7 @@ package org.opendaylight.yangtools.triemap;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.annotations.Beta;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Map;
 import java.util.function.BiFunction;
 import java.util.function.Function;
@@ -32,6 +33,9 @@ import java.util.function.Function;
  */
 @Beta
 public final class ImmutableTrieMap<K, V> extends TrieMap<K, V> {
+    private static final long serialVersionUID = 1L;
+
+    @SuppressFBWarnings(value = "SE_BAD_FIELD", justification = "Handled by SerializationProxy")
     private final INode<K, V> root;
 
     ImmutableTrieMap(final INode<K, V> root, final Equivalence<? super K> equiv) {
index 9005dc2ddd3ab3a69a207741f2b8fda474a431ea..d20ea18dd0d0df84939b024a97e9b3351e0e1015 100644 (file)
@@ -15,6 +15,7 @@
  */
 package org.opendaylight.yangtools.triemap;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Map.Entry;
 
 /**
@@ -55,6 +56,7 @@ abstract class LNodeEntry<K, V> implements Entry<K, V> {
         return EntryUtil.hash(key, value);
     }
 
+    @SuppressFBWarnings(value = "EQ_UNUSUAL",  justification = "Equality handled by utility methods")
     @Override
     public final boolean equals(final Object o) {
         return EntryUtil.equal(o, key, value);
index 95151cdbf60fb9ad4a49263a3bcf5c89263dcf0a..bc461caad290715b26c7e01f6069ba34f1fa887f 100644 (file)
@@ -22,6 +22,7 @@ import static org.opendaylight.yangtools.triemap.PresencePredicate.PRESENT;
 
 import com.google.common.annotations.Beta;
 import com.google.common.base.Verify;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 
@@ -35,6 +36,8 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
  */
 @Beta
 final class MutableTrieMap<K, V> extends TrieMap<K, V> {
+    private static final long serialVersionUID = 1L;
+
     @SuppressWarnings("rawtypes")
     private static final AtomicReferenceFieldUpdater<MutableTrieMap, Object> ROOT_UPDATER =
             AtomicReferenceFieldUpdater.newUpdater(MutableTrieMap.class, Object.class, "root");
@@ -78,6 +81,8 @@ final class MutableTrieMap<K, V> extends TrieMap<K, V> {
         return toNullable(removehc(k, null, computeHash(k)));
     }
 
+    @SuppressFBWarnings(value = "NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE",
+            justification = "API contract allows null value, but we are not")
     @Override
     public boolean remove(final Object key, final Object value) {
         @SuppressWarnings("unchecked")
index 395c477b00ee90f5869bda1a0bb8e616eb8aebee..7b1fb773fd57c2239e3b0191fcd4b33fe2d1a6d8 100644 (file)
@@ -15,6 +15,8 @@
  */
 package org.opendaylight.yangtools.triemap;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 final class SNode<K, V> extends BasicNode implements EntryNode<K, V> {
     final K k;
     final V v;
@@ -59,6 +61,7 @@ final class SNode<K, V> extends BasicNode implements EntryNode<K, V> {
         return EntryUtil.hash(k, v);
     }
 
+    @SuppressFBWarnings(value = "EQ_UNUSUAL",  justification = "Equality handled by utility methods")
     @Override
     public boolean equals(final Object o) {
         return EntryUtil.equal(o, k, v);
index e845816c776f2dd28da7c0cd00c5548b61f41d4a..86afdfa15b451b7c7f9c94f8655a9fe04aca0223 100644 (file)
@@ -15,6 +15,8 @@
  */
 package org.opendaylight.yangtools.triemap;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 final class TNode<K, V> extends MainNode<K, V> implements EntryNode<K, V> {
     final K k;
     final V v;
@@ -64,6 +66,7 @@ final class TNode<K, V> extends MainNode<K, V> implements EntryNode<K, V> {
         return EntryUtil.hash(k, v);
     }
 
+    @SuppressFBWarnings(value = "EQ_UNUSUAL",  justification = "Equality handled by utility methods")
     @Override
     public boolean equals(final Object o) {
         return EntryUtil.equal(o, k, v);