From a480fe3647d5ca687c3e7c04f553598b50825c3e Mon Sep 17 00:00:00 2001 From: Romain Boisselle Date: Tue, 29 Nov 2022 10:52:06 +0100 Subject: [PATCH] Add Gradle Version catalog + upgrade dependencies (#424) --- .../build.gradle.kts | 2 +- .../build.gradle.kts | 10 ++-- .../android/x/viewmodel/savedstate/DIAware.kt | 17 +++--- .../build.gradle.kts | 8 +-- .../kodein/di/android/x/viewmodel/DIAware.kt | 16 +++--- .../build.gradle.kts | 2 +- .../java/org/kodein/di/android/x/scopes.kt | 33 +++++++----- .../build.gradle.kts | 4 +- .../build.gradle.kts | 12 ++--- .../build.gradle.kts | 12 ++--- .../build.gradle.kts | 18 +++---- gradle/libs.versions.toml | 54 +++++++++++++++++++ kodein-di-conf/build.gradle.kts | 4 +- kodein-di-jxinject-jvm/build.gradle.kts | 2 +- kodein-di/build.gradle.kts | 2 +- test-utils/build.gradle.kts | 17 ++---- 16 files changed, 128 insertions(+), 85 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/framework/android/kodein-di-framework-android-support/build.gradle.kts b/framework/android/kodein-di-framework-android-support/build.gradle.kts index 41f02522..0a9ebb94 100644 --- a/framework/android/kodein-di-framework-android-support/build.gradle.kts +++ b/framework/android/kodein-di-framework-android-support/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { api(project(":framework:android:kodein-di-framework-android-core")) - implementation("com.android.support:appcompat-v7:28.0.0") + implementation(libs.android.appcompat) } kodeinUpload { diff --git a/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/build.gradle.kts b/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/build.gradle.kts index 83ee6b67..bd65d42b 100644 --- a/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/build.gradle.kts +++ b/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/build.gradle.kts @@ -4,11 +4,11 @@ plugins { dependencies { api(project(":framework:android:kodein-di-framework-android-x")) - implementation("androidx.appcompat:appcompat:1.3.1") - implementation("androidx.fragment:fragment-ktx:1.3.6") - val lifecycleVersion = "2.3.0" - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") - implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycleVersion") + + implementation(libs.android.x.appcompat) + implementation(libs.android.x.fragment.ktx) + implementation(libs.android.x.lifecycle.viewmodel.ktx) + implementation(libs.android.x.lifecycle.viewmodel.savedstate) } kodeinUpload { diff --git a/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/src/main/java/org/kodein/di/android/x/viewmodel/savedstate/DIAware.kt b/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/src/main/java/org/kodein/di/android/x/viewmodel/savedstate/DIAware.kt index 45aa6a87..65c0ba71 100644 --- a/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/src/main/java/org/kodein/di/android/x/viewmodel/savedstate/DIAware.kt +++ b/framework/android/kodein-di-framework-android-x-viewmodel-savedstate/src/main/java/org/kodein/di/android/x/viewmodel/savedstate/DIAware.kt @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.createViewModelLazy import androidx.lifecycle.* +import androidx.lifecycle.viewmodel.CreationExtras import org.kodein.di.DI import org.kodein.di.DIAware import org.kodein.di.direct @@ -74,13 +75,15 @@ inline fun F.viewModelWithSavedStateHandle( tag: Any? = null, ): Lazy where F : Fragment, F : DIAware, VM : ViewModel { return createViewModelLazy( - VM::class, - { ownerProducer().viewModelStore}, - { object : AbstractSavedStateViewModelFactory(this, arguments) { - override fun create(key: String, modelClass: Class, handle: SavedStateHandle): T { - val factory = direct.Factory(generic(), generic(), tag) - return factory(handle) as T + viewModelClass = VM::class, + storeProducer = { ownerProducer().viewModelStore}, + factoryProducer = { + object : AbstractSavedStateViewModelFactory(this, arguments) { + override fun create(key: String, modelClass: Class, handle: SavedStateHandle): T { + val factory = direct.Factory(generic(), generic(), tag) + return factory(handle) as T + } } - } } + } ) } diff --git a/framework/android/kodein-di-framework-android-x-viewmodel/build.gradle.kts b/framework/android/kodein-di-framework-android-x-viewmodel/build.gradle.kts index 53cc2f88..357a3de1 100644 --- a/framework/android/kodein-di-framework-android-x-viewmodel/build.gradle.kts +++ b/framework/android/kodein-di-framework-android-x-viewmodel/build.gradle.kts @@ -4,10 +4,10 @@ plugins { dependencies { api(project(":framework:android:kodein-di-framework-android-x")) - implementation("androidx.appcompat:appcompat:1.3.1") - implementation("androidx.fragment:fragment-ktx:1.3.6") - val lifecycleVersion = "2.3.0" - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") + + implementation(libs.android.x.appcompat) + implementation(libs.android.x.fragment.ktx) + implementation(libs.android.x.lifecycle.viewmodel.ktx) } kodeinUpload { diff --git a/framework/android/kodein-di-framework-android-x-viewmodel/src/main/java/org/kodein/di/android/x/viewmodel/DIAware.kt b/framework/android/kodein-di-framework-android-x-viewmodel/src/main/java/org/kodein/di/android/x/viewmodel/DIAware.kt index 66e2d72f..0c5a751e 100644 --- a/framework/android/kodein-di-framework-android-x-viewmodel/src/main/java/org/kodein/di/android/x/viewmodel/DIAware.kt +++ b/framework/android/kodein-di-framework-android-x-viewmodel/src/main/java/org/kodein/di/android/x/viewmodel/DIAware.kt @@ -74,13 +74,15 @@ inline fun F.viewModel( tag: Any? = null, ): Lazy where F : Fragment, F : DIAware, VM : ViewModel { return createViewModelLazy( - VM::class, - { ownerProducer().viewModelStore }, - { object : ViewModelProvider.Factory { - override fun create(modelClass: Class): T { - val vmProvider = direct.provider(tag) - return vmProvider() as T + viewModelClass = VM::class, + storeProducer = { ownerProducer().viewModelStore }, + factoryProducer = { + object : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + val vmProvider = direct.provider(tag) + return vmProvider() as T + } } - } } + } ) } diff --git a/framework/android/kodein-di-framework-android-x/build.gradle.kts b/framework/android/kodein-di-framework-android-x/build.gradle.kts index 201e7fe1..d3262c69 100644 --- a/framework/android/kodein-di-framework-android-x/build.gradle.kts +++ b/framework/android/kodein-di-framework-android-x/build.gradle.kts @@ -5,7 +5,7 @@ plugins { dependencies { api(project(":framework:android:kodein-di-framework-android-core")) - implementation("androidx.appcompat:appcompat:1.3.0") + implementation(libs.android.x.appcompat) } kodeinUpload { diff --git a/framework/android/kodein-di-framework-android-x/src/main/java/org/kodein/di/android/x/scopes.kt b/framework/android/kodein-di-framework-android-x/src/main/java/org/kodein/di/android/x/scopes.kt index 7a1aa17d..240fcf0e 100644 --- a/framework/android/kodein-di-framework-android-x/src/main/java/org/kodein/di/android/x/scopes.kt +++ b/framework/android/kodein-di-framework-android-x/src/main/java/org/kodein/di/android/x/scopes.kt @@ -1,39 +1,46 @@ package org.kodein.di.android.x +import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.OnLifecycleEvent import org.kodein.di.bindings.* import org.kodein.di.internal.synchronizedIfNull import java.util.* -open class AndroidLifecycleScope private constructor(private val newRegistry: () -> ScopeRegistry) : Scope { +open class AndroidLifecycleScope private constructor( + private val newRegistry: () -> ScopeRegistry +) : Scope, DefaultLifecycleObserver { - companion object multiItem: AndroidLifecycleScope(::StandardScopeRegistry) + companion object multiItem : AndroidLifecycleScope(::StandardScopeRegistry) - object singleItem: AndroidLifecycleScope(::SingleItemScopeRegistry) + object singleItem : AndroidLifecycleScope(::SingleItemScopeRegistry) private val map = HashMap() override fun getRegistry(context: LifecycleOwner): ScopeRegistry { return synchronizedIfNull( - lock = map, + lock = map, predicate = { map[context] }, ifNotNull = { it }, ifNull = { val registry = newRegistry() map[context] = registry - context.lifecycle.addObserver(object : LifecycleObserver { - @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) - fun onDestroy() { - context.lifecycle.removeObserver(this) - registry.clear() - map.remove(context) + context.lifecycle.addObserver( + LifecycleEventObserver { _, event -> + if (event == Lifecycle.Event.ON_DESTROY) { + context.lifecycle.removeObserver(this) + registry.clear() + map.remove(context) + } } - }) + ) registry } ) } + + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + } } diff --git a/framework/compose/kodein-di-framework-compose/build.gradle.kts b/framework/compose/kodein-di-framework-compose/build.gradle.kts index 7bc1e76f..bc346f61 100644 --- a/framework/compose/kodein-di-framework-compose/build.gradle.kts +++ b/framework/compose/kodein-di-framework-compose/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("org.jetbrains.compose") version "1.2.1" id("org.kodein.library.mpp-with-android") + alias(libs.plugins.compose) } kodein { @@ -17,7 +17,7 @@ kodein { add(kodeinTargets.jvm.android) { main.dependencies { api(project(":framework:android:kodein-di-framework-android-x")) - api("androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1") + api(libs.android.x.lifecycle.viewmodel.compose) } } diff --git a/framework/ktor/kodein-di-framework-ktor-server-controller-jvm/build.gradle.kts b/framework/ktor/kodein-di-framework-ktor-server-controller-jvm/build.gradle.kts index 593812ff..bcd97bed 100644 --- a/framework/ktor/kodein-di-framework-ktor-server-controller-jvm/build.gradle.kts +++ b/framework/ktor/kodein-di-framework-ktor-server-controller-jvm/build.gradle.kts @@ -1,5 +1,3 @@ -val ktorVersion = "2.0.0" - plugins { id("org.kodein.library.jvm") } @@ -9,13 +7,11 @@ repositories { } dependencies { - fun ktor(module: String = "", version: String = ktorVersion) = "io.ktor:ktor$module:$version" - api(project(":framework:ktor:kodein-di-framework-ktor-server-jvm")) - - implementation(ktor("-server-core")) - testImplementation(ktor("-server-tests")) - testImplementation(ktor("-server-default-headers")) + + implementation(libs.ktor.server.core) + testImplementation(libs.ktor.test.server) + testImplementation(libs.ktor.test.server.default.headers) } kodeinUpload { diff --git a/framework/ktor/kodein-di-framework-ktor-server-jvm/build.gradle.kts b/framework/ktor/kodein-di-framework-ktor-server-jvm/build.gradle.kts index b69e189e..b6c727c3 100644 --- a/framework/ktor/kodein-di-framework-ktor-server-jvm/build.gradle.kts +++ b/framework/ktor/kodein-di-framework-ktor-server-jvm/build.gradle.kts @@ -1,5 +1,3 @@ -val ktorVersion = "2.0.0" - plugins { id("org.kodein.library.jvm") } @@ -9,13 +7,11 @@ repositories { } dependencies { - fun ktor(module: String = "", version: String = ktorVersion) = "io.ktor:ktor$module:$version" - api(project(":kodein-di")) - implementation(ktor("-server-core")) - implementation(ktor("-server-sessions")) - testImplementation(ktor("-server-tests")) - testImplementation(ktor("-server-default-headers")) + implementation(libs.ktor.server.core) + implementation(libs.ktor.server.sessions) + testImplementation(libs.ktor.test.server) + testImplementation(libs.ktor.test.server.default.headers) } kodeinUpload { diff --git a/framework/tornadofx/kodein-di-framework-tornadofx-jvm/build.gradle.kts b/framework/tornadofx/kodein-di-framework-tornadofx-jvm/build.gradle.kts index 91c490b2..da84c445 100644 --- a/framework/tornadofx/kodein-di-framework-tornadofx-jvm/build.gradle.kts +++ b/framework/tornadofx/kodein-di-framework-tornadofx-jvm/build.gradle.kts @@ -2,11 +2,11 @@ import org.jetbrains.kotlin.gradle.tasks.* plugins { id("org.kodein.library.jvm") - id("org.openjfx.javafxplugin") version "0.0.7" + alias(libs.plugins.openjfx) } javafx { - version = "12.0.1" + version = libs.versions.javafx.version.get() modules("javafx.controls") } @@ -14,22 +14,16 @@ tasks.withType { kotlinOptions.jvmTarget = "1.8" } -// TODO to be remove in 7.0 in benefit of kodein-internal-gradle 1.8 source compatibility -project.withConvention(JavaPluginConvention::class) { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - tasks.withType { useJUnitPlatform() } dependencies { api(project(":kodein-di")) - implementation("no.tornado:tornadofx:1.7.20") - implementation("org.jetbrains.kotlin:kotlin-reflect:${kodeinVersions.kotlin}") - testImplementation("org.testfx:testfx-core:4.0.4-alpha") - testImplementation("org.junit.jupiter:junit-jupiter:5.6.0") + implementation(libs.tornadofx) + implementation(libs.kotlin.reflect) + testImplementation(libs.testfx) + testImplementation(libs.junit.jupiter) } kodeinUpload { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..c3782427 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,54 @@ +[versions] +# Core +kaverit-version = "2.2.1" +kotlin-version = "1.7.20" +# Android +android-appcompat-version = "28.0.0" +androidx-appcompat-version = "1.5.1" +androidx-fragment-version = "1.5.4" +androidx-lifecycle-version = "2.5.1" +# Compose +compose-version = "1.2.1" +# Ktor +ktor-version = "2.1.3" +# JxInject +javax-inject-version = "1" +# TornadoFX +openjfx-version = "0.0.7" +javafx-version = "12.0.1" +tornadofx-version = "1.7.20" +testfx-version = "4.0.4-alpha" +# Test +junit-version = "4.13.2" +junit-jupiter-version = "5.6.0" + +[libraries] +# Core +kosi-kaverit = { module = "org.kodein.type:kaverit", version.ref = "kaverit-version" } +# Android +android-appcompat = { module = "com.android.support:appcompat-v7", version.ref = "android-appcompat-version" } +android-x-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat-version" } +android-x-fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "androidx-fragment-version" } +android-x-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidx-lifecycle-version" } +android-x-lifecycle-viewmodel-savedstate = { module = "androidx.lifecycle:lifecycle-viewmodel-savedstate", version.ref = "androidx-lifecycle-version" } +android-x-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle-version" } +# Ktor +ktor-server-core = { module = "io.ktor:ktor-server-core", version.ref = "ktor-version" } +ktor-server-sessions = { module = "io.ktor:ktor-server-sessions", version.ref = "ktor-version" } +ktor-test-server = { module = "io.ktor:ktor-server-tests", version.ref = "ktor-version" } +ktor-test-server-default-headers = { module = "io.ktor:ktor-server-default-headers", version.ref = "ktor-version" } +# JxInject +javax-inject = { module = "javax.inject:javax.inject", version.ref = "javax-inject-version" } +# TornadoFX +tornadofx = { module = "no.tornado:tornadofx", version.ref = "tornadofx-version" } +kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin-version" } +testfx = { module = "org.testfx:testfx-core", version.ref = "testfx-version" } +junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter-version" } +# Test +kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin-version" } +kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin-version" } +junit = { module = "junit:junit", version.ref = "junit-version" } + +[plugins] +openjfx = { id = "org.openjfx.javafxplugin", version.ref = "openjfx-version" } +compose = { id = "org.jetbrains.compose", version.ref = "compose-version" } \ No newline at end of file diff --git a/kodein-di-conf/build.gradle.kts b/kodein-di-conf/build.gradle.kts index ca4fb493..b95d4046 100644 --- a/kodein-di-conf/build.gradle.kts +++ b/kodein-di-conf/build.gradle.kts @@ -27,6 +27,6 @@ kodein { } kodeinUpload { - name = "Kodein-Conf" - description = "Kodein that can be configured / mutated" + name = "Kodein-JxInject" + description = "Kodein that can be use with JSR-330: Using reflexivity to auto-inject" } diff --git a/kodein-di-jxinject-jvm/build.gradle.kts b/kodein-di-jxinject-jvm/build.gradle.kts index 6905fa91..b69ff8ab 100644 --- a/kodein-di-jxinject-jvm/build.gradle.kts +++ b/kodein-di-jxinject-jvm/build.gradle.kts @@ -4,7 +4,7 @@ plugins { dependencies { api(project(":kodein-di")) - api("javax.inject:javax.inject:1") + api(libs.javax.inject) testImplementation(project(":test-utils")) } diff --git a/kodein-di/build.gradle.kts b/kodein-di/build.gradle.kts index 809f5176..757d83a1 100644 --- a/kodein-di/build.gradle.kts +++ b/kodein-di/build.gradle.kts @@ -7,7 +7,7 @@ kodein { common { main.dependencies { - api("org.kodein.type:kaverit:2.2.1") + api(libs.kosi.kaverit) } test.dependencies { implementation(project(":test-utils")) diff --git a/test-utils/build.gradle.kts b/test-utils/build.gradle.kts index 35ce4159..9a675fb5 100644 --- a/test-utils/build.gradle.kts +++ b/test-utils/build.gradle.kts @@ -1,4 +1,3 @@ - plugins { id("org.kodein.mpp") } @@ -7,25 +6,17 @@ kodein { kotlin { common.main.dependencies { - api("org.jetbrains.kotlin:kotlin-test-common") - api("org.jetbrains.kotlin:kotlin-test-annotations-common") -// api(project(":kodein-di")) + api(libs.kotlin.test) } add(kodeinTargets.jvm.jvm) { main.dependencies { - api("org.jetbrains.kotlin:kotlin-test") - api("org.jetbrains.kotlin:kotlin-test-junit") - api("junit:junit:4.12") + api(libs.kotlin.test.junit) + api(libs.junit) } } - add(kodeinTargets.js.js) { - main.dependencies { - api("org.jetbrains.kotlin:kotlin-test-js") - api("org.jetbrains.kotlin:kotlin-stdlib-js") - } - } + add(kodeinTargets.js.js) add(kodeinTargets.native.all)