diff --git a/build.gradle b/build.gradle
index e189e57..9299592 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,7 +22,16 @@
     '-Xep:MissingOverride:WARN',
     '-Xep:OvershadowingSubclassFields:WARN',
     '-Xep:IntLongMath:WARN',
-    '-Xep:EqualsHashCode:WARN']
+    '-Xep:EqualsHashCode:WARN',
+    '-Xep:ArrayHashCode:WARN',
+    '-Xep:EqualsIncompatibleType:WARN',
+    '-Xep:NonOverridingEquals:WARN',
+    '-Xep:FallThrough:WARN',
+    '-Xep:MissingCasesInEnumSwitch:WARN',
+    '-Xep:MissingDefault:WARN',
+    '-Xep:MultipleTopLevelClasses:WARN',
+    '-Xep:NarrowingCompoundAssignment:WARN',
+    '-Xep:BoxedPrimitiveConstructor:WARN']
 
 apply from: 'copyAdditionalJctfCommonFiles.gradle'
 
diff --git a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
index 93b1b24..356451a 100644
--- a/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
+++ b/src/main/java/com/android/tools/r8/compatdexbuilder/CompatDexBuilder.java
@@ -75,6 +75,9 @@
         case "--nolocals":
           noLocals = true;
           break;
+        default:
+          System.err.println("Unsupported option: " + flag);
+          System.exit(1);
       }
     }
 
diff --git a/src/main/java/com/android/tools/r8/dex/Marker.java b/src/main/java/com/android/tools/r8/dex/Marker.java
index ef17aa7..463d484 100644
--- a/src/main/java/com/android/tools/r8/dex/Marker.java
+++ b/src/main/java/com/android/tools/r8/dex/Marker.java
@@ -53,7 +53,7 @@
 
   public Marker put(String key, int value) {
     // value is converted to Long ensuring equals works with the parsed json string.
-    return internalPut(key, new Long(value));
+    return internalPut(key, Long.valueOf(value));
   }
 
   public Marker put(String key, String value) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 4d97764..042232b 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -1219,6 +1219,8 @@
               throw new Unreachable("Unexpected type: " + move.outType());
           }
           break;
+        default:
+          throw new Unreachable("Unexpected size: " + size);
       }
       instruction.setOffset(getOffset());
       instructions.add(instruction);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index 1862277..3cd2b57 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -2600,9 +2600,9 @@
         case Type.METHOD:
           return new DexValue.DexValueMethodType(
               application.getProto(((Type) value).getDescriptor()));
+        default:
+          throw new Unreachable("Type sort is not supported: " + type.getSort());
       }
-      throw new Unreachable("Type sort is not supported: " + type.getSort());
-
     } else if (value instanceof Handle) {
       return new DexValue.DexValueMethodHandle(getMethodHandle(application, (Handle) value));
     } else {
diff --git a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
index 2d9154a..9a5baaf 100644
--- a/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
+++ b/src/main/java/com/android/tools/r8/naming/signature/GenericSignatureParser.java
@@ -360,8 +360,9 @@
       case '<':
       case '.':
         return true;
+      default:
+        return false;
     }
-    return false;
   }
 
   // PRE: symbol is the first char of the identifier.
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index 40b7598..d24a357 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -683,6 +683,8 @@
               flags.setVolatile();
             }
             break;
+          default:
+            // Intentionally left empty.
         }
       }
     }
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
index f3e6c6f..121641b 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
@@ -203,6 +203,7 @@
         if (method.isClassInitializer()) {
           break;
         }
+        // Fall through for all other methods.
       case ALL:
         // Access flags check.
         if (!method.accessFlags.containsAllOf(getAccessFlags()) ||
@@ -319,6 +320,7 @@
       case METHOD:
         result.append(getType());
         result.append(' ');
+        // Fall through for rest of method signature.
       case CONSTRUCTOR:
       case INIT: {
         result.append(getName());
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
index e50a1e3..ef149f7 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
@@ -48,12 +48,13 @@
         return MatchClassTypes.LEGACY_MATCH_CLASS_TYPES;
       case MATCH_BASIC_PATTERN:
         return MatchBasicTypes.MATCH_BASIC_TYPES;
+      default:
+        if (!pattern.contains("*") && !pattern.contains("%") && !pattern.contains("?")) {
+          return new MatchSpecificType(
+              dexItemFactory.createType(DescriptorUtils.javaTypeToDescriptor(pattern)));
+        }
+        return new MatchTypePattern(pattern, kind);
     }
-    if (!pattern.contains("*") && !pattern.contains("%") && !pattern.contains("?")) {
-      return new MatchSpecificType(
-          dexItemFactory.createType(DescriptorUtils.javaTypeToDescriptor(pattern)));
-    }
-    return new MatchTypePattern(pattern, kind);
   }
 
   public static ProguardTypeMatcher defaultAllMatcher() {
