From: Michael Vorburger Date: Sat, 4 Nov 2017 03:31:25 +0000 (+0100) Subject: Fix FindBugs violations and enable enforcement in utils X-Git-Tag: v2.0.0~7 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=99d203033c0e7de156ff69e7a81710928d58b735;p=yangtools.git Fix FindBugs violations and enable enforcement in utils Change-Id: I35eff969e51d6ec9b4f4b79b1b8cb2af9b9a8150 Signed-off-by: Michael Vorburger Signed-off-by: Robert Varga --- diff --git a/common/util/pom.xml b/common/util/pom.xml index 5b713de7af..b871d1ad38 100644 --- a/common/util/pom.xml +++ b/common/util/pom.xml @@ -77,6 +77,13 @@ checkstyle.violationSeverity=error + + org.codehaus.mojo + findbugs-maven-plugin + + true + + diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/MutableOffsetMap.java b/common/util/src/main/java/org/opendaylight/yangtools/util/MutableOffsetMap.java index 648b76d99f..09511523bb 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/MutableOffsetMap.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/MutableOffsetMap.java @@ -13,6 +13,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.AbstractMap; import java.util.AbstractSet; import java.util.ArrayList; @@ -119,6 +120,9 @@ public abstract class MutableOffsetMap extends AbstractMap implement private HashMap newKeys; private Object[] objects; private int removed = 0; + + // Fail-fast iterator guard, see java.util.ArrayList for reference. + @SuppressFBWarnings("VO_VOLATILE_INCREMENT") private transient volatile int modCount; private boolean needClone = true; @@ -232,7 +236,7 @@ public abstract class MutableOffsetMap extends AbstractMap implement private void cloneArray() { if (needClone) { needClone = false; - if (!EMPTY_ARRAY.equals(objects)) { + if (objects.length != 0) { objects = objects.clone(); } } diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/AsyncNotifyingListenableFutureTask.java b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/AsyncNotifyingListenableFutureTask.java index ec03529f76..ab3bdb1a09 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/AsyncNotifyingListenableFutureTask.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/AsyncNotifyingListenableFutureTask.java @@ -56,13 +56,13 @@ public class AsyncNotifyingListenableFutureTask extends FutureTask impleme private final Executor listenerExecutor; private DelegatingAsyncNotifyingListenableFutureTask(final Callable callable, - @Nullable final Executor listenerExecutor) { + final Executor listenerExecutor) { super(callable); this.listenerExecutor = requireNonNull(listenerExecutor); } private DelegatingAsyncNotifyingListenableFutureTask(final Runnable runnable, @Nullable final V result, - @Nullable final Executor listenerExecutor) { + final Executor listenerExecutor) { super(runnable, result); this.listenerExecutor = requireNonNull(listenerExecutor); } @@ -123,7 +123,7 @@ public class AsyncNotifyingListenableFutureTask extends FutureTask impleme super(callable); } - private AsyncNotifyingListenableFutureTask(final Runnable runnable, @Nullable final V result) { + private AsyncNotifyingListenableFutureTask(final Runnable runnable, final V result) { super(runnable, result); } diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/CachedThreadPoolExecutor.java b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/CachedThreadPoolExecutor.java index cff95ff221..112e84c74b 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/CachedThreadPoolExecutor.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/CachedThreadPoolExecutor.java @@ -11,6 +11,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects.ToStringHelper; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.RejectedExecutionException; @@ -105,7 +106,7 @@ public class CachedThreadPoolExecutor extends ThreadPoolExecutor { } public long getLargestQueueSize() { - return ((TrackingLinkedBlockingQueue)executorQueue.getBackingQueue()).getLargestQueueSize(); + return executorQueue.getBackingQueue().getLargestQueueSize(); } protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { @@ -140,13 +141,14 @@ public class CachedThreadPoolExecutor extends ThreadPoolExecutor { private static final long POLL_WAIT_TIME_IN_MS = 300; - private final LinkedBlockingQueue backingQueue; + @SuppressFBWarnings("SE_BAD_FIELD") // Runnable is not Serializable + private final TrackingLinkedBlockingQueue backingQueue; ExecutorQueue(final int maxBackingQueueSize) { backingQueue = new TrackingLinkedBlockingQueue<>(maxBackingQueueSize); } - LinkedBlockingQueue getBackingQueue() { + TrackingLinkedBlockingQueue getBackingQueue() { return backingQueue; } diff --git a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/ExceptionMapper.java b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/ExceptionMapper.java index 53e0936214..e3a7559a58 100644 --- a/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/ExceptionMapper.java +++ b/common/util/src/main/java/org/opendaylight/yangtools/util/concurrent/ExceptionMapper.java @@ -11,6 +11,7 @@ package org.opendaylight.yangtools.util.concurrent; import static java.util.Objects.requireNonNull; import com.google.common.base.Function; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; @@ -71,8 +72,9 @@ public abstract class ExceptionMapper implements Function implements NotificationManager listenerKey, final Iterator notifications) { this.listenerKey = requireNonNull(listenerKey); while (notifications.hasNext()) { - queue.offer(notifications.next()); + queue.add(notifications.next()); } } @@ -368,7 +368,7 @@ public class QueuedNotificationManager implements NotificationManager