koin-annotations icon indicating copy to clipboard operation
koin-annotations copied to clipboard

Compatibility with ktorfit/KSP2 later than 2.0.0-Beta3

Open hmy65 opened this issue 11 months ago • 22 comments

for

KoinMultiplatformApplication(
    config = koinConfiguration { modules(AppModule().module) }
)

Unresolved reference. None of the following candidates is applicable because of a receiver type mismatch:

hmy65 avatar Feb 05 '25 07:02 hmy65

no KSP generation is done. Check your KSP setup?

arnaudgiuliani avatar Feb 10 '25 10:02 arnaudgiuliani

After testing with 2.0.0-RC1 I'm having the same issue. On my application, one of my @Module seems to break and does not generate properly (it instead generates a default module). My other modules work just fine.

I'm not able to reproduce the issue on a smaller scale project, so I'm continuing the investigation and I'll keep you updated.

skyecodes avatar Feb 10 '25 11:02 skyecodes

Can you look at what is generated?

arnaudgiuliani avatar Feb 10 '25 11:02 arnaudgiuliani

2.0.0-Beta3:

package org.koin.ksp.generated

import org.koin.core.module.Module
import org.koin.dsl.*


public val app_vercors_launcher_core_meta_CoreMetaModule : Module get() = module {
	single(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit")) { _ -> app.vercors.launcher.core.meta.provideMetaKtorfit(httpClient=get(),getProperty("vercorsApiKey"),getProperty("vercorsApiUrl")) } bind(de.jensklingenberg.ktorfit.Ktorfit::class)
	single() { _ -> app.vercors.launcher.core.meta.game.provideGameApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.game.GameApi::class)
	single() { _ -> app.vercors.launcher.core.meta.home.provideHomeApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.home.HomeApi::class)
	single() { _ -> app.vercors.launcher.core.meta.loader.provideLoaderApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.loader.LoaderApi::class)
}
public val app.vercors.launcher.core.meta.CoreMetaModule.module : org.koin.core.module.Module get() = app_vercors_launcher_core_meta_CoreMetaModule

2.0.0-RC1:

package org.koin.ksp.generated

import org.koin.core.module.Module
import org.koin.dsl.*

import org.koin.meta.annotations.ExternalDefinition
import org.koin.core.definition.KoinDefinition
@ExternalDefinition("app.vercors.launcher.core.meta.game")
public fun Module.defineprovideGameApi() : KoinDefinition<*> = single() { _ -> app.vercors.launcher.core.meta.game.provideGameApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.game.GameApi::class)
@ExternalDefinition("app.vercors.launcher.core.meta.home")
public fun Module.defineprovideHomeApi() : KoinDefinition<*> = single() { _ -> app.vercors.launcher.core.meta.home.provideHomeApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.home.HomeApi::class)
@ExternalDefinition("app.vercors.launcher.core.meta.loader")
public fun Module.defineprovideLoaderApi() : KoinDefinition<*> = single() { _ -> app.vercors.launcher.core.meta.loader.provideLoaderApi(ktorfit=get(qualifier=org.koin.core.qualifier.StringQualifier("metaKtorfit"))) } bind(app.vercors.launcher.core.meta.loader.LoaderApi::class)

public val _defaultModule : Module get() = module {
	defineprovideGameApi()
	defineprovideHomeApi()
	defineprovideLoaderApi()
}
public val defaultModule : org.koin.core.module.Module get() = _defaultModule
public fun org.koin.core.KoinApplication.defaultModule(): org.koin.core.KoinApplication = modules(defaultModule)

I've realized that in 2.0.0-RC1 it did not generate the definition for provideMetaKtorfit, maybe this is where I should investigate. This definition has @Property dependencies, maybe this is a clue.

skyecodes avatar Feb 10 '25 11:02 skyecodes

Why all is generated in default module? Did you skipped a module?

provideMetaKtorfit is not geenrated then

arnaudgiuliani avatar Feb 10 '25 12:02 arnaudgiuliani

All 4 definitions are declared in the CoreMetaModule module. Source code is here if you want to have a better understanding: https://github.com/skyecodes/vercors/blob/main/launcher/core/meta/src/main/kotlin/app/vercors/launcher/core/meta/CoreMetaModule.kt (The 3 other definitions are located in their respective subpackage)

skyecodes avatar Feb 10 '25 12:02 skyecodes

I've tested building locally the koin-annotations project on different commits until I found the commit where the problem starts appearing: https://github.com/InsertKoinIO/koin-annotations/commit/65823074f44e453e355035675ac78a98c998a4f1

skyecodes avatar Feb 10 '25 14:02 skyecodes

Also, these are the logs I get before/after that commit:

Before:

2025-02-10T16:01:32.882+0100 [INFO] [org.gradle.api.Task] i: [ksp] loaded provider(s): [de.jensklingenberg.ktorfit.KtorfitProcessorProvider, androidx.room.RoomKspProcessor$Provider, org.koin.compiler.BuilderProcessorProvider]
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid definition symbols found.
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideGameApi
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideHomeApi
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideLoaderApi
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid symbols found (3), waiting for next round
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 2 of processing
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 1 modules ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate module CoreMetaModule
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideMetaKtorfit ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideGameApi ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideHomeApi ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideLoaderApi ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Koin Tags Generation ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] writeModuleTag? CoreMetaModule
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 3 of processing
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 1 modules ...
2025-02-10T16:01:32.882+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate module CoreMetaModule

