Search code examples
androidkotlingradleandroid-gradle-pluginandroid-jetpack-compose

Invalid override, app crashes with AbstractMethodError


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

But in this case the abstract class where the function tries to invoke the abstract method and fails, if I change it to open it will work like it is not overridden even if it 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


Solution

  • 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/