奇怪的排序,但是在使用Jetpack Compose时出现“后端内部错误”错误,结果是通过调用从协程内部获取lambda的函数触发的。
很容易复制。...已将其范围缩小到以下步骤:
使用“空撰写活动”模板创建新项目。更新至dev07(以前的版本也存在问题),并在build.gradle
composeOptions {
kotlinCompilerExtensionVersion = "0.1.0-dev07"
}
将关注者添加到MyActivity.kt
fun someFun(success: (String) -> Unit) {
}
然后将onCreate
更新为以下内容:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
someFun {
}
}
setContent {
MaterialTheme {
Greeting("Android")
}
}
}
构建项目,然后看到以下错误:
e: java.lang.IllegalStateException: Backend Internal error: Exception during code generation
Element is unknownThe root cause java.lang.RuntimeException was thrown at: org.jetbrains.kotlin.backend.jvm.codegen.FunctionCodegen.generate(FunctionCodegen.kt:42)
at org.jetbrains.kotlin.codegen.CompilationErrorHandler.lambda$static$0(CompilationErrorHandler.java:35)
at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:114)
请注意,您还需要向build.gradle
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
答案 0 :(得分:1)
重现此问题的另一种方法似乎是在代码库中的任何地方嵌套lambda,例如:
private val scanResult = MutableLiveData<String>()
init {
coroutineScope.launch {
scanResult.asFlow()
.distinctUntilChanged()
.debounce(500)
.collect { result -> processText(result) } // <-- This nested lambda breaks the build.
}
}
private fun processText(text: String) {
TODO()
}
因此,构建错误的根本原因不是在声明将lambda作为输入参数的方法,而是使用嵌套的lambda 。