diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveEvent.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveEvent.java
index a810576..bca90e4 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveEvent.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/ActiveEvent.java
@@ -70,7 +70,7 @@
 
     @Override
     public boolean equals(Object o) {
-        if (o == null || !(o instanceof ActiveEvent)) {
+        if (!(o instanceof ActiveEvent)) {
             return false;
         }
         if (this == o) {
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/EntityId.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/EntityId.java
index 5fe26bf..13e16f0 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/EntityId.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/EntityId.java
@@ -48,7 +48,7 @@
 
     @Override
     public boolean equals(Object o) {
-        if (o == null || !(o instanceof EntityId)) {
+        if (!(o instanceof EntityId)) {
             return false;
         }
         if (o == this) {
diff --git a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActivePartitionMessage.java b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActivePartitionMessage.java
index 39b905f..cb9c61b 100644
--- a/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActivePartitionMessage.java
+++ b/asterixdb/asterix-active/src/main/java/org/apache/asterix/active/message/ActivePartitionMessage.java
@@ -82,7 +82,7 @@
 
     @Override
     public boolean equals(Object o) {
-        if (o == null || !(o instanceof ActivePartitionMessage)) {
+        if (!(o instanceof ActivePartitionMessage)) {
             return false;
         }
         if (this == o) {
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
index b2c7c14..868e4b8 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
@@ -234,6 +234,6 @@
     }
 
     private static boolean isSet(String requestParameter) {
-        return requestParameter != null && "true".equals(requestParameter);
+        return "true".equals(requestParameter);
     }
 }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
index e5d557b..5faa980 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/active/ActiveNotificationHandler.java
@@ -98,7 +98,7 @@
                             + jobId);
         }
         Object property = jobSpecification.getProperty(ACTIVE_ENTITY_PROPERTY_NAME);
-        if (property == null || !(property instanceof EntityId)) {
+        if (!(property instanceof EntityId)) {
             if (LOGGER.isEnabled(level)) {
                 LOGGER.log(level, "Job is not of type active job. property found to be: " + property);
             }
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 92295e7..8e86b9c 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -1786,7 +1786,7 @@
             String currentDataverse) throws AlgebricksException {
         List<Dataverse> allDataverses = MetadataManager.INSTANCE.getDataverses(ctx);
         for (Dataverse dataverse : allDataverses) {
-            if (currentDataverse != null && dataverse.getDataverseName().equals(currentDataverse)) {
+            if (dataverse.getDataverseName().equals(currentDataverse)) {
                 continue;
             }
             List<Feed> feeds = MetadataManager.INSTANCE.getFeeds(ctx, dataverse.getDataverseName());
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
index 906a8b7..dc37fc2 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/DatasetResourceReference.java
@@ -70,7 +70,7 @@
         if (this == o) {
             return true;
         }
-        if (o != null && o instanceof ResourceReference) {
+        if (o instanceof ResourceReference) {
             ResourceReference that = (ResourceReference) o;
             return getRelativePath().toString().equals(that.getRelativePath().toString());
         }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/ResourceReference.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/ResourceReference.java
index 81d311d..8bd848d 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/ResourceReference.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/storage/ResourceReference.java
@@ -101,7 +101,7 @@
         if (this == o) {
             return true;
         }
-        if (o != null && o instanceof ResourceReference) {
+        if (o instanceof ResourceReference) {
             ResourceReference that = (ResourceReference) o;
             return getRelativePath().toString().equals(that.getRelativePath().toString());
         }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
index da6988c..ff11bc3 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/transactions/DatasetId.java
@@ -46,7 +46,7 @@
 
     @Override
     public boolean equals(Object o) {
-        if ((o == null) || !(o instanceof DatasetId)) {
+        if (!(o instanceof DatasetId)) {
             return false;
         }
         return ((DatasetId) o).id == this.id;
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionId.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionId.java
index 47efd1d..fab5a8f 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionId.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/management/FeedConnectionId.java
@@ -55,7 +55,7 @@
 
     @Override
     public boolean equals(Object o) {
-        if (o == null || !(o instanceof FeedConnectionId)) {
+        if (!(o instanceof FeedConnectionId)) {
             return false;
         }
 
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/ParserFactoryProvider.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/ParserFactoryProvider.java
index c16ee89..53cf6b1 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/ParserFactoryProvider.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/provider/ParserFactoryProvider.java
@@ -47,7 +47,7 @@
             Map<String, String> configuration) throws AsterixException {
         IDataParserFactory parserFactory;
         String parserFactoryName = configuration.get(ExternalDataConstants.KEY_DATA_PARSER);
-        if ((parserFactoryName != null) && ExternalDataUtils.isExternal(parserFactoryName)) {
+        if (ExternalDataUtils.isExternal(parserFactoryName)) {
             return ExternalDataUtils.createExternalParserFactory(libraryManager,
                     ExternalDataUtils.getDataverse(configuration), parserFactoryName);
         } else {
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STNPointsDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STNPointsDescriptor.java
index 8b1111b..ec51ae3 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STNPointsDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STNPointsDescriptor.java
@@ -42,7 +42,7 @@
     @Override
     protected Object evaluateOGCGeometry(OGCGeometry geometry) throws HyracksDataException {
         Geometry esriGeometry = geometry.getEsriGeometry();
-        if (esriGeometry != null && esriGeometry instanceof MultiVertexGeometry) {
+        if (esriGeometry instanceof MultiVertexGeometry) {
             return ((MultiVertexGeometry) esriGeometry).getPointCount();
         } else if (esriGeometry instanceof Point) {
             return 1;
diff --git a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/GatherInnerClassVisitor.java b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/GatherInnerClassVisitor.java
index 031707b..dfd189f 100644
--- a/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/GatherInnerClassVisitor.java
+++ b/asterixdb/asterix-maven-plugins/asterix-evaluator-generator-maven-plugin/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/GatherInnerClassVisitor.java
@@ -44,8 +44,7 @@
 
     @Override
     public void visitInnerClass(String name, String outerName, String innerName, int access) {
-        if ((className == null || !name.equals(className))
-                && ((access & Opcodes.ACC_PUBLIC) == 0 || (access & Opcodes.ACC_STATIC) == 0)) {
+        if ((!name.equals(className)) && ((access & Opcodes.ACC_PUBLIC) == 0 || (access & Opcodes.ACC_STATIC) == 0)) {
             innerClassNames.add(name);
         }
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/ARecordCaster.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/ARecordCaster.java
index aa6e26b..671360a 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/ARecordCaster.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/cast/ARecordCaster.java
@@ -123,7 +123,7 @@
             openFields = new boolean[numInputFields];
             fieldNamesSortedIndex = new int[numInputFields];
         }
-        if (cachedReqType == null || !reqType.equals(cachedReqType)) {
+        if (!reqType.equals(cachedReqType)) {
             try {
                 loadRequiredType(reqType);
             } catch (IOException e) {
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
index 9c0797e..21f393c 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
@@ -94,7 +94,7 @@
      * @return the root exception, or null if both parameters are null
      */
     public static Throwable suppress(Throwable first, Throwable second) {
-        if (second != null && second instanceof InterruptedException) {
+        if (second instanceof InterruptedException) {
             Thread.currentThread().interrupt();
         }
         if (first == null) {
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/api/InvertedListCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/api/InvertedListCursor.java
index 9db7dc8..b6d5902 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/api/InvertedListCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/api/InvertedListCursor.java
@@ -43,7 +43,7 @@
         int invListEndPageId = LSMInvertedIndexSearchCursorInitialState.INVALID_VALUE;
         int invListStartOffset = LSMInvertedIndexSearchCursorInitialState.INVALID_VALUE;
         int invListNumElements = LSMInvertedIndexSearchCursorInitialState.INVALID_VALUE;
-        if (initialState != null && initialState instanceof LSMInvertedIndexSearchCursorInitialState) {
+        if (initialState instanceof LSMInvertedIndexSearchCursorInitialState) {
             LSMInvertedIndexSearchCursorInitialState invIndexInitialState =
                     (LSMInvertedIndexSearchCursorInitialState) initialState;
             invListStartPageId = invIndexInitialState.getInvListStartPageId();
