Attempt to update to JDK 11.

Also updated to errorprone usages as a java plugin.

Test: ./gradlew assembleDebug

Change-Id: I6b558ec6e89dd1c67fff6fd3a5638779d9313f3d
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fa7a06b..cecc580 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -49,7 +49,7 @@
       </value>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/build.gradle b/build.gradle
index 30df614..8df231c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -17,13 +17,6 @@
 import androidx.build.AndroidXPlugin
 import androidx.build.SdkHelperKt
 
-def currentJvmVersion = org.gradle.api.JavaVersion.current()
-if (currentJvmVersion.getMajorVersion() != "8") {
-  throw new Exception("Unsupported java version '" + currentJvmVersion.toString() + "'. Please install java 8.\n" +
-"\n" +
-"If you have already installed java 8, you can instruct Gradle to use it by setting the environment variable JAVA_HOME equal to its file path.")
-}
-
 buildscript {
     ext.supportRootFolder = project.projectDir
     apply from: 'buildSrc/repos.gradle'
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index fea6f0d..03ecf8d 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -48,7 +48,6 @@
     compileOnly(findGradleKotlinDsl())
     implementation build_libs.agp
     implementation build_libs.dex_member_list
-    implementation build_libs.error_prone_gradle
     implementation build_libs.dokka_gradle
     implementation build_libs.kotlin.gradle_plugin
     implementation build_libs.kotlinpoet
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index 886c31c..055d696 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -49,7 +49,6 @@
     tests: "com.android.tools.lint:lint-tests:${build_versions.lint}"
 ]
 
-build_libs.error_prone_gradle = 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
 build_libs.kotlin = [
     stdlib: "org.jetbrains.kotlin:kotlin-stdlib:${build_versions.kotlin}",
     gradle_plugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${build_versions.kotlin}"
diff --git a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
index 304e824..f6eae52 100644
--- a/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/DiffAndDocs.kt
@@ -44,8 +44,6 @@
 import org.gradle.api.tasks.javadoc.Javadoc
 import org.gradle.api.tasks.util.PatternSet
 import java.io.File
-import java.net.URLClassLoader
-import javax.tools.ToolProvider
 import kotlin.collections.set
 
 private const val DOCLAVA_DEPENDENCY = "com.android:doclava:1.0.6"
@@ -90,7 +88,7 @@
         val doclavaConfiguration = root.configurations.create("doclava")
         doclavaConfiguration.dependencies.add(root.dependencies.create(DOCLAVA_DEPENDENCY))
         doclavaConfiguration.dependencies.add(root.dependencies.create(root.files(
-                (ToolProvider.getSystemToolClassLoader() as URLClassLoader).urLs)))
+            SupportConfig.getJavaToolsJarPath())))
 
         // Pulls in the :fakeannotations project, which provides modified annotations required to
         // generate SDK API stubs in Doclava from Metalava-generated platform SDK stubs.
diff --git a/buildSrc/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
index 131b173..3101ca4 100644
--- a/buildSrc/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/ErrorProneConfiguration.kt
@@ -18,60 +18,74 @@
 
 import com.android.build.gradle.api.BaseVariant
 import com.android.builder.core.BuilderConstants
-import net.ltgt.gradle.errorprone.ErrorProneBasePlugin
-import net.ltgt.gradle.errorprone.ErrorProneToolChain
 import org.gradle.api.DomainObjectSet
 import org.gradle.api.Project
+import org.gradle.api.artifacts.Configuration
 import org.gradle.api.logging.Logging
 import org.gradle.api.plugins.JavaPlugin.COMPILE_JAVA_TASK_NAME
+import org.gradle.api.tasks.SourceSetContainer
 import org.gradle.api.tasks.TaskProvider
 import org.gradle.api.tasks.compile.JavaCompile
-import org.gradle.kotlin.dsl.apply
+import org.gradle.kotlin.dsl.exclude
+import org.gradle.kotlin.dsl.get
+import org.gradle.kotlin.dsl.getByName
 
 const val ERROR_PRONE_TASK = "runErrorProne"
 
