koin-annotations
koin-annotations copied to clipboard
Default Module is generated twice
Describe the bug I was trying to write a KSP code gen for Circuit with Koin. I was able to generate code properly but looks like somehow default module is being generated twice. Not really sure what could be causing this.
My KSP generated code
package dev.mslalith.freya.ui.root.splashpage
import com.slack.circuit.runtime.CircuitContext
import com.slack.circuit.runtime.screen.Screen
import com.slack.circuit.runtime.ui.Ui
import com.slack.circuit.runtime.ui.ui
import dev.mslalith.freya.core.screens.SplashScreen
import org.koin.core.`annotation`.Factory
@Factory
public class SplashPageFactory : Ui.Factory {
override fun create(screen: Screen, context: CircuitContext): Ui<*>? = when (screen) {
SplashScreen -> ui<SplashPageUiState> { state, modifier -> SplashPage(state = state, modifier = modifier) }
else -> null
}
}
Koin generated code
import org.koin.core.module.Module
import org.koin.dsl.*
import org.koin.meta.annotations.ExternalDefinition
import org.koin.core.definition.KoinDefinition
@ExternalDefinition("dev.mslalith.freya.ui.root.splashpage")
public fun Module.defineDevMslalithFreyaUiRootSplashpageSplashPageFactory() : KoinDefinition<*> = factory() { _ -> dev.mslalith.freya.ui.root.splashpage.SplashPageFactory() } bind(com.slack.circuit.runtime.ui.Ui.Factory::class)
public val _defaultModule : Module get() = module {
defineDevMslalithFreyaUiRootSplashpageSplashPageFactory()
}
public val defaultModule : org.koin.core.module.Module get() = _defaultModule
public fun org.koin.core.KoinApplication.defaultModule(): org.koin.core.KoinApplication = modules(defaultModule)
Expected behavior Default module should be generated once
Koin project used and used version (please complete the following information): koin = "4.0.2" koin-annotations = "2.0.0"
Additional moduleDefinition Add any other moduleDefinition about the problem here.
@Module(
includes = [
RootModule::class,
CircuitModule::class
]
)
@ComponentScan("dev.mslalith.freya.ui")
class UiModule
@Module
class CircuitModule {
@Single
fun provideCircuit(
uiFactories: List<Ui.Factory>,
presenterFactories: List<Presenter.Factory>
): Circuit = Circuit.Builder()
.addUiFactories(uiFactories)
.addPresenterFactories(presenterFactories)
.build()
}
Looks like issue occurs when there are multiple @CircuitInject and @Factory annotations present in a module. For now, I've separated to multiple sub modules and it's working.
Are you looking to make Koin Annotations integration for Circuit?
Yes. I'm planning to do it locally at the moment.
can say again what is missing/failing here?
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.