diff --git a/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/completer/AlarmFieldValueCompleter.java b/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/completer/AlarmFieldValueCompleter.java
index b698d56..87b8282 100644
--- a/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/completer/AlarmFieldValueCompleter.java
+++ b/apps/faultmanagement/fmcli/src/main/java/org/onosproject/faultmanagement/alarms/cli/completer/AlarmFieldValueCompleter.java
@@ -45,6 +45,7 @@
             case TIME_CLEARED:
             case TIME_UPDATED:
                 choices.add(Instant.now().toString());
+                return choices;
             default:
                 return choices;
         }
diff --git a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/util/OpenstackVtapUtil.java b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/util/OpenstackVtapUtil.java
index 69919be..d88e132 100644
--- a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/util/OpenstackVtapUtil.java
+++ b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/util/OpenstackVtapUtil.java
@@ -28,7 +28,6 @@
 import org.slf4j.Logger;
 
 import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
 import java.nio.charset.StandardCharsets;
 
 import static org.onosproject.openstacknetworking.api.Constants.ANNOTATION_NETWORK_ID;
@@ -187,7 +186,6 @@
      */
     public static void dumpStackTrace(Logger log, Exception e) {
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        e.printStackTrace(new PrintStream(outputStream));
         log.error("\n{}", new String(outputStream.toByteArray(), StandardCharsets.UTF_8));
     }
 
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PimApplication.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PimApplication.java
index 8d76e31..36948c1 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PimApplication.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PimApplication.java
@@ -49,9 +49,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected CoreService coreService;
 
-    // Our application ID
-    private static ApplicationId appId;
-
     // Register to receive PIM packets, used to send packets as well
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
     protected PacketService packetService;
@@ -75,7 +72,7 @@
     @Activate
     public void activate() {
         // Get our application ID
-        appId = coreService.registerApplication("org.onosproject.pim");
+        ApplicationId appId = coreService.registerApplication("org.onosproject.pim");
 
         // Build the traffic selector for PIM packets
         TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventHintSupplier.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventHintSupplier.java
index 076bfc0..3ad1847 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventHintSupplier.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/EventHintSupplier.java
@@ -22,5 +22,5 @@
  */
 @FunctionalInterface
 public interface EventHintSupplier {
-    String apply(Event event) throws Throwable;
+    String apply(Event event);
 }
diff --git a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TimerChain.java b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TimerChain.java
index 33c6aa3..1118568 100644
--- a/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TimerChain.java
+++ b/apps/workflow/api/src/main/java/org/onosproject/workflow/api/TimerChain.java
@@ -16,6 +16,7 @@
 package org.onosproject.workflow.api;
 
 import java.util.Date;
+import java.util.Objects;
 import java.util.PriorityQueue;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -212,6 +213,24 @@
             return date().compareTo(target.date());
         }
 
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (!(o instanceof TimerChainTask)) {
+                return false;
+            }
+            TimerChainTask that = (TimerChainTask) o;
+
+            return this.date().equals(that.date());
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(date);
+        }
+
         /**
          * Copies timer chain task.
          * @return timer chain task
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
index 15cd8cd..e4d545d 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/WorkFlowEngine.java
@@ -259,7 +259,7 @@
                 log.info("sleep {}", i);
                 Thread.sleep(10L * (i + 1));
             } catch (InterruptedException e) {
-                e.printStackTrace();
+                Thread.currentThread().interrupt();
             }
         }
     }
diff --git a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/example/SampleWorkflow.java b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/example/SampleWorkflow.java
index c09bec2..20b3771 100644
--- a/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/example/SampleWorkflow.java
+++ b/apps/workflow/app/src/main/java/org/onosproject/workflow/impl/example/SampleWorkflow.java
@@ -167,7 +167,7 @@
             try {
                 Thread.sleep(ms);
             } catch (InterruptedException e) {
-                e.printStackTrace();
+                Thread.currentThread().interrupt();
             }
         }
     }
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
index 19532cd..73eaa8b 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/OltPipeline.java
@@ -436,7 +436,7 @@
 
         Criterion metadata = Criteria.matchMetadata((cvid << 32) | outPort);
 
-        if (outerVlan == null || innerVlan == null || inport == null) {
+        if (outerVlan == null || inport == null) {
             log.error("Forwarding objective is underspecified: {}", fwd);
             fail(fwd, ObjectiveError.BADPARAMS);
             return;
diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
index fd2ef27..213947c 100644
--- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
+++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
@@ -352,7 +352,7 @@
                     groupMirror.annotations(handle).value(MAX_MEM_SIZE) != null) {
                 maxMemSize = groupMirror.annotations(handle).value(MAX_MEM_SIZE);
             }
-            if (maxMemSize == "" || currentMemberSize > Integer.parseInt(maxMemSize)) {
+            if (!maxMemSize.equals("") || currentMemberSize > Integer.parseInt(maxMemSize)) {
                 deleteGroup(group, handle);
             }
         }
diff --git a/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcChannelControllerImpl.java b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcChannelControllerImpl.java
index 1726203..d65934a 100644
--- a/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcChannelControllerImpl.java
+++ b/protocols/grpc/ctl/src/main/java/org/onosproject/grpc/ctl/GrpcChannelControllerImpl.java
@@ -83,7 +83,7 @@
     private static final boolean DEFAULT_LOG_LEVEL = false;
 
     /** Indicates whether to log all gRPC messages sent and received on all channels. */