After:

2025-02-10T16:07:03.942+0100 [INFO] [org.gradle.api.Task] i: [ksp] loaded provider(s): [de.jensklingenberg.ktorfit.KtorfitProcessorProvider, androidx.room.RoomKspProcessor$Provider, org.koin.compiler.BuilderProcessorProvider]
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid definition symbols found.
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideGameApi
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideHomeApi
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideLoaderApi
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid symbols found (3), waiting for next round
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 2 of processing
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-10T16:07:03.942+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.game.provideGameApi'. Definition is added to 'defaultModule'
2025-02-10T16:07:03.942+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.home.provideHomeApi'. Definition is added to 'defaultModule'
2025-02-10T16:07:03.942+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.loader.provideLoaderApi'. Definition is added to 'defaultModule'
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 0 modules ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate default file ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideGameApi ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideHomeApi ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideLoaderApi ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Koin Tags Generation ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 3 of processing
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-10T16:07:03.942+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 0 modules ...

skyecodes avatar Feb 10 '25 15:02 skyecodes

let's see with 2.0-RC3

arnaudgiuliani avatar Feb 19 '25 17:02 arnaudgiuliani

Unfortunately, I still have the same issue with 2.0.0-RC3 (https://github.com/InsertKoinIO/koin-annotations/commit/27ca37d97e4cf711c23f89d8335eafea8d6da9a9).

2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 1 of processing
2025-02-19T22:18:09.142+0100 [INFO] [org.gradle.api.Task] i: [ksp] loaded provider(s): [de.jensklingenberg.ktorfit.KtorfitProcessorProvider, androidx.room.RoomKspProcessor$Provider, org.koin.compiler.BuilderProcessorProvider]
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid definition symbols found.
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideGameApi
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideHomeApi
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid entity: provideLoaderApi
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Invalid symbols found (3), waiting for next round
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 2 of processing
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-19T22:18:09.142+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.game.provideGameApi'. Definition is added to 'defaultModule'
2025-02-19T22:18:09.142+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.home.provideHomeApi'. Definition is added to 'defaultModule'
2025-02-19T22:18:09.142+0100 [INFO] [org.gradle.api.Task] i: [ksp] No module found for 'app.vercors.launcher.core.meta.loader.provideLoaderApi'. Definition is added to 'defaultModule'
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 0 modules ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate default file ...
2025-02-19T22:18:09.142+0100 [WARN] [org.gradle.api.Task] w: [ksp] Generating 'defaultModule' with 3 definitions
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideGameApi ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideHomeApi ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] write definition provideLoaderApi ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Koin Tags Generation ...
2025-02-19T22:18:09.142+0100 [WARN] [org.gradle.api.Task] w: [ksp] [Deprecation] 'defaultModule' generation is deprecated. Use KSP argument arg("KOIN_DEFAULT_MODULE","true") to activate default module generation.
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] round 3 of processing
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Scan symbols ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Build metadata ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan modules ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan definitions ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] scan functions ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] Generate code ...
2025-02-19T22:18:09.142+0100 [DEBUG] [org.gradle.api.Task] v: [ksp] generate 0 modules ...

