Update errorprone and make all active checks errors.

All failing checks are explicitly disabled with a few minor code changes
to avoid a few.

Bug: b/270534077
Change-Id: I2e9818e188229227cf2c8e8bf3060a01cdadb8c8
diff --git a/build.gradle b/build.gradle
index c3cdf5c..231349e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -23,7 +23,7 @@
 }
 
 plugins {
-  id "net.ltgt.errorprone" version "0.7"
+  id "net.ltgt.errorprone" version "2.0.2"
 }
 
 apply plugin: 'java'
@@ -44,7 +44,7 @@
     kotlinVersion = '1.8.0'
     kotlinExtMetadataJVMVersion = '0.6.0'
     smaliVersion = '2.2b4'
-    errorproneVersion = '2.3.2'
+    errorproneVersion = '2.18.0'
     testngVersion = '6.10'
 }
 
@@ -686,29 +686,78 @@
         // Don't enable error prone on Java 8 as the plugin setup does not support it.
         !org.gradle.internal.jvm.Jvm.current().javaVersion.java8) {
     compileJava {
-        // Enable error prone for D8/R8 sources.
+
+        // Enable error prone for D8/R8 main sources and make all warnings errors.
+        // Warnings that we have chosen not to fix (or suppress) are disabled outright below.
+        options.compilerArgs << "-Werror"
         options.errorprone.enabled = true
-        options.errorprone.disableAllChecks = true
-        options.errorprone.check('ClassCanBeStatic', CheckSeverity.ERROR)
-        options.errorprone.check('CollectionIncompatibleType', CheckSeverity.ERROR)
-        options.errorprone.check('OperatorPrecedence', CheckSeverity.ERROR)
+
+        // Non-default / Experimental checks - explicitly enforced.
         options.errorprone.check('RemoveUnusedImports', CheckSeverity.ERROR)
-        options.errorprone.check('MissingOverride', CheckSeverity.ERROR)
-        options.errorprone.check('IntLongMath', CheckSeverity.ERROR)
-        options.errorprone.check('EqualsHashCode', CheckSeverity.ERROR)
         options.errorprone.check('InconsistentOverloads', CheckSeverity.ERROR)
-        options.errorprone.check('ArrayHashCode', CheckSeverity.ERROR)
-        options.errorprone.check('EqualsIncompatibleType', CheckSeverity.ERROR)
-        options.errorprone.check('NonOverridingEquals', CheckSeverity.ERROR)
-        options.errorprone.check('FallThrough', CheckSeverity.ERROR)
-        options.errorprone.check('MissingCasesInEnumSwitch', CheckSeverity.ERROR)
         options.errorprone.check('MissingDefault', CheckSeverity.ERROR)
         options.errorprone.check('MultipleTopLevelClasses', CheckSeverity.ERROR)
         options.errorprone.check('NarrowingCompoundAssignment', CheckSeverity.ERROR)
-        options.errorprone.check('BoxedPrimitiveConstructor', CheckSeverity.ERROR)
-        options.errorprone.check('LogicalAssignment', CheckSeverity.ERROR)
-        options.errorprone.check('FloatCast', CheckSeverity.ERROR)
-        options.errorprone.check('ReturnValueIgnored', CheckSeverity.ERROR)
+
+        // TODO(b/270534077): These should likely be fixed/suppressed and become hard failures.
+        options.errorprone.check('JdkObsolete', CheckSeverity.OFF)
+        options.errorprone.check('UnusedMethod', CheckSeverity.OFF)
+        options.errorprone.check('UnusedVariable', CheckSeverity.OFF)
+        options.errorprone.check('EqualsUnsafeCast', CheckSeverity.OFF)
+        options.errorprone.check('TypeParameterUnusedInFormals', CheckSeverity.OFF)
+        options.errorprone.check('LoopOverCharArray', CheckSeverity.OFF)
+        options.errorprone.check('ImmutableEnumChecker', CheckSeverity.OFF)
+        options.errorprone.check('BadImport', CheckSeverity.OFF)
+        options.errorprone.check('StringSplitter', CheckSeverity.OFF)
+        options.errorprone.check('ComplexBooleanConstant', CheckSeverity.OFF)
+        options.errorprone.check('StreamToIterable', CheckSeverity.OFF)
+        options.errorprone.check('HidingField', CheckSeverity.OFF)
+        options.errorprone.check('StreamResourceLeak', CheckSeverity.OFF)
+        options.errorprone.check('CatchAndPrintStackTrace', CheckSeverity.OFF)
+        options.errorprone.check('ShortCircuitBoolean', CheckSeverity.OFF)
+        options.errorprone.check('NonCanonicalType', CheckSeverity.OFF)
+        options.errorprone.check('UnusedNestedClass', CheckSeverity.OFF)
+        options.errorprone.check('AmbiguousMethodReference', CheckSeverity.OFF)
+        options.errorprone.check('InvalidParam', CheckSeverity.OFF)
+        options.errorprone.check('CharacterGetNumericValue', CheckSeverity.OFF)
+        options.errorprone.check('ModifyCollectionInEnhancedForLoop', CheckSeverity.OFF)
+        options.errorprone.check('EmptyCatch', CheckSeverity.OFF)
+        options.errorprone.check('ArgumentSelectionDefectChecker', CheckSeverity.OFF)
+        options.errorprone.check('ImmutableAnnotationChecker', CheckSeverity.OFF)
+        options.errorprone.check('ObjectToString', CheckSeverity.OFF)
+        options.errorprone.check('DoNotClaimAnnotations', CheckSeverity.OFF)
+        options.errorprone.check('AnnotateFormatMethod', CheckSeverity.OFF)
+
+        // TODO(b/270537614): Remove finalize uses.
+        options.errorprone.check('Finalize', CheckSeverity.OFF)
+
+        // The following warnings could/should be active but are hit by R8 now so silence them.
+        options.errorprone.check('EqualsGetClass', CheckSeverity.OFF)
+        options.errorprone.check('MixedMutabilityReturnType', CheckSeverity.OFF)
+        options.errorprone.check('UnnecessaryParentheses', CheckSeverity.OFF)
+        options.errorprone.check('DoNotCallSuggester', CheckSeverity.OFF)
+        options.errorprone.check('InlineMeSuggester', CheckSeverity.OFF)
+        options.errorprone.check('MutablePublicArray', CheckSeverity.OFF)
+        options.errorprone.check('DefaultCharset', CheckSeverity.OFF)
+        options.errorprone.check('InconsistentCapitalization', CheckSeverity.OFF)
+        options.errorprone.check('InlineFormatString', CheckSeverity.OFF)
+        options.errorprone.check('MissingImplementsComparable', CheckSeverity.OFF)
+
+        // Warnings that cause unwanted edits (e.g., inability to write informative asserts).
+        options.errorprone.check('AlreadyChecked', CheckSeverity.OFF)
+
+        // JavaDoc related warnings. Would be nice to resolve but of no real consequence.
+        options.errorprone.check('InvalidLink', CheckSeverity.OFF)
+        options.errorprone.check('InvalidBlockTag', CheckSeverity.OFF)
+        options.errorprone.check('InvalidInlineTag', CheckSeverity.OFF)
+        options.errorprone.check('EmptyBlockTag', CheckSeverity.OFF)
+        options.errorprone.check('MissingSummary', CheckSeverity.OFF)
+        options.errorprone.check('UnrecognisedJavadocTag', CheckSeverity.OFF)
+        options.errorprone.check('AlmostJavadoc', CheckSeverity.OFF)
+
+        // Moving away from identity and canonical items is not planned.
+        options.errorprone.check('ReferenceEquality', CheckSeverity.OFF)
+        options.errorprone.check('IdentityHashMapUsage', CheckSeverity.OFF)
     }
 }
 
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 8c7c2ff..401a1eb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -155,7 +155,7 @@
     assert handlers != null;
     assert instructions != null;
     assert verifySetPositionFramesFollowedByDefaultEvent(debugInfo);
