From a094d12ea80b1295199c1a0ec3f1d610237364fd Mon Sep 17 00:00:00 2001 From: Gary Spreder Date: Mon, 25 Mar 2024 14:43:39 -0700 Subject: [PATCH] Fix backward binary compatibility with Koin 3.4 Fixes gh-1829 --- .../kotlin/org/koin/dsl/KoinApplication.kt | 30 +++++++++++++++++-- .../org/koin/dsl/KoinAppCreationTest.kt | 14 +++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/projects/core/koin-core/src/commonMain/kotlin/org/koin/dsl/KoinApplication.kt b/projects/core/koin-core/src/commonMain/kotlin/org/koin/dsl/KoinApplication.kt index c898f4bfc..3ac403b36 100644 --- a/projects/core/koin-core/src/commonMain/kotlin/org/koin/dsl/KoinApplication.kt +++ b/projects/core/koin-core/src/commonMain/kotlin/org/koin/dsl/KoinApplication.kt @@ -24,11 +24,11 @@ typealias KoinAppDeclaration = KoinApplication.() -> Unit * Create a KoinApplication instance and help configure it * @author Arnaud Giuliani * - * @param createEagerInstances - allow to create eager instances or not - * @param appDeclaration + * @param createEagerInstances allow to create eager instances or not + * @param appDeclaration closure for configuration of a new Koin context */ @KoinApplicationDslMarker -fun koinApplication(createEagerInstances : Boolean = true, appDeclaration: KoinAppDeclaration? = null): KoinApplication { +fun koinApplication(createEagerInstances: Boolean = true, appDeclaration: KoinAppDeclaration? = null): KoinApplication { val koinApplication = KoinApplication.init() appDeclaration?.invoke(koinApplication) if (createEagerInstances) { @@ -36,3 +36,27 @@ fun koinApplication(createEagerInstances : Boolean = true, appDeclaration: KoinA } return koinApplication } + +/** + * Create a KoinApplication instance and help configure it. + * This overload helps ensure backward-compatible bytecode. + * + * @param appDeclaration closure for configuration of a new Koin context + * @author Gary Spreder + */ +@KoinApplicationDslMarker +fun koinApplication(appDeclaration: KoinAppDeclaration?): KoinApplication { + return koinApplication(createEagerInstances = true, appDeclaration = appDeclaration) +} + +/** + * Create a KoinApplication instance and help configure it. + * This overload helps ensure backward-compatible bytecode. + * + * @param createEagerInstances allow to create eager instances or not + * @author Gary Spreder + */ +@KoinApplicationDslMarker +fun koinApplication(createEagerInstances: Boolean): KoinApplication { + return koinApplication(createEagerInstances = createEagerInstances, appDeclaration = null) +} diff --git a/projects/core/koin-core/src/commonTest/kotlin/org/koin/dsl/KoinAppCreationTest.kt b/projects/core/koin-core/src/commonTest/kotlin/org/koin/dsl/KoinAppCreationTest.kt index 792648eb7..e4bc5cc9e 100644 --- a/projects/core/koin-core/src/commonTest/kotlin/org/koin/dsl/KoinAppCreationTest.kt +++ b/projects/core/koin-core/src/commonTest/kotlin/org/koin/dsl/KoinAppCreationTest.kt @@ -30,6 +30,20 @@ class KoinAppCreationTest { assertHasNoStandaloneInstance() } + @Test + fun `maintain koinApplication source compatibility`() { + // Successful compilation and a lack of exceptions is sufficient + koinApplication { modules() } + koinApplication(createEagerInstances = true) + koinApplication(createEagerInstances = true) { modules() } + koinApplication(true) { modules() } + val declaration: KoinAppDeclaration = { modules() } + koinApplication(declaration) + koinApplication(createEagerInstances = true, declaration) + koinApplication(createEagerInstances = true, appDeclaration = declaration) + koinApplication(true, declaration) + } + @Test fun `start a Koin application`() { val app = startKoin { }