+private const val ERROR_PRONE_CONFIGURATION = "errorprone"
 private const val ERROR_PRONE_VERSION = "com.google.errorprone:error_prone_core:2.3.3"
 private val log = Logging.getLogger("ErrorProneConfiguration")
 
 fun Project.configureErrorProneForJava() {
-    val toolChain = createErrorProneToolChain()
+    val errorProneConfiguration = createErrorProneConfiguration()
+    project.extensions.getByName<SourceSetContainer>("sourceSets").configureEach {
+        project.configurations[it.annotationProcessorConfigurationName].extendsFrom(
+            errorProneConfiguration
+        )
+    }
     val javaCompileProvider = project.tasks.named(COMPILE_JAVA_TASK_NAME, JavaCompile::class.java)
     log.info("Configuring error-prone for ${project.path}")
-    makeErrorProneTask(javaCompileProvider, toolChain)
+    makeErrorProneTask(javaCompileProvider)
 }
 
 fun Project.configureErrorProneForAndroid(variants: DomainObjectSet<out BaseVariant>) {
-    val toolChain = createErrorProneToolChain()
+    val errorProneConfiguration = createErrorProneConfiguration()
     variants.all { variant ->
         // Using getName() instead of name due to b/150427408
         if (variant.buildType.getName() == BuilderConstants.DEBUG) {
             val task = variant.javaCompileProvider
+            (variant as BaseVariant).annotationProcessorConfiguration.extendsFrom(
+                errorProneConfiguration
+            )
 
             log.info("Configuring error-prone for ${variant.name}'s java compile")
-            makeErrorProneTask(task, toolChain)
+            makeErrorProneTask(task)
         }
     }
 }
 
