Use real sdk in lifecycle-lint tests

It will allow to use jdk types in tests without stubbing going forward.
Follow-up CLs will use java.util.concurrent.CancellationException

Test: ./gradlew :lifecycle:lifecycle-runtime-eap-lint:test
Change-Id: If35e11589dccc9ba3d37f39be2044e30ff867ee2
diff --git a/lifecycle/runtime/eap/lint/build.gradle b/lifecycle/runtime/eap/lint/build.gradle
index e36ccb6..9ec6db8 100644
--- a/lifecycle/runtime/eap/lint/build.gradle
+++ b/lifecycle/runtime/eap/lint/build.gradle
@@ -15,16 +15,33 @@
  */
 
 import static androidx.build.dependencies.DependenciesKt.*
+import androidx.build.AndroidXExtension
 import androidx.build.CompilationTarget
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
-import androidx.build.AndroidXExtension
+import androidx.build.SdkHelperKt
 
 plugins {
     id("AndroidXPlugin")
     id("kotlin")
 }
 
+ext.generatedResources = "$buildDir/generated/sdkResourcesForTest"
+
+sourceSets {
+    test.resources.srcDirs += generatedResources
+}
+
+task generateSdkResource() {
+    outputs.dir(generatedResources)
+    doLast {
+        new File(generatedResources, "sdk.prop").withWriter('UTF-8') { writer ->
+            writer.write("sdk.dir=${SdkHelperKt.getSdkPath(project.rootDir)}")
+        }
+    }
+}
+
+tasks["compileTestJava"].dependsOn generateSdkResource
 
 dependencies {
     // compileOnly because we use lintChecks and it doesn't allow other types of deps
diff --git a/lifecycle/runtime/eap/lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt b/lifecycle/runtime/eap/lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
index 5add803..422584849 100644
--- a/lifecycle/runtime/eap/lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
+++ b/lifecycle/runtime/eap/lint/src/main/java/androidx/lifecycle/lint/LifecycleWhenChecks.kt
@@ -167,7 +167,7 @@
         // because only `callsInPlace` lambdas inherit coroutine scope. But contracts aren't stable
         // yet =(
         // if lambda is suspending it means something else defined its scope
-        return node.isSuspendLambda(context) || super.visitLambdaExpression(node)
+        return node.isSuspendLambda() || super.visitLambdaExpression(node)
     }
 
     // ignore classes defined inline
@@ -202,7 +202,7 @@
 }
 
 // TODO: find a better way!
-private fun ULambdaExpression.isSuspendLambda(context: JavaContext): Boolean {
+private fun ULambdaExpression.isSuspendLambda(): Boolean {
     val expressionClass = getExpressionType() as? PsiClassType ?: return false
     val params = expressionClass.parameters
     // suspend functions are FunctionN<*, Continuation, Obj>
@@ -211,7 +211,7 @@
     }
     val superBound = (params[params.size - 2] as? PsiWildcardType)?.superBound as? PsiClassType
     return if (superBound != null) {
-        context.evaluator.getQualifiedName(superBound) in CONTINUATION_NAMES
+        superBound.canonicalText in CONTINUATION_NAMES
     } else {
         false
     }
diff --git a/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/LifecycleWhenChecksTest.kt b/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/LifecycleWhenChecksTest.kt
index 662c45b..5dbf21b8 100644
--- a/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/LifecycleWhenChecksTest.kt
+++ b/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/LifecycleWhenChecksTest.kt
@@ -23,17 +23,30 @@
 import com.android.tools.lint.checks.infrastructure.TestFiles.kt
 import com.android.tools.lint.checks.infrastructure.TestLintResult
 import com.android.tools.lint.checks.infrastructure.TestLintTask
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
+import java.io.File
+import java.util.Properties
 
 @RunWith(JUnit4::class)
 class LifecycleWhenChecksTest {
 
+    private var sdkDir: File? = null
+
+    @Before
+    fun setup() {
+        val stream = LifecycleWhenChecksTest::class.java.classLoader.getResourceAsStream("sdk.prop")
+        val properties = Properties()
+        properties.load(stream)
+        sdkDir = File(properties["sdk.dir"] as String)
+    }
+
     private fun check(body: String): TestLintResult {
         return TestLintTask.lint()
             .files(VIEW_STUB, LIFECYCLE_STUB, COROUTINES_STUB, kt(template(body)))
-            .allowMissingSdk(true)
+            .sdkHome(sdkDir!!)
             .issues(ISSUE)
             .run()
     }
diff --git a/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/stubs/Stubs.kt b/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/stubs/Stubs.kt
index 4c2e1c3..83b316c 100644
--- a/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/stubs/Stubs.kt
+++ b/lifecycle/runtime/eap/lint/src/test/java/androidx/lifecycle/lint/stubs/Stubs.kt
@@ -35,8 +35,6 @@
             val lifecycle: Lifecycle
         }
 
-        interface CoroutineScope {}
-
         suspend fun <T> Lifecycle.whenCreated(block: suspend CoroutineScope.() -> T): T {
             throw Error()
         }
@@ -69,8 +67,10 @@
 
         import kotlinx.coroutines.CoroutineScope
 
+        interface CoroutineScope {}
+
         object GlobalScope {
-            fun launch(block: suspend (b: Lifecycle) -> Unit) {}
+            fun launch(block: suspend () -> Unit) {}
         }
 
     """