skyecodes avatar Feb 19 '25 21:02 skyecodes

main problem is why you have default module generated here, and not your previous one

arnaudgiuliani avatar Feb 20 '25 14:02 arnaudgiuliani

for

KoinMultiplatformApplication(
    config = koinConfiguration { modules(AppModule().module) }
)

Unresolved reference. None of the following candidates is applicable because of a receiver type mismatch:

AppModule shows below: `@Module(includes = [NetworkModule::class, DatabaseModule::class]) @ComponentScan("xx.xxx") class AppModule {

@Single
fun provideNetworkListener() = createNetworkListener()

}`

unfortunately, 2.0.0-RC5 problem still exists.

hmy65 avatar Feb 21 '25 08:02 hmy65

can you share your compile error? If .module is not generated, the compiler encountered an error

arnaudgiuliani avatar Feb 24 '25 08:02 arnaudgiuliani

can you share your compile error? If .module is not generated, the compiler encountered an error

Still, 2.0.0 no luck. Does the new "KoinMultiplatformApplication(){}" have some side effects?

I checked the generated files. Two files missing.

Later than 2.0.0-Beta3,

Image

Before,

Image

Compile error shows below:

FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':composeApp:compileKotlinDesktop'.

A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction Compilation error. See log for more details

  • Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. Get more help at https://help.gradle.org.

BUILD FAILED in 9s 13 actionable tasks: 3 executed, 10 up-to-date 10:43:13: Execution finished 'run'.

@arnaudgiuliani Thanks for your time.

hmy65 avatar Feb 25 '25 02:02 hmy65

Full debug info:

2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task ':composeApp:compileKotlinDesktop'.
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]    > Compilation error. See log for more details
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] 
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Run with --stacktrace option to get the stack trace.
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Run with --scan to get full insights.
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] > Get more help at https://help.gradle.org.
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] 
2025-02-25T10:58:53.445+0800 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] BUILD FAILED in 4s

hmy65 avatar Feb 25 '25 03:02 hmy65

I need to see above your message. I don't have enough details on error failure

arnaudgiuliani avatar Feb 26 '25 08:02 arnaudgiuliani

I need to see above your message. I don't have enough details on error failure

Above FAILURE:

17:34:01: Executing 'run'…

Type-safe project accessors is an incubating feature.

> Configure project :composeApp
w: The `kotlin.mpp.androidGradlePluginCompatibility.nowarn` deprecated property is used in your build.
Please, stop using it as it is unsupported and may apply no effect to your build.


> Task :composeApp:convertXmlValueResourcesForCommonMain UP-TO-DATE
> Task :composeApp:copyNonXmlValueResourcesForCommonMain UP-TO-DATE
> Task :composeApp:prepareComposeResourcesTaskForCommonMain UP-TO-DATE
> Task :composeApp:convertXmlValueResourcesForDesktopMain NO-SOURCE
> Task :composeApp:copyNonXmlValueResourcesForDesktopMain NO-SOURCE
> Task :composeApp:prepareComposeResourcesTaskForDesktopMain NO-SOURCE
> Task :composeApp:assembleDesktopMainResources UP-TO-DATE
> Task :composeApp:checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :composeApp:generateResourceAccessorsForCommonMain UP-TO-DATE
> Task :composeApp:generateResourceAccessorsForDesktopMain NO-SOURCE
> Task :composeApp:generateActualResourceCollectorsForDesktopMain UP-TO-DATE
> Task :composeApp:generateComposeResClass UP-TO-DATE
> Task :composeApp:generateExpectResourceCollectorsForCommonMain UP-TO-DATE
> Task :composeApp:transformCommonMainDependenciesMetadata UP-TO-DATE
> Task :composeApp:prepareAppResources NO-SOURCE

> Task :composeApp:kspCommonMainKotlinMetadata
w: [ksp] [Deprecation] 'defaultModule' generation is deprecated. Use KSP argument arg("KOIN_DEFAULT_MODULE","true") to activate default module generation.
w: [ksp] Koin Configuration Check ...