-    hashCode();  // Cache the hash code eagerly.
+    int unused = hashCode(); // Cache the hash code eagerly.
   }
 
   public DexCode withCodeLens(GraphLens codeLens) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstString.java b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
index 7201b71..b0b2bd2 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstString.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
@@ -119,7 +119,7 @@
   public boolean instructionInstanceCanThrow() {
     // The const-string instruction can be a throwing instruction in DEX, if decode() fails.
     try {
-      value.toString();
+      String unused = value.toString();
     } catch (RuntimeException e) {
       if (e.getCause() instanceof UTFDataFormatException) {
         return true;
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index b0eb2bd..f4c211f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -585,7 +585,7 @@
         consumer.accept(user.outValue());
       }
     }
-    uniquePhiUsers().forEach(consumer::accept);
+    uniquePhiUsers().forEach(consumer);
   }
 
   public void replaceUsers(Value newValue) {
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
index f79b740..729f071 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
@@ -108,7 +108,7 @@
   private final boolean isInterface;
   private final boolean extraNullParameter;
 
-  protected ForwardMethodSourceCode(
+  ForwardMethodSourceCode(
       DexType receiver,
       DexMethod method,
       DexMethod originalMethod,
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
index dfb5d76..f00c011 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
@@ -157,7 +157,7 @@
     return sb.toString();
   }
 
-  private static <T> void appendKmHelper(
+  private static void appendKmHelper(
       String key, StringBuilder sb, Action appendContent, String start, String end) {
     sb.append(key);
     sb.append(start);
@@ -165,7 +165,7 @@
     sb.append(end);
   }
 
-  public static <T> void appendKmSection(
+  public static void appendKmSection(
       String indent, String typeDescription, StringBuilder sb, Consumer<String> appendContent) {
     appendKmHelper(
         typeDescription,
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
index 17157c3..47bcc73 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
@@ -856,7 +856,7 @@
     }
 
     @Override
-    public String toString() {
+    public String getMessage() {
       if (eol) {
         return "Parse error [" + lineNo + ":eol] " + msg;
       } else {
diff --git a/src/main/java/com/android/tools/r8/utils/IterableUtils.java b/src/main/java/com/android/tools/r8/utils/IterableUtils.java
index cd6dcb6..5ca1e24e 100644
--- a/src/main/java/com/android/tools/r8/utils/IterableUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/IterableUtils.java
@@ -19,7 +19,7 @@
 
 public class IterableUtils {
 
-  public static <S, T> boolean allIdentical(Iterable<S> iterable) {
+  public static <S> boolean allIdentical(Iterable<S> iterable) {
     return allIdentical(iterable, Function.identity());
   }