I am working on something like navigation framework to my app, and now is the simple task to make some container in superclass to be overridden by its children, but when it looks like it dont overrides the method when i add an VM generic to the method and crashes with AbstractMethodError, that looks like impossible.
That works as it has to work, methods are overridden
FATAL EXCEPTION: main
Process: com.rus_artur4ik.veterinarian, PID: 21406
java.lang.AbstractMethodError: abstract method "void com.rus_artur4ik.petcore.mvvm.lce.LceScreen.SomeFun(com.rus_artur4ik.petcore.mvvm.lce.LceViewModel, kotlin.jvm.functions.Function2, androidx.compose.runtime.Composer, int)"
at com.rus_artur4ik.petcore.mvvm.lce.LceScreen.Content(LceScreen.kt:15)
at com.rus_artur4ik.petcore.mvvm.lce.LceScreen.Content(LceScreen.kt:9)
at com.rus_artur4ik.petcore.mvvm.MvvmScreen.Content(MvvmScreen.kt:17)
at com.rus_artur4ik.petcore.navigation.Navigator$registerScreen$1.invoke(Navigator.kt:98)
at com.rus_artur4ik.petcore.navigation.Navigator$registerScreen$1.invoke(Navigator.kt:98)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:173)
at androidx.navigation.compose.NavHostKt$NavHost$4$2.invoke(NavHost.kt:172)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84)
at androidx.navigation.compose.NavBackStackEntryProviderKt.SaveableStateProvider(NavBackStackEntryProvider.kt:65)
at androidx.navigation.compose.NavBackStackEntryProviderKt.access$SaveableStateProvider(NavBackStackEntryProvider.kt:1)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:52)
at androidx.navigation.compose.NavBackStackEntryProviderKt$LocalOwnersProvider$1.invoke(NavBackStackEntryProvider.kt:51)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:228)
at androidx.navigation.compose.NavBackStackEntryProviderKt.LocalOwnersProvider(NavBackStackEntryProvider.kt:47)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:172)
at androidx.navigation.compose.NavHostKt$NavHost$4.invoke(NavHost.kt:146)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:116)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:133)
at androidx.compose.animation.CrossfadeKt$Crossfade$5$1.invoke(Crossfade.kt:128)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:142)
at androidx.compose.animation.CrossfadeKt.Crossfade(Crossfade.kt:73)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:146)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:13)
at androidx.navigation.compose.NavHostKt$NavHost$5.invoke(Unknown Source:10)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:162)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2443)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:2711)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3342)
at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:3320)
at androidx.compose.runtime.SnapshotStateKt__DerivedStateKt.observeDerivedStateRecalculations(DerivedState.kt:341)
at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(Unknown Source:1)
2023-05-05 21:36:11.128 21406-21406 AndroidRuntime com.rus_artur4ik.veterinarian E at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3320)
at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3285)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:772)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1047)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:124)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:541)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:510)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1317)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1328)
at android.view.Choreographer.doCallbacks(Choreographer.java:940)
at android.view.Choreographer.doFrame(Choreographer.java:869)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1302)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8180)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:946)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@65cda6b, androidx.compose.ui.platform.MotionDurationScaleImpl@9d7c9c8, StandaloneCoroutine{Cancelling}@90c0a61, AndroidUiDispatcher@d502986]
Here is my class:
abstract class LceScreen<S, VM: LceViewModel<S>>(
viewModelClass: Class<VM>
): MvvmScreen<LceState<S>, VM>(viewModelClass) {
@Composable
final override fun Content(viewModel: VM) {
SomeFun(vm = viewModel) {
when (val state = viewModel.state) {
is Loading -> Loading(
viewModel = viewModel
)
is Content -> Content(
content = state.content,
viewModel = viewModel
)
is Error -> Error(
throwable = state.throwable,
viewModel = viewModel
)
}
}
}
@Composable
protected abstract fun SomeFun(vm: VM, content: @Composable () -> Unit)
@Composable
protected abstract fun Loading(
viewModel: VM
)
@Composable
protected abstract fun Content(
content: S,
viewModel: VM
)
@Composable
protected abstract fun Error(
throwable: Throwable,
viewModel: VM
)
}
AGP 8.1.0-beta01 KGP 1.8.0 Any ideas, what can be wrong? Thanks a lot!
I tried to clean, rebuild, delete the build and .gradle folders, delete /.gradle/cache folder
The problem was because of invalid global gradle caches, when i cleaned it up, everything become works. To cleanup global gradle caches use
rm -rf $HOME/.gradle/caches/