> Task :composeApp:kspKotlinDesktop
w: [ksp] [Deprecation] 'defaultModule' generation is deprecated. Use KSP argument arg("KOIN_DEFAULT_MODULE","true") to activate default module generation.
w: [ksp] Koin Configuration Check ...

> Task :composeApp:copyRoomSchemas NO-SOURCE
> Task :composeApp:desktopProcessResources UP-TO-DATE

> Task :composeApp:compileKotlinDesktop
e: file:///C:/Users/.../App.kt:29:54 Unresolved reference 'module'.
e: file:///C:/Users/.../Koin.kt:28:45 Unresolved reference 'module'.

> Task :composeApp:compileKotlinDesktop FAILED
13 actionable tasks: 3 executed, 10 up-to-date

I think the Unresolved reference is dued to AppModule hasn't been generated

hmy65 avatar Feb 26 '25 09:02 hmy65

Probably also related to https://github.com/InsertKoinIO/koin-annotations/issues/238 Since my AppModule used @componentscan, too

hmy65 avatar Feb 26 '25 09:02 hmy65

Alright, I have found out how to fix the issue for me. Turns out it is related to the fact that I use another KSP plugin (Ktorfit).

My provideXxxApi definitions each call a createXxxApi method that is generated by the Ktorfit KSP plugin and return its result. During scanning, Koin cannot figure out the return type of these definitions because it is not explicitly stated and the createXxxApi method may have not been generated yet. By explicitly stating the return type of these definitions, the module is now properly generated.

See this commit in my case https://github.com/skyecodes/vercors/pull/44/commits/f989b741005ea60f26d5fe8498e1759c4b4c1f46. Hopefully OP is running into the same issue as me and can be fixed the same way. Maybe something can be done on Koin's side to avoid this problem, or maybe it is unavoidable due to how the scanning process was changed for the KSP2 compatibility.

skyecodes avatar Feb 28 '25 12:02 skyecodes

Alright, I have found out how to fix the issue for me. Turns out it is related to the fact that I use another KSP plugin (Ktorfit).

My provideXxxApi definitions each call a createXxxApi method that is generated by the Ktorfit KSP plugin and return its result. During scanning, Koin cannot figure out the return type of these definitions because it is not explicitly stated and the createXxxApi method may have not been generated yet. By explicitly stating the return type of these definitions, the module is now properly generated.

See this commit in my case skyecodes/vercors@f989b74. Hopefully OP is running into the same issue as me and can be fixed the same way. Maybe something can be done on Koin's side to avoid this problem, or maybe it is unavoidable due to how the scanning process was changed for the KSP2 compatibility.

You are absolutely genius :). Yes, my issue fixed. So it's pretty clear later than 2.0.0-Beta3, ktorfit.createXXXService() need to explicitly state return type. The reason might as you said it's KSP2 issue.

Thanks a lot guys @skyecodes @arnaudgiuliani

If this issue cannot be fixed on Koin's side, @arnaudgiuliani you might help me close this issue directly. Thanks :)

hmy65 avatar Mar 01 '25 06:03 hmy65

We have similar issue in project. We are trying to upgrade koin annotations from 1.3.1 to 2.0.0 and 2.0.0 we have problem in one of our view model which is using generated code from compose destination library to retrieve args for view model. For this case default module is generated. Whenever im commenting import and usage of that destination class - module is generated properly again. Based on information from this gh issue I've switched to 2.0.0-Beta3. Module is generated regardless of usage of destination class from compose destination libs. Have more issues in other gradle modules regarding @ComponentScan, but mentioned one was most difficult to catch and it was quite isolated from others with small scope of code. Compose destination right now is on version of 1.10.2 but trying to update it to never version doesn't affect generation of koin annotations.

ZeDzislaw avatar Mar 19 '25 14:03 ZeDzislaw

We need to unqueue all feedback for Koin Annotations 2.0. Let me check that all 👍 @ZeDzislaw can you share more details, snippets?

arnaudgiuliani avatar Mar 26 '25 16:03 arnaudgiuliani

let's reopen if needed 👍

arnaudgiuliani avatar Apr 07 '25 17:04 arnaudgiuliani