-private fun Project.createErrorProneToolChain(): ErrorProneToolChain {
-    apply<ErrorProneBasePlugin>()
-
-    val toolChain = ErrorProneToolChain.create(this)
-    // Pin a specific version of the compiler. By default a dependency wildcard is used.
-    dependencies.add(ErrorProneBasePlugin.CONFIGURATION_NAME, ERROR_PRONE_VERSION)
-    return toolChain
+private fun Project.createErrorProneConfiguration(): Configuration {
+    val errorProneConfiguration = configurations.create(ERROR_PRONE_CONFIGURATION) {
+        it.isVisible = false
+        it.isCanBeConsumed = false
+        it.isCanBeResolved = true
+        it.exclude(group = "com.google.errorprone", module = "javac")
+    }
+    dependencies.add(ERROR_PRONE_CONFIGURATION, ERROR_PRONE_VERSION)
+    return errorProneConfiguration
 }
 
-// Given an existing JavaCompile task, reconfigures the task to use the ErrorProne compiler
-private fun JavaCompile.configureWithErrorProne(toolChain: ErrorProneToolChain) {
-    this.toolChain = toolChain
-
+// Given an existing JavaCompile task, reconfigures the task to use the ErrorProne compiler plugin
+private fun JavaCompile.configureWithErrorProne() {
     val compilerArgs = this.options.compilerArgs
     compilerArgs += listOf(
-            // Tell error-prone that we are running it on android compatible libraries
-            "-XDandroidCompatible=true",
+        // Tell error-prone that we are running it on android compatible libraries
+        "-XDandroidCompatible=true",
 
-            "-XDcompilePolicy=simple", // Workaround for b/36098770
+        "-XDcompilePolicy=simple", // Workaround for b/36098770
+        listOf(
+            "-Xplugin:ErrorProne",
+
             "-XepExcludedPaths:.*/(build/generated|build/errorProne|external)/.*",
 
             // Disable the following checks.
@@ -124,6 +138,7 @@
             "-XepIgnoreUnknownCheckNames", // https://github.com/uber/NullAway/issues/25
             "-Xep:NullAway:ERROR",
             "-XepOpt:NullAway:AnnotatedPackages=android.arch,android.support,androidx"
+        ).joinToString(" ")
     )
 }
 
@@ -132,8 +147,7 @@
  * settings.
  */
 private fun Project.makeErrorProneTask(
-    compileTaskProvider: TaskProvider<JavaCompile>,
-    toolChain: ErrorProneToolChain
+    compileTaskProvider: TaskProvider<JavaCompile>
 ) {
     val errorProneTaskProvider = maybeRegister<JavaCompile>(
         name = ERROR_PRONE_TASK,
@@ -148,7 +162,7 @@
             it.options.bootstrapClasspath = compileTask.options.bootstrapClasspath
             it.sourceCompatibility = compileTask.sourceCompatibility
             it.targetCompatibility = compileTask.targetCompatibility
-            it.configureWithErrorProne(toolChain)
+            it.configureWithErrorProne()
             it.dependsOn(compileTask.dependsOn)
         },
         onRegister = { errorProneProvider ->
diff --git a/buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt b/buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt
index a86f850..4adb762 100644
--- a/buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/SupportConfig.kt
@@ -80,4 +80,7 @@
 
     @JvmStatic
     fun isUiProject() = System.getenv("DIST_SUBDIR") == "/ui"
+
+    @JvmStatic
+    fun getJavaToolsJarPath() = System.getenv("JAVA_TOOLS_JAR")
 }
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt
index 1f8e64f..0a323d6 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt
@@ -245,7 +245,11 @@
 }
 
 private fun systemClassLoaderJars(): List<File> {
-    val result = (ClassLoader.getSystemClassLoader() as? URLClassLoader)?.urLs?.filter {
+    val classpath = System.getProperty("java.class.path")!!.split(
+        System.getProperty("path.separator")!!
+    )
+    val urls = classpath.map { URL("file://$it") }
+    val result = URLClassLoader(urls.toTypedArray()).urLs?.filter {
         it.protocol == "file"
     }?.map {
         File(it.path)
diff --git a/gradlew b/gradlew
index 45ff842..c9e89fe 100755
--- a/gradlew
+++ b/gradlew
@@ -104,7 +104,8 @@
 # setup from each lint module.
 export ANDROID_HOME="$APP_HOME/../../prebuilts/fullsdk-$plat"
 # override JAVA_HOME, because CI machines have it and it points to very old JDK
-export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk8/$plat-x86"
+export JAVA_HOME="$APP_HOME/../../prebuilts/jdk/jdk11/$plat-x86"
+export JAVA_TOOLS_JAR="$APP_HOME/../../prebuilts/jdk/jdk8/$plat-x86/lib/tools.jar"
 export STUDIO_JDK=$JAVA_HOME
 
 # ----------------------------------------------------------------------------
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index a28c269..0b6e05d 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -1,3 +1,4 @@
+
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.CompilationTarget
 import androidx.build.LibraryGroups
@@ -24,7 +25,6 @@
     implementation(JAVAPOET)
     testImplementation(GOOGLE_COMPILE_TESTING)
     testImplementation(JSR250)
-    testImplementation files(org.gradle.internal.jvm.Jvm.current().getToolsJar())
 }
 
 // we actually need to compile :lifecycle:lifecycle-common, but compileJava is easier
diff --git a/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java b/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
index b43ef4b..f91712c 100644
--- a/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
+++ b/media/media/src/main/java/androidx/media/MediaBrowserServiceCompat.java
@@ -1226,6 +1226,7 @@
             sendRequest(SERVICE_MSG_ON_CONNECT_FAILED, null);
         }
 
+        @SuppressWarnings({"rawtypes", "unchecked"})
         @Override
         public void onLoadChildren(String mediaId, List<MediaBrowserCompat.MediaItem> list,
                 Bundle options, Bundle notifyChildrenChangedOptions) throws RemoteException {
@@ -1250,7 +1251,7 @@
     }
 
     @RequiresApi(21)
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"rawtypes", "unchecked"})
     static class ResultWrapper<T> {
         MediaBrowserService.Result mResultFwk;
 
diff --git a/navigation/navigation-safe-args-generator/build.gradle b/navigation/navigation-safe-args-generator/build.gradle
index d1fcfbd..ee82964 100644
--- a/navigation/navigation-safe-args-generator/build.gradle
+++ b/navigation/navigation-safe-args-generator/build.gradle
@@ -14,13 +14,9 @@
  * limitations under the License.
  */
 
-
-import org.gradle.internal.jvm.Jvm
-
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.CompilationTarget
 import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
 import androidx.build.SupportConfig
 import androidx.build.AndroidXExtension
 import androidx.build.SdkHelperKt
@@ -45,7 +41,6 @@
             include : "android.jar")
     testImplementation fileTree(dir: "${new File(project(":navigation:navigation-common").buildDir, "libJar")}",
             include : "*.jar")
-    testImplementation files(Jvm.current().getToolsJar())
 }
 
 tasks.findByName("test").doFirst {
diff --git a/paging/integration-tests/testapp/build.gradle b/paging/integration-tests/testapp/build.gradle
index 93073da..43e7c93 100644
--- a/paging/integration-tests/testapp/build.gradle
+++ b/paging/integration-tests/testapp/build.gradle
@@ -41,3 +41,10 @@
     implementation("androidx.appcompat:appcompat:1.1.0")
     implementation(KOTLIN_STDLIB)
 }
