Status Update
Comments
ac...@google.com <ac...@google.com> #2
Hello there!
Thank you for the heads up this has been already reported internally.
as...@google.com <as...@google.com> #3
Hello,
The expected impact of this bug is considered low (it's a narrow edge case with no upvotes, and should be avoidable on the consumer side by trimming inputs). As a result, our engineering team has deprioritized the issue until there is evidence of further impact. I am going to mark this as Won't Fix to more accurately reflect this. Please re-open if the scope of the issue changes. Thanks!
ac...@google.com <ac...@google.com> #4
Here is the stacktrace I saw:
03-13 11:19:17.429 28114 28114 E AndroidRuntime: Process: com.example.myapplication, PID: 28114
03-13 11:19:17.429 28114 28114 E AndroidRuntime: java.lang.IllegalStateException: Unable to find method 'invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;' in 'com/example/myapplication/MainActivityKt$FeedView$2$1' (MainActivity.kt)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: Found:
03-13 11:19:17.429 28114 28114 E AndroidRuntime: invoke()Ljava/lang/Object;
03-13 11:19:17.429 28114 28114 E AndroidRuntime: <init>(Landroidx/compose/foundation/lazy/LazyListState;)V
03-13 11:19:17.429 28114 28114 E AndroidRuntime: invoke()Ljava/lang/Integer;
03-13 11:19:17.429 28114 28114 E AndroidRuntime:
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at com.android.tools.deploy.liveedit.MethodBodyEvaluator.<init>(MethodBodyEvaluator.java:62)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at com.android.tools.deploy.liveedit.LiveEditClass.invokeDeclaredMethod(LiveEditClass.java:105)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at com.android.tools.deploy.liveedit.LiveEditStubs.doStub(LiveEditStubs.java:136)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at com.android.tools.deploy.liveedit.LiveEditStubs.stubL(LiveEditStubs.java:141)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at com.example.myapplication.MainActivityKt$FeedView$2$1.invokeSuspend(Unknown Source:47)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch(AndroidUiDispatcher.android.kt:81)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch(AndroidUiDispatcher.android.kt:41)
03-13 11:19:17.429 28114 28114 E AndroidRuntime: at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run(AndroidUiDispatcher.android.kt:57)
Classes Before LE:
final class com.example.myapplication.MainActivityKt$FeedView$2$1 extends kotlin.coroutines.jvm.internal.SuspendLambda implements kotlin.jvm.functions.Function2<kotlinx.coroutines.CoroutineScope, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object>
Classes After LE:
final class com.example.myapplication.MainActivityKt$FeedView$2$1 extends kotlin.jvm.internal.Lambda implements kotlin.jvm.functions.Function0<java.lang.Integer> {
final class com.example.myapplication.MainActivityKt$FeedView$2 extends kotlin.coroutines.jvm.internal.SuspendLambda implements kotlin.jvm.functions.Function2<kotlinx.coroutines.CoroutineScope, kotlin.coroutines.Continuation<? super kotlin.Unit>, java.lang.Object> {
$2
is what used to be $2$1
in the name shuffling. $2$1
is now a kotlin.jvm.internal.Lambda implements kotlin.jvm.functions.Function0<java.lang.Integer>
.
I believe there is no child of Function0 in the original classes because the bytecode uses InvokeDynamic
. When I check the DEX code of the APK, there is
Class descriptor : 'Lcom/example/myapplication/MainActivityKt$$ExternalSyntheticLambda0;'
Access flags : 0x1011 (PUBLIC FINAL SYNTHETIC)
Superclass : 'Ljava/lang/Object;'
Interfaces -
#0 : 'Lkotlin/jvm/functions/Function2;'
@Noah: this is one of the cases where the class differ really need to be looking at the R8 desugared output when INDY is involved in order to know it needs to invalidate creators of ExternalSyntheticLambda0
?
Description
Repro:
Crash: