From a16248b1fc4126db8ff8c3ceb5952fa2ee225b54 Mon Sep 17 00:00:00 2001 From: Jozef Vivodik Date: Wed, 16 Oct 2024 17:46:13 +0200 Subject: [PATCH 1/6] Add componentsScan annotation with application test --- .../org/koin/sample/androidx/di/AppModules.kt | 16 ++++++---- .../src/test/java/AndroidModuleTest.kt | 30 +++++++++++++++++-- .../koin/core/annotation/CoreAnnotations.kt | 10 +++++++ .../compiler/metadata/AnnotationMetadata.kt | 14 +++++++++ .../koin/compiler/metadata/KoinMetaData.kt | 21 ++++++------- .../compiler/scanner/KoinMetaDataScanner.kt | 2 +- .../koin/compiler/scanner/ModuleScanner.kt | 16 +++++----- 7 files changed, 84 insertions(+), 25 deletions(-) diff --git a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt index 5aaa2825..3ad74a72 100644 --- a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt +++ b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt @@ -1,14 +1,20 @@ package org.koin.sample.androidx.di import org.koin.core.annotation.ComponentScan +import org.koin.core.annotation.ComponentsScan import org.koin.core.annotation.Module import org.koin.sample.android.library.CommonModule import org.koin.sample.androidx.repository.RepositoryModule -@Module(includes = [DataModule::class]) -@ComponentScan("org.koin.sample.androidx.app") -class AppModule +//@Module(includes = [DataModule::class]) +//@ComponentScan("org.koin.sample.androidx.app") +//class AppModule +// +//@Module(includes = [CommonModule::class, RepositoryModule::class]) +//@ComponentScan("org.koin.sample.androidx.data") +//internal class DataModule + @Module(includes = [CommonModule::class, RepositoryModule::class]) -@ComponentScan("org.koin.sample.androidx.data") -internal class DataModule \ No newline at end of file +@ComponentsScan(values = ["org.koin.sample.androidx.data", "org.koin.sample.androidx.app"]) +class AppModule \ No newline at end of file diff --git a/examples/android-coffee-maker/src/test/java/AndroidModuleTest.kt b/examples/android-coffee-maker/src/test/java/AndroidModuleTest.kt index 4ffa8a8c..1afd0973 100644 --- a/examples/android-coffee-maker/src/test/java/AndroidModuleTest.kt +++ b/examples/android-coffee-maker/src/test/java/AndroidModuleTest.kt @@ -13,7 +13,7 @@ import org.koin.sample.androidx.app.ScopedStuff import org.koin.sample.androidx.data.DataConsumer import org.koin.sample.androidx.data.MyDataConsumer import org.koin.sample.androidx.di.AppModule -import org.koin.sample.androidx.di.DataModule +//import org.koin.sample.androidx.di.DataModule import org.koin.sample.androidx.repository.RepositoryModule class AndroidModuleTest { @@ -23,7 +23,7 @@ class AndroidModuleTest { val koin = startKoin { modules( // defaultModule, - DataModule().module, + //DataModule().module, RepositoryModule().module, AppModule().module, ) @@ -44,4 +44,30 @@ class AndroidModuleTest { stopKoin() } + + @Test + fun run_all_modules_common() { + val koin = startKoin { + modules( +// defaultModule, + AppModule().module, + ) + }.koin + + val commonRepository = koin.get() + assert(!commonRepository.lazyParam.isInitialized()) + assert(commonRepository.lazyParam != null) + + val scope = koin.createScope() + scope.get() + + assert(koin.getOrNull() != null) + assert(koin.getOrNull() != null) + + assert(koin.getOrNull() != null) + + + stopKoin() + } + } \ No newline at end of file diff --git a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt index a1c4c17b..02ea031f 100644 --- a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt +++ b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt @@ -210,6 +210,16 @@ annotation class Module(val includes: Array> = [], val createdAtStart: @Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) annotation class ComponentScan(val value: String = "") +/** + * Gather definitions declared with Koin definition annotation + * Will scan in current package or with the explicit packages names + * + * @param values: packages to scan + */ +@Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) +annotation class ComponentsScan(val values: Array = []) + + /** * Tag a dependency as already provided by Koin (like DSL declaration, or internals) */ 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..1ab7a134 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 @@ -82,6 +82,20 @@ fun includedModules(annotation: KSAnnotation): List? { return declaredBindingsTypes?.map { it.declaration } } +fun componentsScanValue(annotation: KSAnnotation): List? { + val declaredBindingsTypes = annotation.arguments.firstOrNull { arg -> arg.name?.asString() == "values" }?.value as? List? + + val values = if (declaredBindingsTypes?.isEmpty() == true) listOf("") else declaredBindingsTypes + + return values?.map(KoinMetaData.Module::ComponentScan) +} + +fun componentScanValue(annotation: KSAnnotation): List { + val value = annotation.arguments.firstOrNull { arg -> arg.name?.asString() == "value" }?.value as? String? ?: "" + + return listOf(KoinMetaData.Module.ComponentScan(value)) +} + fun isCreatedAtStart(annotation: KSAnnotation): Boolean? { return annotation.arguments.firstOrNull { it.name?.asString() == "createdAtStart" }?.value as? Boolean } 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..a9175e94 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 @@ -32,7 +32,7 @@ sealed class KoinMetaData { val definitions: MutableList = mutableListOf(), val externalDefinitions: MutableList = mutableListOf(), val type: ModuleType = ModuleType.FIELD, - val componentScan: ComponentScan? = null, + val componentsScan: List = emptyList(), val includes: List? = null, val isCreatedAtStart: Boolean? = null, val visibility: Visibility = Visibility.PUBLIC, @@ -55,15 +55,16 @@ sealed class KoinMetaData { data class ComponentScan(val packageName: String = "") fun acceptDefinition(defPackageName: String): Boolean { - return when { - componentScan == null -> false - componentScan.packageName.isNotEmpty() -> defPackageName.contains( - componentScan.packageName, - ignoreCase = true - ) - - componentScan.packageName.isEmpty() -> defPackageName.contains(packageName, ignoreCase = true) - else -> false + return componentsScan.any { componentScan -> + when { + componentScan.packageName.isNotEmpty() -> defPackageName.contains( + componentScan.packageName, + ignoreCase = true + ) + + componentScan.packageName.isEmpty() -> defPackageName.contains(packageName, ignoreCase = true) + else -> false + } } } diff --git a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/KoinMetaDataScanner.kt b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/KoinMetaDataScanner.kt index 5f885f58..5d9517de 100644 --- a/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/KoinMetaDataScanner.kt +++ b/projects/koin-ksp-compiler/src/jvmMain/kotlin/org/koin/compiler/scanner/KoinMetaDataScanner.kt @@ -135,7 +135,7 @@ class KoinMetaDataScanner( val moduleList = hashMapOf() val emptyScanList = arrayListOf() forEach { module -> - module.componentScan?.let { scan -> + module.componentsScan.forEach { scan -> when (scan.packageName) { "" -> emptyScanList.add(module) else -> if (moduleList.contains(scan.packageName)) { 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..c91ba6cd 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 @@ -31,7 +31,7 @@ class ModuleScanner( val annotations = declaration.annotations val includes = getIncludedModules(annotations) val isCreatedAtStart = getIsCreatedAtStart(annotations) - val componentScan = getComponentScan(annotations) + val componentsScan = getComponentsScan(annotations) val isExpect = declaration.isExpect val name = "$element" @@ -45,7 +45,7 @@ class ModuleScanner( packageName = modulePackage, name = name, type = type, - componentScan = componentScan, + componentsScan = componentsScan, includes = includes.toModuleIncludes(), isCreatedAtStart = isCreatedAtStart, visibility = declaration.getVisibility(), @@ -74,12 +74,14 @@ class ModuleScanner( return module?.let { isCreatedAtStart(it) } } - private fun getComponentScan(annotations: Sequence): KoinMetaData.Module.ComponentScan? { + private fun getComponentsScan(annotations: Sequence): List { val componentScan = annotations.firstOrNull { it.shortName.asString() == "ComponentScan" } - return componentScan?.let { a -> - val value : String = a.arguments.firstOrNull { arg -> arg.name?.asString() == "value" }?.value as? String? ?: "" - KoinMetaData.Module.ComponentScan(value) - } + val componentsScan = annotations.firstOrNull { it.shortName.asString() == "ComponentsScan" } + + val componentScanValue = componentScan?.let(::componentScanValue) ?: emptyList() + val componentsScanValues = componentsScan?.let(::componentsScanValue) ?: emptyList() + + return componentScanValue.plus(componentsScanValues).toSet().toList() } private fun addFunctionDefinition(element: KSAnnotated): KoinMetaData.Definition? { From df7990956debdfc606211dacd829c3d2bbd04bb4 Mon Sep 17 00:00:00 2001 From: Jozef Vivodik Date: Fri, 18 Oct 2024 08:54:29 +0200 Subject: [PATCH 2/6] refactor: replace componentsCan from list to set --- .../org/koin/compiler/metadata/AnnotationMetadata.kt | 4 ++-- .../kotlin/org/koin/compiler/metadata/KoinMetaData.kt | 2 +- .../kotlin/org/koin/compiler/scanner/ModuleScanner.kt | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) 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 1ab7a134..9d67b03f 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 @@ -90,10 +90,10 @@ fun componentsScanValue(annotation: KSAnnotation): List { +fun componentScanValue(annotation: KSAnnotation): KoinMetaData.Module.ComponentScan { val value = annotation.arguments.firstOrNull { arg -> arg.name?.asString() == "value" }?.value as? String? ?: "" - return listOf(KoinMetaData.Module.ComponentScan(value)) + return KoinMetaData.Module.ComponentScan(value) } fun isCreatedAtStart(annotation: KSAnnotation): Boolean? { 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 a9175e94..aa9a1cd7 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 @@ -32,7 +32,7 @@ sealed class KoinMetaData { val definitions: MutableList = mutableListOf(), val externalDefinitions: MutableList = mutableListOf(), val type: ModuleType = ModuleType.FIELD, - val componentsScan: List = emptyList(), + val componentsScan: Set = emptySet(), val includes: List? = null, val isCreatedAtStart: Boolean? = null, val visibility: Visibility = Visibility.PUBLIC, 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 c91ba6cd..fd75e540 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 @@ -74,14 +74,14 @@ class ModuleScanner( return module?.let { isCreatedAtStart(it) } } - private fun getComponentsScan(annotations: Sequence): List { + private fun getComponentsScan(annotations: Sequence): Set { val componentScan = annotations.firstOrNull { it.shortName.asString() == "ComponentScan" } val componentsScan = annotations.firstOrNull { it.shortName.asString() == "ComponentsScan" } - val componentScanValue = componentScan?.let(::componentScanValue) ?: emptyList() - val componentsScanValues = componentsScan?.let(::componentsScanValue) ?: emptyList() - - return componentScanValue.plus(componentsScanValues).toSet().toList() + return buildSet { + componentScan?.let(::componentScanValue)?.let(::add) + componentsScan?.let(::componentsScanValue)?.let(::addAll) + } } private fun addFunctionDefinition(element: KSAnnotated): KoinMetaData.Definition? { From a931948b13df46d0cc696ce70ea016a52c28b147 Mon Sep 17 00:00:00 2001 From: Jozef V <10vivodik@gmail.com> Date: Thu, 26 Dec 2024 18:08:11 +0100 Subject: [PATCH 3/6] Remove multiple @ComponentScan annotations --- .../org/koin/sample/androidx/di/AppModules.kt | 3 +-- .../org/koin/core/annotation/CoreAnnotations.kt | 17 ++++------------- .../compiler/metadata/AnnotationMetadata.kt | 8 +------- .../org/koin/compiler/scanner/ModuleScanner.kt | 7 +------ 4 files changed, 7 insertions(+), 28 deletions(-) diff --git a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt index 3ad74a72..5c21d7a6 100644 --- a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt +++ b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt @@ -1,7 +1,6 @@ package org.koin.sample.androidx.di import org.koin.core.annotation.ComponentScan -import org.koin.core.annotation.ComponentsScan import org.koin.core.annotation.Module import org.koin.sample.android.library.CommonModule import org.koin.sample.androidx.repository.RepositoryModule @@ -16,5 +15,5 @@ import org.koin.sample.androidx.repository.RepositoryModule @Module(includes = [CommonModule::class, RepositoryModule::class]) -@ComponentsScan(values = ["org.koin.sample.androidx.data", "org.koin.sample.androidx.app"]) +@ComponentScan(values = ["org.koin.sample.androidx.data", "org.koin.sample.androidx.app"]) class AppModule \ No newline at end of file diff --git a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt index 02ea031f..2aa4791a 100644 --- a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt +++ b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt @@ -202,23 +202,14 @@ annotation class PropertyValue(val value: String) annotation class Module(val includes: Array> = [], val createdAtStart: Boolean = false) /** - * Gather definitions declared with Koin definition annotation - * Will scan in current package or with the explicit package name - * - * @param value: package to scan - */ -@Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) -annotation class ComponentScan(val value: String = "") - -/** - * Gather definitions declared with Koin definition annotation - * Will scan in current package or with the explicit packages names + * Gather definitions declared with Koin definition annotation. + * Will scan in current package or with the explicit packages names. + * For scan current package use empty values array or empty string. * * @param values: packages to scan */ @Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) -annotation class ComponentsScan(val values: Array = []) - +annotation class ComponentScan(val values: Array = [""]) /** * Tag a dependency as already provided by Koin (like DSL declaration, or internals) 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 9d67b03f..14520af4 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 @@ -87,13 +87,7 @@ fun componentsScanValue(annotation: KSAnnotation): List arg.name?.asString() == "value" }?.value as? String? ?: "" - - return KoinMetaData.Module.ComponentScan(value) + return values?.map { KoinMetaData.Module.ComponentScan(it.trim()) } } fun isCreatedAtStart(annotation: KSAnnotation): Boolean? { 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 fd75e540..c6e58540 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 @@ -76,12 +76,7 @@ class ModuleScanner( private fun getComponentsScan(annotations: Sequence): Set { val componentScan = annotations.firstOrNull { it.shortName.asString() == "ComponentScan" } - val componentsScan = annotations.firstOrNull { it.shortName.asString() == "ComponentsScan" } - - return buildSet { - componentScan?.let(::componentScanValue)?.let(::add) - componentsScan?.let(::componentsScanValue)?.let(::addAll) - } + return componentScan?.let(::componentsScanValue)?.toSet() ?: emptySet() } private fun addFunctionDefinition(element: KSAnnotated): KoinMetaData.Definition? { From d949e02e14c3558de9a8246a46c21fab31717dc1 Mon Sep 17 00:00:00 2001 From: Jozef V <10vivodik@gmail.com> Date: Tue, 21 Jan 2025 12:24:49 +0100 Subject: [PATCH 4/6] Remove default empty string from componentScan annotation --- .../kotlin/org/koin/core/annotation/CoreAnnotations.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt index 2aa4791a..9ed950ca 100644 --- a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt +++ b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt @@ -209,7 +209,7 @@ annotation class Module(val includes: Array> = [], val createdAtStart: * @param values: packages to scan */ @Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) -annotation class ComponentScan(val values: Array = [""]) +annotation class ComponentScan(val values: Array = []) /** * Tag a dependency as already provided by Koin (like DSL declaration, or internals) From 7958e4f510ef0515e03b344ca1fb1ded5fd36aa9 Mon Sep 17 00:00:00 2001 From: Jozef V <10vivodik@gmail.com> Date: Tue, 21 Jan 2025 12:25:39 +0100 Subject: [PATCH 5/6] Use new componentScan annotation with array in CoffeeAppModule --- .../src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt b/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt index 084346e7..165c6d6a 100644 --- a/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt +++ b/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt @@ -10,7 +10,7 @@ import org.koin.example.test.CoffeeMakerTesterTest import org.koin.example.test.CoffeeMakerTesterTestImpl @Module -@ComponentScan("org.koin.example.coffee") +@ComponentScan(values = ["org.koin.example.coffee"]) class CoffeeAppModule { @Single @@ -18,7 +18,7 @@ class CoffeeAppModule { } @Module -@ComponentScan("org.koin.example.test") +@ComponentScan(values = ["org.koin.example.test"]) class CoffeeTesterModule { @Single From 89450a7b8e284d9c610a813ce987825acb9bbc43 Mon Sep 17 00:00:00 2001 From: Jozef V <10vivodik@gmail.com> Date: Tue, 28 Jan 2025 19:34:25 +0100 Subject: [PATCH 6/6] Refactor @ComponentScan annotation value property to vararg --- .../src/main/java/org/koin/sample/androidx/di/AppModules.kt | 2 +- .../src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt | 4 ++-- .../kotlin/org/koin/core/annotation/CoreAnnotations.kt | 6 +++--- .../kotlin/org/koin/compiler/metadata/AnnotationMetadata.kt | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt index 60c537f2..3aba3eba 100644 --- a/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt +++ b/examples/android-coffee-maker/src/main/java/org/koin/sample/androidx/di/AppModules.kt @@ -16,5 +16,5 @@ import org.koin.sample.clients.ClientModule @Module(includes = [CommonModule::class, ClientModule::class, RepositoryModule::class]) -@ComponentScan(values = ["org.koin.sample.androidx.data", "org.koin.sample.androidx.app"]) +@ComponentScan("org.koin.sample.androidx.data", "org.koin.sample.androidx.app") class AppModule diff --git a/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt b/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt index 165c6d6a..d102b680 100644 --- a/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt +++ b/examples/coffee-maker/src/main/kotlin/org/koin/example/di/CoffeeAppModule.kt @@ -10,7 +10,7 @@ import org.koin.example.test.CoffeeMakerTesterTest import org.koin.example.test.CoffeeMakerTesterTestImpl @Module -@ComponentScan(values = ["org.koin.example.coffee"]) +@ComponentScan("org.koin.example.coffee") class CoffeeAppModule { @Single @@ -18,7 +18,7 @@ class CoffeeAppModule { } @Module -@ComponentScan(values = ["org.koin.example.test"]) +@ComponentScan(value = ["org.koin.example.test"]) class CoffeeTesterModule { @Single diff --git a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt index 2775a9d2..f0679f49 100644 --- a/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt +++ b/projects/koin-annotations/src/commonMain/kotlin/org/koin/core/annotation/CoreAnnotations.kt @@ -204,12 +204,12 @@ annotation class Module(val includes: Array> = [], val createdAtStart: /** * Gather definitions declared with Koin definition annotation. * Will scan in current package or with the explicit packages names. - * For scan current package use empty values array or empty string. + * For scan current package use empty value array or empty string. * - * @param values: packages to scan + * @param value: packages to scan */ @Target(AnnotationTarget.CLASS, AnnotationTarget.FIELD) -annotation class ComponentScan(val values: Array = []) +annotation class ComponentScan(vararg val value: String = []) /** * Tag a dependency as already provided by Koin (like DSL declaration, or internals) 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 0036f10b..29640b08 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 @@ -82,7 +82,7 @@ fun includedModules(annotation: KSAnnotation): List? { } fun componentsScanValue(annotation: KSAnnotation): List? { - val declaredBindingsTypes = annotation.arguments.firstOrNull { arg -> arg.name?.asString() == "values" }?.value as? List? + val declaredBindingsTypes = annotation.arguments.firstOrNull { arg -> arg.name?.asString() == "value" }?.value as? List? val values = if (declaredBindingsTypes?.isEmpty() == true) listOf("") else declaredBindingsTypes