+
+kapt {
+    javacOptions {
+        option("-source", "8")
+        option("-target", "8")
+    }
+}
\ No newline at end of file
diff --git a/room/compiler/build.gradle b/room/compiler/build.gradle
index a5aad3a..646b5ed 100644
--- a/room/compiler/build.gradle
+++ b/room/compiler/build.gradle
@@ -14,13 +14,9 @@
  * limitations under the License.
  */
 
-
-import org.gradle.internal.jvm.Jvm
-
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.CompilationTarget
 import androidx.build.LibraryGroups
-import androidx.build.LibraryVersions
 import androidx.build.SupportConfig
 import androidx.build.AndroidXExtension
 import androidx.build.SdkHelperKt
@@ -67,7 +63,6 @@
             include : "*.jar")
     testImplementation fileTree(dir: "${new File(project(":sqlite:sqlite").buildDir, "libJar")}",
             include : "*.jar")
-    testImplementation files(Jvm.current().getToolsJar())
 }
 
 def generateAntlrTask = task('generateAntlrGrammar', type: JavaExec) {
diff --git a/room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt b/room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
index b817e36..20c9cee 100644
--- a/room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
@@ -166,6 +166,7 @@
 fun <T : Annotation> Element.toAnnotationBox(cl: KClass<T>) =
         MoreElements.getAnnotationMirror(this, cl.java).orNull()?.box(cl.java)
 
+@Suppress("DEPRECATION")
 private class ListVisitor<T : Annotation>(private val annotationClass: Class<T>) :
     SimpleAnnotationValueVisitor6<Array<AnnotationBox<T>>, Void?>() {
     override fun visitArray(
@@ -177,6 +178,7 @@
     }
 }
 
+@Suppress("DEPRECATION")
 private class AnnotationClassVisitor<T : Annotation>(private val annotationClass: Class<T>) :
     SimpleAnnotationValueVisitor6<AnnotationBox<T>?, Void?>() {
     override fun visitAnnotation(a: AnnotationMirror?, v: Void?) = a?.box(annotationClass)
@@ -184,6 +186,7 @@
 
 // code below taken from dagger2
 // compiler/src/main/java/dagger/internal/codegen/ConfigurationAnnotations.java
+@Suppress("DEPRECATION")
 private val TO_LIST_OF_TYPES = object :
     SimpleAnnotationValueVisitor6<List<TypeMirror>, Void?>() {
     override fun visitArray(values: MutableList<out AnnotationValue>?, p: Void?): List<TypeMirror> {
@@ -198,6 +201,7 @@
     }
 }
 
+@Suppress("DEPRECATION")
 private val TO_TYPE = object : SimpleAnnotationValueVisitor6<TypeMirror, Void>() {
 
     override fun visitType(t: TypeMirror, p: Void?): TypeMirror {
@@ -223,12 +227,14 @@
                     MoreTypes.isTypeOf(java.util.Set::class.java, this))
 }
 
+@Suppress("DEPRECATION")
 private val ANNOTATION_VALUE_TO_INT_VISITOR = object : SimpleAnnotationValueVisitor6<Int?, Void>() {
     override fun visitInt(i: Int, p: Void?): Int? {
         return i
     }
 }
 
+@Suppress("DEPRECATION")
 private val ANNOTATION_VALUE_TO_BOOLEAN_VISITOR = object :
     SimpleAnnotationValueVisitor6<Boolean?, Void>() {
     override fun visitBoolean(b: Boolean, p: Void?): Boolean? {
@@ -236,6 +242,7 @@
     }
 }
 
+@Suppress("DEPRECATION")
 private val ANNOTATION_VALUE_TO_STRING_VISITOR = object :
     SimpleAnnotationValueVisitor6<String?, Void>() {
     override fun visitString(s: String?, p: Void?): String? {
@@ -243,6 +250,7 @@
     }
 }
 
+@Suppress("DEPRECATION")
 private val ANNOTATION_VALUE_STRING_ARR_VISITOR = object :
     SimpleAnnotationValueVisitor6<List<String>, Void>() {
     override fun visitArray(vals: MutableList<out AnnotationValue>?, p: Void?): List<String> {
@@ -252,6 +260,7 @@
     }
 }
 
+@Suppress("DEPRECATION")
 private val ANNOTATION_VALUE_INT_ARR_VISITOR = object :
     SimpleAnnotationValueVisitor6<List<Int>, Void>() {
     override fun visitArray(vals: MutableList<out AnnotationValue>?, p: Void?): List<Int> {
@@ -281,7 +290,7 @@
     return ANNOTATION_VALUE_STRING_ARR_VISITOR.visit(this)
 }
 
-@Suppress("UNCHECKED_CAST")
+@Suppress("UNCHECKED_CAST", "DEPRECATION")
 private fun <T : Enum<*>> AnnotationValue.getAsEnum(enumClass: Class<T>): T {
     return object : SimpleAnnotationValueVisitor6<T, Void>() {
         override fun visitEnumConstant(value: VariableElement?, p: Void?): T {
diff --git a/room/compiler/src/main/kotlin/androidx/room/kotlin/JvmDescriptorUtils.kt b/room/compiler/src/main/kotlin/androidx/room/kotlin/JvmDescriptorUtils.kt
index 031cb96..1020aa2 100644
--- a/room/compiler/src/main/kotlin/androidx/room/kotlin/JvmDescriptorUtils.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/kotlin/JvmDescriptorUtils.kt
@@ -112,6 +112,7 @@
  *
  * For reference, see the [JVM specification, section 4.3](http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3).
  */
+@Suppress("DEPRECATION")
 internal object JvmDescriptorTypeVisitor : AbstractTypeVisitor6<String, Types>() {
     override fun visitNoType(t: NoType, typeUtils: Types): String = t.descriptor
 
diff --git a/room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt b/room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
index f570457..cb2c637 100644
--- a/room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
+++ b/room/compiler/src/main/kotlin/androidx/room/processor/TableEntityProcessor.kt
@@ -258,26 +258,36 @@
         // don't force the @NonNull annotation since SQLite will automatically generate IDs.
         // 2. If a key is autogenerate, we generate NOT NULL in table spec, but we don't require
         // @NonNull annotation on the field itself.
-        candidates.filter { candidate -> !candidate.autoGenerateId }
-                .map { candidate ->
-                    candidate.fields.map { field ->
-                        if (candidate.fields.size > 1 ||
-                                (candidate.fields.size == 1 &&
-                                        field.affinity != SQLTypeAffinity.INTEGER)) {
-                            context.checker.check(field.nonNull, field.element,
-                                    ProcessorErrors.primaryKeyNull(field.getPath()))
-                            // Validate parents for nullability
-                            var parent = field.parent
-                            while (parent != null) {
-                                val parentField = parent.field
-                                context.checker.check(parentField.nonNull,
-                                        parentField.element,
-                                        ProcessorErrors.primaryKeyNull(parentField.getPath()))
-                                parent = parentField.parent
-                            }
+        val verifiedFields = mutableSetOf<Field>() // track verified fields to not over report
+        candidates.filterNot { it.autoGenerateId }.forEach { candidate ->
+            candidate.fields.forEach { field ->
+                if (candidate.fields.size > 1 ||
+                    (candidate.fields.size == 1 && field.affinity != SQLTypeAffinity.INTEGER)) {
+                    if (!verifiedFields.contains(field)) {
+                        context.checker.check(
+                            field.nonNull,
+                            field.element,
+                            ProcessorErrors.primaryKeyNull(field.getPath())
+                        )
+                        verifiedFields.add(field)
+                    }
+                    // Validate parents for nullability
+                    var parent = field.parent
+                    while (parent != null) {
+                        val parentField = parent.field
+                        if (!verifiedFields.contains(parentField)) {
+                            context.checker.check(
+                                parentField.nonNull,
+                                parentField.element,
+                                ProcessorErrors.primaryKeyNull(parentField.getPath())
+                            )
+                            verifiedFields.add(parentField)
                         }
+                        parent = parentField.parent
                     }
                 }
+            }
+        }
 
         if (candidates.size == 1) {
             // easy :)
diff --git a/room/compiler/src/test/data/daoWriter/output/ComplexDao.java b/room/compiler/src/test/data/daoWriter/output/ComplexDao.java
index ba5d420..d45f3a8 100644
--- a/room/compiler/src/test/data/daoWriter/output/ComplexDao.java
+++ b/room/compiler/src/test/data/daoWriter/output/ComplexDao.java
@@ -19,7 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
diff --git a/room/compiler/src/test/data/daoWriter/output/DeletionDao.java b/room/compiler/src/test/data/daoWriter/output/DeletionDao.java
index dffd414..713442b 100644
--- a/room/compiler/src/test/data/daoWriter/output/DeletionDao.java
+++ b/room/compiler/src/test/data/daoWriter/output/DeletionDao.java
@@ -17,7 +17,7 @@
 import java.lang.Void;
 import java.util.List;
 import java.util.concurrent.Callable;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
diff --git a/room/compiler/src/test/data/daoWriter/output/UpdateDao.java b/room/compiler/src/test/data/daoWriter/output/UpdateDao.java
index aa7a252..973ebca 100644
--- a/room/compiler/src/test/data/daoWriter/output/UpdateDao.java
+++ b/room/compiler/src/test/data/daoWriter/output/UpdateDao.java
@@ -15,7 +15,7 @@
 import java.lang.Void;
 import java.util.List;
 import java.util.concurrent.Callable;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
diff --git a/room/compiler/src/test/data/daoWriter/output/WriterDao.java b/room/compiler/src/test/data/daoWriter/output/WriterDao.java
index 92fee52..a3871dd 100644
--- a/room/compiler/src/test/data/daoWriter/output/WriterDao.java
+++ b/room/compiler/src/test/data/daoWriter/output/WriterDao.java
@@ -23,7 +23,7 @@
 import java.lang.String;
 import java.lang.SuppressWarnings;
 import java.util.List;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
diff --git a/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java b/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
index 9f4ac84..31ca838 100644
--- a/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
+++ b/room/compiler/src/test/data/databasewriter/output/ComplexDatabase.java
@@ -21,7 +21,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
-import javax.annotation.Generated;
+import javax.annotation.processing.Generated;
 
 @Generated("androidx.room.RoomProcessor")
 @SuppressWarnings({"unchecked", "deprecation"})
diff --git a/room/compiler/src/test/kotlin/androidx/room/kotlin/KotlinMetadataElementTest.kt b/room/compiler/src/test/kotlin/androidx/room/kotlin/KotlinMetadataElementTest.kt
index 98c2661..d261941 100644
--- a/room/compiler/src/test/kotlin/androidx/room/kotlin/KotlinMetadataElementTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/kotlin/KotlinMetadataElementTest.kt
@@ -81,7 +81,7 @@
     }
 
     private fun getMetadataElement(invocation: TestInvocation) =
-        invocation.typeElement(TestData::class.java.canonicalName).let {
+        invocation.typeElement(TestData::class.java.canonicalName!!).let {
             it to KotlinMetadataElement.createFor(Context(invocation.processingEnv), it)!!
         }
 
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
index 93a6611..b77665f 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/BaseEntityParserTest.kt
@@ -75,7 +75,9 @@
                     }
                 }
                 .processedWith(TestProcessor.builder()
-                        .forAnnotations(androidx.room.Entity::class,
+                        .forAnnotations(
+                                java.lang.SuppressWarnings::class,
+                                androidx.room.Entity::class,
                                 androidx.room.PrimaryKey::class,
                                 androidx.room.Ignore::class,
                                 Embedded::class,
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
index b9333aa..1cc4998 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/DaoProcessorTest.kt
@@ -313,7 +313,9 @@
                     }
                 }
                 .processedWith(TestProcessor.builder()
-                        .forAnnotations(androidx.room.Dao::class,
+                        .forAnnotations(
+                                java.lang.SuppressWarnings::class,
+                                androidx.room.Dao::class,
                                 androidx.room.Entity::class,
                                 androidx.room.Relation::class,
                                 androidx.room.Transaction::class,
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
index e51aad4..2afa385 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
@@ -1327,11 +1327,11 @@
     @Test
     fun dataClass_primaryConstructor() {
         listOf(
-                TestData.AllDefaultVals::class.java.canonicalName,
-                TestData.AllDefaultVars::class.java.canonicalName,
-                TestData.SomeDefaultVals::class.java.canonicalName,
-                TestData.SomeDefaultVars::class.java.canonicalName,
-                TestData.WithJvmOverloads::class.java.canonicalName
+                TestData.AllDefaultVals::class.java.canonicalName!!,
+                TestData.AllDefaultVars::class.java.canonicalName!!,
+                TestData.SomeDefaultVals::class.java.canonicalName!!,
+                TestData.SomeDefaultVars::class.java.canonicalName!!,
+                TestData.WithJvmOverloads::class.java.canonicalName!!
         ).forEach {
             simpleRun { invocation ->
                 PojoProcessor.createFor(
@@ -1350,7 +1350,7 @@
             PojoProcessor.createFor(
                     context = invocation.context,
                     element = invocation.typeElement(
-                            TestData.WithJvmOverloads::class.java.canonicalName
+                            TestData.WithJvmOverloads::class.java.canonicalName!!
                     ),
                     bindingScope = FieldProcessor.BindingScope.READ_FROM_CURSOR,
                     parent = null
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
index 1f46899..900a4b9 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/QueryMethodProcessorTest.kt
@@ -778,8 +778,8 @@
             """, listOf("MAX(age)", "name")) { _, _, _ ->
         }?.failsToCompile()
                 ?.withErrorContaining("no such column: age")
-                ?.and()
-                ?.withErrorCount(1)
+                ?.and()?.withErrorContaining(cannotFindQueryResultAdapter("foo.bar.MyClass.Pojo"))
+                ?.and()?.withErrorCount(2)
                 ?.withWarningCount(0)
     }
 
diff --git a/room/compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt b/room/compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
index 2b82d06..652abe7 100644
--- a/room/compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/processor/RawQueryMethodProcessorTest.kt
@@ -197,7 +197,7 @@
     fun suspendUnit() {
         simpleRun { invocation ->
             val daoElement =
-                invocation.typeElement(RawQuerySuspendUnitDao::class.java.canonicalName)
+                invocation.typeElement(RawQuerySuspendUnitDao::class.java.canonicalName!!)
             val daoFunctionElement = ElementFilter.methodsIn(daoElement.enclosedElements).first()
             RawQueryMethodProcessor(
                 baseContext = invocation.context,
diff --git a/room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt b/room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
index 0598a0a..72384a4 100644
--- a/room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/testing/TestProcessor.kt
@@ -24,7 +24,7 @@
 import javax.lang.model.element.TypeElement
 import kotlin.reflect.KClass
 
-@SupportedSourceVersion(SourceVersion.RELEASE_8) // test are compiled w/ J_8
+@SupportedSourceVersion(SourceVersion.RELEASE_11) // test are compiled w/ J_11
 class TestProcessor(
     val handlers: List<(TestInvocation) -> Boolean>,
     val annotations: MutableSet<String>
@@ -55,7 +55,7 @@
         }
 
         fun forAnnotations(vararg klasses: KClass<*>): Builder {
-            annotations.addAll(klasses.map { it.java.canonicalName })
+            annotations.addAll(klasses.map { it.java.canonicalName!! })
             return this
         }
 
diff --git a/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt b/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
index 8e2c368..f17dd65 100644
--- a/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
@@ -250,8 +250,8 @@
 }
 
 private fun getSystemClasspathFiles(): Set<File> {
-    val pathSeparator = System.getProperty("path.separator")
-    return System.getProperty("java.class.path").split(pathSeparator).map { File(it) }.toSet()
+    val pathSeparator = System.getProperty("path.separator")!!
+    return System.getProperty("java.class.path")!!.split(pathSeparator).map { File(it) }.toSet()
 }
 
 fun String.toJFO(qName: String): JavaFileObject = JavaFileObjects.forSourceLines(qName, this)
\ No newline at end of file
diff --git a/room/compiler/src/test/kotlin/androidx/room/writer/EntityCursorConverterWriterTest.kt b/room/compiler/src/test/kotlin/androidx/room/writer/EntityCursorConverterWriterTest.kt
index d02dc49..7eae18a 100644
--- a/room/compiler/src/test/kotlin/androidx/room/writer/EntityCursorConverterWriterTest.kt
+++ b/room/compiler/src/test/kotlin/androidx/room/writer/EntityCursorConverterWriterTest.kt
@@ -33,7 +33,7 @@
             package foo.bar;
             import android.database.Cursor;
             import java.lang.SuppressWarnings;
-            import javax.annotation.Generated;
+            import javax.annotation.processing.Generated;
             @Generated("androidx.room.RoomProcessor")
             @SuppressWarnings({"unchecked", "deprecation"})
             public class MyContainerClass {
diff --git a/serialization/serialization-compiler/build.gradle b/serialization/serialization-compiler/build.gradle
index 196ea38..76b14b0 100644
--- a/serialization/serialization-compiler/build.gradle
+++ b/serialization/serialization-compiler/build.gradle
@@ -20,8 +20,6 @@
 import androidx.build.LibraryGroups
 import androidx.build.Publish
 
-import org.gradle.internal.jvm.Jvm
-
 plugins {
     id("AndroidXPlugin")
     id("kotlin")
@@ -48,7 +46,6 @@
 
     testImplementation("androidx.annotation:annotation:1.1.0")
     testImplementation(project(":serialization:serialization-runtime"))
-    testImplementation(files(Jvm.current().getToolsJar()))
     testImplementation(GOOGLE_COMPILE_TESTING)
     testImplementation(JSR250)
     testImplementation(JUNIT)
diff --git a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/AnnotationMirrorExt.kt b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/AnnotationMirrorExt.kt
index 962e3bc..e8cf3d7 100644
--- a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/AnnotationMirrorExt.kt
+++ b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/AnnotationMirrorExt.kt
@@ -21,6 +21,7 @@
 import javax.lang.model.element.AnnotationValue
 
 /** Get an annotation value by Java property name. */
+@Suppress("DEPRECATION")
 internal operator fun AnnotationMirror.get(name: String): AnnotationValue {
     return AnnotationMirrors.getAnnotationValue(this, name)
 }
diff --git a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/ElementExt.kt b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/ElementExt.kt
index 1d802b3..3d918d1 100644
--- a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/ElementExt.kt
+++ b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/processing/ElementExt.kt
@@ -50,6 +50,7 @@
     return accept(IsVisibleToPackageVisitor, null)
 }
 
+@Suppress("DEPRECATION")
 private object IsVisibleToPackageVisitor : SimpleElementVisitor6<Boolean, Nothing?>() {
     override fun visitPackage(e: PackageElement, p: Nothing?): Boolean {
         return true
diff --git a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/schema/TypeNameExt.kt b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/schema/TypeNameExt.kt
index 52cab76..285a73c 100644
--- a/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/schema/TypeNameExt.kt
+++ b/serialization/serialization-compiler/src/main/kotlin/androidx/serialization/compiler/schema/TypeNameExt.kt
@@ -26,6 +26,7 @@
     return this.accept(TypeNameVisitor, mutableListOf())
 }
 
+@Suppress("DEPRECATION")
 private object TypeNameVisitor : SimpleElementVisitor6<TypeName, MutableList<String>>() {
     override fun visitType(e: TypeElement, p: MutableList<String>): TypeName {
         p += e.simpleName.toString()