Add errorprone settings to new main build config.

Change-Id: Ifa9fbf8a2b96755143d88c5a77dc54e8f9c6d223
diff --git a/commonBuildSrc/src/main/kotlin/Dependencies.kt b/commonBuildSrc/src/main/kotlin/Dependencies.kt
index b93dbcf..c10a576 100644
--- a/commonBuildSrc/src/main/kotlin/Dependencies.kt
+++ b/commonBuildSrc/src/main/kotlin/Dependencies.kt
@@ -44,6 +44,7 @@
   const val kotlinVersion = "1.8.0"
   const val kotlinMetadataVersion = "0.6.0"
   const val smaliVersion = "2.2b4"
+  const val errorproneVersion = "2.18.0"
 }
 
 object Deps {
@@ -60,4 +61,5 @@
   val kotlinStdLib by lazy { "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlinVersion}" }
   val kotlinReflect by lazy { "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlinVersion}" }
   val smali by lazy { "org.smali:smali:${Versions.smaliVersion}" }
+  val errorprone by lazy { "com.google.errorprone:error_prone_core:${Versions.errorproneVersion}" }
 }
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index e664753..583a055 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -2,9 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import net.ltgt.gradle.errorprone.errorprone
+
 plugins {
   `kotlin-dsl`
   id("dependencies-plugin")
+  id("net.ltgt.errorprone") version "3.0.1"
 }
 
 java {
@@ -26,8 +29,81 @@
   implementation(Deps.guava)
   implementation(Deps.joptSimple)
   implementation(Deps.kotlinMetadata)
+  errorprone(Deps.errorprone)
 }
 
 tasks.withType<JavaCompile> {
   println("NOTE: Running with JDK: " + org.gradle.internal.jvm.Jvm.current().javaHome)
+
+  // 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.add("-Werror")
+  options.errorprone.isEnabled.set(true)
+
+  // Non-default / Experimental checks - explicitly enforced.
+  options.errorprone.error("RemoveUnusedImports")
+  options.errorprone.error("InconsistentOverloads")
+  options.errorprone.error("MissingDefault")
+  options.errorprone.error("MultipleTopLevelClasses")
+  options.errorprone.error("NarrowingCompoundAssignment")
+
+  // TODO(b/270534077): These should likely be fixed/suppressed and become hard failures.
+  options.errorprone.disable("JdkObsolete")
+  options.errorprone.disable("UnusedVariable")
+  options.errorprone.disable("EqualsUnsafeCast")
+  options.errorprone.disable("TypeParameterUnusedInFormals")
+  options.errorprone.disable("LoopOverCharArray")
+  options.errorprone.disable("ImmutableEnumChecker")
+  options.errorprone.disable("BadImport")
+  options.errorprone.disable("StringSplitter")
+  options.errorprone.disable("ComplexBooleanConstant")
+  options.errorprone.disable("StreamToIterable")
+  options.errorprone.disable("HidingField")
+  options.errorprone.disable("StreamResourceLeak")
+  options.errorprone.disable("CatchAndPrintStackTrace")
+  options.errorprone.disable("ShortCircuitBoolean")
+  options.errorprone.disable("NonCanonicalType")
+  options.errorprone.disable("UnusedNestedClass")
+  options.errorprone.disable("AmbiguousMethodReference")
+  options.errorprone.disable("InvalidParam")
+  options.errorprone.disable("CharacterGetNumericValue")
+  options.errorprone.disable("ModifyCollectionInEnhancedForLoop")
+  options.errorprone.disable("EmptyCatch")
+  options.errorprone.disable("ArgumentSelectionDefectChecker")
+  options.errorprone.disable("ImmutableAnnotationChecker")
+  options.errorprone.disable("ObjectToString")
+  options.errorprone.disable("DoNotClaimAnnotations")
+  options.errorprone.disable("AnnotateFormatMethod")
+
+  // TODO(b/270537614): Remove finalize uses.
+  options.errorprone.disable("Finalize")
+
+  // The following warnings could/should be active but are hit by R8 now so silence them.
+  options.errorprone.disable("EqualsGetClass")
+  options.errorprone.disable("MixedMutabilityReturnType")
+  options.errorprone.disable("UnnecessaryParentheses")
+  options.errorprone.disable("DoNotCallSuggester")
+  options.errorprone.disable("InlineMeSuggester")
+  options.errorprone.disable("MutablePublicArray")
+  options.errorprone.disable("DefaultCharset")
+  options.errorprone.disable("InconsistentCapitalization")
+  options.errorprone.disable("InlineFormatString")
+  options.errorprone.disable("MissingImplementsComparable")
+
+  // Warnings that cause unwanted edits (e.g., inability to write informative asserts).
+  options.errorprone.disable("AlreadyChecked")
+
+  // JavaDoc related warnings. Would be nice to resolve but of no real consequence.
+  options.errorprone.disable("InvalidLink")
+  options.errorprone.disable("InvalidBlockTag")
+  options.errorprone.disable("InvalidInlineTag")
+  options.errorprone.disable("EmptyBlockTag")
+  options.errorprone.disable("MissingSummary")
+  options.errorprone.disable("UnrecognisedJavadocTag")
+  options.errorprone.disable("AlmostJavadoc")
+
+  // Moving away from identity and canonical items is not planned.
+  options.errorprone.disable("ReferenceEquality")
+  options.errorprone.disable("IdentityHashMapUsage")
+
 }