From 1c58e3495021f78cd3ac1106215812f2d5bb1ecc Mon Sep 17 00:00:00 2001 From: theophiluskibet Date: Thu, 26 Sep 2024 17:38:21 +0300 Subject: [PATCH 01/10] fix import for compose --- .../kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt index c0821980..8b233f47 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt @@ -40,7 +40,7 @@ val SCOPED = DefinitionAnnotation("scoped", annotationType = Scoped::class) val KOIN_VIEWMODEL = DefinitionAnnotation("viewModel", "org.koin.androidx.viewmodel.dsl.viewModel", KoinViewModel::class) //TODO Remove isComposeViewModelActive with Koin 4 -val KOIN_VIEWMODEL_COMPOSE = DefinitionAnnotation("viewModel", "org.koin.compose.viewmodel.dsl.viewModel", KoinViewModel::class) +val KOIN_VIEWMODEL_COMPOSE = DefinitionAnnotation("viewModel", "org.koin.core.module.dsl.viewModel", KoinViewModel::class) val KOIN_WORKER = DefinitionAnnotation("worker", "org.koin.androidx.workmanager.dsl.worker", KoinWorker::class) From 47192e19b97af729bdeba5c9643946bbb06005f9 Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 14 Oct 2024 18:31:45 +0200 Subject: [PATCH 02/10] update to KSP 2.0.20-1.0.25 --- .gitignore | 1 + examples/android-coffee-maker/build.gradle.kts | 9 +++++++++ examples/android-library/build.gradle.kts | 9 +++++++++ examples/gradle.properties | 2 +- examples/gradle/libs.versions.toml | 12 ++++++------ examples/gradle/wrapper/gradle-wrapper.properties | 2 +- projects/gradle.properties | 2 +- projects/gradle/libs.versions.toml | 6 +++--- 8 files changed, 31 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 5b2c0274..65262a52 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ classes/ .DS_Store /build /captures +.kotlin diff --git a/examples/android-coffee-maker/build.gradle.kts b/examples/android-coffee-maker/build.gradle.kts index 3b7ef49c..27ae1219 100644 --- a/examples/android-coffee-maker/build.gradle.kts +++ b/examples/android-coffee-maker/build.gradle.kts @@ -10,6 +10,7 @@ val androidMinSDK : String by project android { compileSdk = androidCompileSDK.toInt() defaultConfig { + namespace = "org.koin.sample.androidx" minSdk = androidMinSDK.toInt() applicationId = "org.gradle.kotlin.dsl.samples.androidstudio" versionCode = 1 @@ -32,6 +33,14 @@ android { } } } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } } dependencies { diff --git a/examples/android-library/build.gradle.kts b/examples/android-library/build.gradle.kts index ee1f4a20..65d19b74 100644 --- a/examples/android-library/build.gradle.kts +++ b/examples/android-library/build.gradle.kts @@ -10,6 +10,7 @@ val androidMinSDK : String by project android { compileSdk = androidCompileSDK.toInt() defaultConfig { + namespace = "org.koin.sample.android.library" minSdk = androidMinSDK.toInt() } // to use KSP generated Code @@ -21,6 +22,14 @@ android { } } } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } } dependencies { diff --git a/examples/gradle.properties b/examples/gradle.properties index d4006919..d4ef8189 100644 --- a/examples/gradle.properties +++ b/examples/gradle.properties @@ -9,5 +9,5 @@ kotlin.code.style=official #Android android.useAndroidX=true -androidMinSDK=14 +androidMinSDK=21 androidCompileSDK=34 \ No newline at end of file diff --git a/examples/gradle/libs.versions.toml b/examples/gradle/libs.versions.toml index b0375b40..7db82807 100644 --- a/examples/gradle/libs.versions.toml +++ b/examples/gradle/libs.versions.toml @@ -3,14 +3,14 @@ # /!\ Koin in gradle.properties /!\ # Core -kotlin = "1.9.24" -koin = "3.5.6" -koinAnnotations = "1.4.0-RC4" -ksp = "1.9.24-1.0.20" +kotlin = "2.0.20" +koin = "4.0.0" +koinAnnotations = "2.0.0-alpha1" +ksp = "2.0.20-1.0.25" junit = "4.13.2" # Android -agp = "7.4.2" -androidCompat = "1.6.1" +agp = "8.3.2" +androidCompat = "1.7.0" [libraries] koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } diff --git a/examples/gradle/wrapper/gradle-wrapper.properties b/examples/gradle/wrapper/gradle-wrapper.properties index 5f96edd0..f3532bf0 100644 --- a/examples/gradle/wrapper/gradle-wrapper.properties +++ b/examples/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/projects/gradle.properties b/projects/gradle.properties index 85b6a643..9ad38cb4 100644 --- a/projects/gradle.properties +++ b/projects/gradle.properties @@ -7,7 +7,7 @@ org.gradle.parallel=true #Kotlin kotlin.code.style=official #Koin -koinAnnotationsVersion=1.4.0-RC4 +koinAnnotationsVersion=2.0.0-alpha1 #Android android.useAndroidX=true androidMinSDK=14 diff --git a/projects/gradle/libs.versions.toml b/projects/gradle/libs.versions.toml index 5803b7ba..323a1644 100644 --- a/projects/gradle/libs.versions.toml +++ b/projects/gradle/libs.versions.toml @@ -3,9 +3,9 @@ # /!\ Koin in gradle.properties /!\ # Core -kotlin = "1.9.24" -koin = "3.5.6" -ksp = "1.9.24-1.0.20" +kotlin = "2.0.20" +koin = "4.0.0" +ksp = "2.0.20-1.0.25" publish = "2.0.0" dokka = "1.9.10" From ba64ce6378c86d0e9bd8b1e605c226f55f2c6f40 Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Wed, 16 Oct 2024 17:46:11 +0200 Subject: [PATCH 03/10] Bump 2.0.0-Beta1 --- examples/gradle/libs.versions.toml | 2 +- projects/gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/gradle/libs.versions.toml b/examples/gradle/libs.versions.toml index 61b57647..34e531b5 100644 --- a/examples/gradle/libs.versions.toml +++ b/examples/gradle/libs.versions.toml @@ -5,7 +5,7 @@ # Core kotlin = "2.0.20" koin = "4.0.0" -koinAnnotations = "2.0.0-beta1" +koinAnnotations = "2.0.0-Beta1" ksp = "2.0.20-1.0.25" junit = "4.13.2" # Android diff --git a/projects/gradle.properties b/projects/gradle.properties index 2c89de8c..67b41658 100644 --- a/projects/gradle.properties +++ b/projects/gradle.properties @@ -7,7 +7,7 @@ org.gradle.parallel=true #Kotlin kotlin.code.style=official #Koin -koinAnnotationsVersion=2.0.0-beta1 +koinAnnotationsVersion=2.0.0-Beta1 #Android android.useAndroidX=true androidMinSDK=14 From d8639b39ae4b71d27f440579d948ca5ee1320fee Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 18 Nov 2024 16:45:41 +0100 Subject: [PATCH 04/10] Beta2 version --- projects/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/gradle.properties b/projects/gradle.properties index 67b41658..18fd6fa5 100644 --- a/projects/gradle.properties +++ b/projects/gradle.properties @@ -7,7 +7,7 @@ org.gradle.parallel=true #Kotlin kotlin.code.style=official #Koin -koinAnnotationsVersion=2.0.0-Beta1 +koinAnnotationsVersion=2.0.0-Beta2 #Android android.useAndroidX=true androidMinSDK=14 From 2e2dba1d51991e64f3831f97af39bfab49dc3ee7 Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 18 Nov 2024 16:48:07 +0100 Subject: [PATCH 05/10] Generate expect/actual module extension --- examples/gradle/libs.versions.toml | 6 +++--- projects/gradle/libs.versions.toml | 4 ++-- .../compiler/generator/DefaultModuleWriter.kt | 2 +- .../compiler/generator/KoinCodeGenerator.kt | 2 +- .../koin/compiler/generator/ModuleWriter.kt | 20 +++++++++++++++---- .../koin/compiler/metadata/KoinMetaData.kt | 3 ++- .../koin/compiler/scanner/ModuleScanner.kt | 4 +++- 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/examples/gradle/libs.versions.toml b/examples/gradle/libs.versions.toml index 34e531b5..fca701da 100644 --- a/examples/gradle/libs.versions.toml +++ b/examples/gradle/libs.versions.toml @@ -3,10 +3,10 @@ # /!\ Koin in gradle.properties /!\ # Core -kotlin = "2.0.20" +kotlin = "2.0.21" koin = "4.0.0" -koinAnnotations = "2.0.0-Beta1" -ksp = "2.0.20-1.0.25" +koinAnnotations = "2.0.0-Beta2" +ksp = "2.0.21-1.0.28" junit = "4.13.2" # Android agp = "8.3.2" diff --git a/projects/gradle/libs.versions.toml b/projects/gradle/libs.versions.toml index 323a1644..bde38591 100644 --- a/projects/gradle/libs.versions.toml +++ b/projects/gradle/libs.versions.toml @@ -3,9 +3,9 @@ # /!\ Koin in gradle.properties /!\ # Core -kotlin = "2.0.20" +kotlin = "2.0.21" koin = "4.0.0" -ksp = "2.0.20-1.0.25" +ksp = "2.0.21-1.0.28" publish = "2.0.0" dokka = "1.9.10" diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/DefaultModuleWriter.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/DefaultModuleWriter.kt index be1ea723..005fcb8c 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/DefaultModuleWriter.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/DefaultModuleWriter.kt @@ -30,7 +30,7 @@ class DefaultModuleWriter( override val hasExternalDefinitions: Boolean = true override val generateModuleBody: Boolean = generateDefaultModule - override fun writeModuleFooter() { + override fun writeModuleFooter(closeBrackets : Boolean) { writeln(DEFAULT_MODULE_FOOTER) } } \ No newline at end of file diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/KoinCodeGenerator.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/KoinCodeGenerator.kt index 4b5dc15a..b535bd75 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/KoinCodeGenerator.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/KoinCodeGenerator.kt @@ -66,7 +66,7 @@ class KoinCodeGenerator( checkAlreadyGenerated(module) - if (module.alreadyGenerated == false && !module.isExpect){ + if (module.alreadyGenerated == false){ ClassModuleWriter(codeGenerator, resolver, module).writeModule(isComposeViewModelActive) } } diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/ModuleWriter.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/ModuleWriter.kt index 86fac420..3cc7aa77 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/ModuleWriter.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/generator/ModuleWriter.kt @@ -63,7 +63,10 @@ abstract class ModuleWriter( writeEmptyLine() - if (generateModuleBody){ + if (module.isExpect){ + writeModuleFooter(closeBrackets = false) + + } else if (generateModuleBody){ writeModuleFunction() writeModuleInstance() writeModuleIncludes() @@ -197,10 +200,19 @@ abstract class ModuleWriter( private fun generateExternalDefinitionCalls(): String = module.externalDefinitions.joinToString(separator = "\n${TAB}") { "${it.name}()" } - open fun writeModuleFooter() { - writeln(MODULE_FOOTER) + open fun writeModuleFooter(closeBrackets : Boolean = true) { + if (closeBrackets) { + writeln(MODULE_FOOTER) + } + val visibilityString = module.visibility.toSourceString() - writeln("${visibilityString}val $modulePath.module : org.koin.core.module.Module get() = $generatedField") + val actualKeyword = when { + module.isActual -> "actual " + module.isExpect -> "expect " + else -> "" + } + val returnedValue = if (!module.isExpect) " get() = $generatedField" else "" + writeln("${actualKeyword}${visibilityString}val $modulePath.module : org.koin.core.module.Module${returnedValue}") } open fun onFinishWriteModule() { diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/KoinMetaData.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/KoinMetaData.kt index 39203ef3..4d2cccc5 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/KoinMetaData.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/metadata/KoinMetaData.kt @@ -37,7 +37,8 @@ sealed class KoinMetaData { val isCreatedAtStart: Boolean? = null, val visibility: Visibility = Visibility.PUBLIC, val isDefault: Boolean = false, - val isExpect : Boolean = false + val isExpect : Boolean = false, + val isActual : Boolean = false ) : KoinMetaData() { var alreadyGenerated : Boolean? = null diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ModuleScanner.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ModuleScanner.kt index 279cb139..d07a759e 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ModuleScanner.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ModuleScanner.kt @@ -33,6 +33,7 @@ class ModuleScanner( val isCreatedAtStart = getIsCreatedAtStart(annotations) val componentScan = getComponentScan(annotations) val isExpect = declaration.isExpect + val isActual = declaration.isActual val name = "$element" val type = if (declaration.classKind == ClassKind.OBJECT) { @@ -49,7 +50,8 @@ class ModuleScanner( includes = includes.toModuleIncludes(), isCreatedAtStart = isCreatedAtStart, visibility = declaration.getVisibility(), - isExpect = isExpect + isExpect = isExpect, + isActual = isActual ) val annotatedFunctions = declaration.getAllFunctions() From bdac14d0c48b8c1d93d3d7b20275a30c8e9834a3 Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 18 Nov 2024 17:03:42 +0100 Subject: [PATCH 06/10] upgrade to java 17 for tests --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d7b55b55..10afb74b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: 'zulu' - java-version: 11 + java-version: 17 - name: Setup Gradle uses: gradle/gradle-build-action@v2 From ec902b28969bca008452d854c7e6c4ceb3890921 Mon Sep 17 00:00:00 2001 From: Kengo TODA Date: Tue, 10 Dec 2024 20:55:41 +0800 Subject: [PATCH 07/10] format: add spaces before comma --- .../kotlin/org/koin/compiler/verify/KoinTagWriter.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/verify/KoinTagWriter.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/verify/KoinTagWriter.kt index 35671d99..f86a3c23 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/verify/KoinTagWriter.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/verify/KoinTagWriter.kt @@ -30,8 +30,8 @@ class KoinTagWriter(val codeGenerator: CodeGenerator, val logger: KSPLogger) { logger.logging("Koin Tags Generation ...") val tagFileName = "KoinMeta-${hashCode()}" writeTagFile(tagFileName).use { tagFileStream -> - writeModuleTags(moduleList,tagFileStream) - writeDefinitionsTags(allDefinitions,tagFileStream) + writeModuleTags(moduleList, tagFileStream) + writeDefinitionsTags(allDefinitions, tagFileStream) } } } @@ -124,4 +124,4 @@ class KoinTagWriter(val codeGenerator: CodeGenerator, val logger: KSPLogger) { fileStream.appendText("\n$tag") alreadyDeclared.add(tagName) } -} \ No newline at end of file +} From e80db8c352ee7dc17fd5a33b1c194c3cf44ac8ae Mon Sep 17 00:00:00 2001 From: "kerry.bisset" Date: Tue, 17 Dec 2024 07:17:15 -0600 Subject: [PATCH 08/10] fix: Added more documentation fix: Remove the Provided annotation for consideration for the dependency. --- .../org/koin/compiler/scanner/ext/KspExt.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ext/KspExt.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ext/KspExt.kt index 5e140605..d64159c7 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ext/KspExt.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/ext/KspExt.kt @@ -92,7 +92,9 @@ fun List.getParameters(): List KoinMetaData.DefinitionParameter.ParameterInject(name = paramName, isNullable = isNullable, hasDefault = hasDefault) + "${InjectedParam::class.simpleName}" -> KoinMetaData.DefinitionParameter.ParameterInject(name = paramName, isNullable = isNullable, hasDefault = hasDefault,) "${Property::class.simpleName}" -> KoinMetaData.DefinitionParameter.Property(name = paramName, value = annotationValue, isNullable, hasDefault = hasDefault) "${Named::class.simpleName}" -> { val qualifier = firstAnnotation.arguments.getNamed().getValue() - KoinMetaData.DefinitionParameter.Dependency(name = paramName, qualifier = qualifier, isNullable = isNullable, hasDefault = hasDefault, type = resolvedType) + KoinMetaData.DefinitionParameter.Dependency(name = paramName, qualifier = qualifier, isNullable = isNullable, hasDefault = hasDefault, type = resolvedType, alreadyProvided = hasProvidedAnnotation(param)) } "${Qualifier::class.simpleName}" -> { val qualifier = firstAnnotation.arguments.getQualifier().getValue() - KoinMetaData.DefinitionParameter.Dependency(name = paramName, qualifier = qualifier, isNullable = isNullable, hasDefault = hasDefault, type = resolvedType) + KoinMetaData.DefinitionParameter.Dependency(name = paramName, qualifier = qualifier, isNullable = isNullable, hasDefault = hasDefault, type = resolvedType, alreadyProvided = hasProvidedAnnotation(param)) } "${ScopeId::class.simpleName}" -> { val scopeIdValue: String = firstAnnotation.arguments.getScope().getValue() @@ -126,8 +128,7 @@ private fun getParameter(param: KSValueParameter): KoinMetaData.DefinitionParame isLazy -> KoinMetaData.DependencyKind.Lazy else -> KoinMetaData.DependencyKind.Single } - val provided = (annotationName == "${Provided::class.simpleName}") - KoinMetaData.DefinitionParameter.Dependency(name = paramName, hasDefault = hasDefault, kind = kind, isNullable = isNullable, type = resolvedType, alreadyProvided = provided) + KoinMetaData.DefinitionParameter.Dependency(name = paramName, hasDefault = hasDefault, kind = kind, isNullable = isNullable, type = resolvedType, alreadyProvided = hasProvidedAnnotation(param)) } } } @@ -144,3 +145,7 @@ fun String.filterForbiddenKeywords() : String{ if (it in forbiddenKeywords) "`$it`" else it } } + +private fun hasProvidedAnnotation(param: KSValueParameter): Boolean { + return param.annotations.any { it.shortName.asString() == Provided::class.simpleName } +} From 4494bc0408d96c8aa6f36e28afefa05745f99e1f Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 23 Dec 2024 15:25:13 +0100 Subject: [PATCH 09/10] Bump 2.0.0-Beta3 --- projects/gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/gradle.properties b/projects/gradle.properties index 18fd6fa5..d871d13d 100644 --- a/projects/gradle.properties +++ b/projects/gradle.properties @@ -7,7 +7,7 @@ org.gradle.parallel=true #Kotlin kotlin.code.style=official #Koin -koinAnnotationsVersion=2.0.0-Beta2 +koinAnnotationsVersion=2.0.0-Beta3 #Android android.useAndroidX=true androidMinSDK=14 From 29d026679e9fc239569688a814ce23caeee5b6ff Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Mon, 23 Dec 2024 15:32:42 +0100 Subject: [PATCH 10/10] use Koin 4.0.1-RC2 --- examples/gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gradle/libs.versions.toml b/examples/gradle/libs.versions.toml index fca701da..22c51a7b 100644 --- a/examples/gradle/libs.versions.toml +++ b/examples/gradle/libs.versions.toml @@ -4,7 +4,7 @@ # Core kotlin = "2.0.21" -koin = "4.0.0" +koin = "4.0.1-RC2" koinAnnotations = "2.0.0-Beta2" ksp = "2.0.21-1.0.28" junit = "4.13.2"