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) {}
}
"""