-    public static boolean enableMessageLog = DEFAULT_LOG_LEVEL;
+    private static boolean enableMessageLog = DEFAULT_LOG_LEVEL;
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
index d31c3f9..1e43c11 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAsAddress.java
@@ -59,11 +59,11 @@
             return true;
         }
 
-        if (!super.equals(obj)) {
+        if (obj == null || getClass() != obj.getClass()) {
             return false;
         }
 
-        if (getClass() != obj.getClass()) {
+        if (!super.equals(obj)) {
             return false;
         }
 
diff --git a/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpdu.java b/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpdu.java
index fb67401..b76bc9b 100644
--- a/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpdu.java
+++ b/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpdu.java
@@ -28,13 +28,13 @@
 public class EAPOLMkpdu extends BasePacket {
 
     // Parameter Sets.
-    protected Map<Byte, IPacket> parameterSets = new LinkedHashMap<>();
+    private Map<Byte, IPacket> parameterSets = new LinkedHashMap<>();
 
     /*
      * Parameter Serialization Order.
      * IEEE 802.1x Clause 11.11.3.
      */
-    public static byte[] parametersetSerializerKeyList = new byte[]{
+    private static byte[] parametersetSerializerKeyList = new byte[]{
             EAPOLMkpduParameterSet.PARAMETERSET_TYPE_BASIC,
             EAPOLMkpduParameterSet.PARAMETERSET_TYPE_LIVE_PEER_LIST,
             EAPOLMkpduParameterSet.PARAMETERSET_TYPE_POTENTIAL_PEER_LIST,
@@ -47,7 +47,7 @@
 
      // Various Parameter Set Deserializers.
 
-    public static final Map<Byte, Deserializer<? extends IPacket>> PARAMETERSET_DESERIALIZER_MAP =
+    private static final Map<Byte, Deserializer<? extends IPacket>> PARAMETERSET_DESERIALIZER_MAP =
             new LinkedHashMap<>();
 
     static {
diff --git a/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpduPeerListParameterSet.java b/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpduPeerListParameterSet.java
index 793b638..32c549f 100644
--- a/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpduPeerListParameterSet.java
+++ b/utils/misc/src/main/java/org/onlab/packet/EAPOLMkpduPeerListParameterSet.java
@@ -47,12 +47,12 @@
     }
 
     // Peer List Types
-    public static byte peerListTypeLive = 1;
-    public static byte peerListTypePotential = 2;
+    private static final byte PEER_LIST_TYPE_LIVE = 1;
+    private static final byte PEER_LIST_TYPE_POTENTIAL = 2;
 
     // Type for distinguishing Live & Potential Lists.
-    protected byte peerListType = 1;
-    protected short bodyLength;
+    private byte peerListType = 1;
+    private short bodyLength;
 
     //Members
     protected List<MemberDetails> members = new ArrayList<>();
@@ -146,8 +146,8 @@
      *                     and potential peer lists
      */
     public void setPeerListType(byte peerListType) {
-        if ((peerListType != EAPOLMkpduPeerListParameterSet.peerListTypeLive) &&
-                (peerListType != EAPOLMkpduPeerListParameterSet.peerListTypePotential)) {
+        if ((peerListType != EAPOLMkpduPeerListParameterSet.PEER_LIST_TYPE_LIVE) &&
+                (peerListType != EAPOLMkpduPeerListParameterSet.PEER_LIST_TYPE_POTENTIAL)) {
             throw new IllegalArgumentException("Unknown PeerList Type specified.");
         }
         this.peerListType = peerListType;
