diff --git a/.gitignore b/.gitignore
index df543ce..48de9f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,9 @@
#
# Therefore, instructions below are superset of instructions required for all the projects.
+# Temporary output of AI agents.
+.output
+
# `jenv` local configuration.
.java-version
@@ -55,12 +58,18 @@
!.idea/codeStyles/
!.idea/copyright/
+# Ignore IDEA config files under `tests`
+/tests/.idea/**
+
# Gradle interim configs
**/.gradle/**
# Temp directory for Gradle TestKit runners
**/.gradle-test-kit/**
+# Integration test log files
+/tests/_out/**
+
# Generated source code
**/generated/**
**/*.pb.dart
@@ -68,6 +77,9 @@
**/*.pbserver.dart
**/*.pbjson.dart
+# Generated source code with custom path under `tests`
+/tests/**/proto-gen/**
+
# Gradle build files
**/build/**
!**/src/**/build/**
diff --git a/.idea/dictionaries/common.xml b/.idea/dictionaries/common.xml
index 5e2d460..d1c3a7b 100644
--- a/.idea/dictionaries/common.xml
+++ b/.idea/dictionaries/common.xml
@@ -25,6 +25,7 @@
hohpe
idempotency
jspecify
+ kotest
lempira
liskov
melnik
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 698f5ea..0bd1d9d 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -146,13 +146,11 @@
-
-
@@ -194,7 +192,6 @@
-
@@ -258,18 +255,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
@@ -762,13 +747,10 @@
-
-
-
@@ -802,7 +784,6 @@
-
@@ -823,7 +804,6 @@
-
@@ -920,4 +900,4 @@
-
+
\ No newline at end of file
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index c515672..0dbadfe 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -3,7 +3,11 @@
+
+
+
+
-
+
\ No newline at end of file
diff --git a/.junie/guidelines.md b/.junie/guidelines.md
new file mode 100644
index 0000000..459e28e
--- /dev/null
+++ b/.junie/guidelines.md
@@ -0,0 +1,21 @@
+# Guidelines for Junie and AI Agent from JetBrains
+
+Read the `../.agents/_TOC.md` file to understand:
+ - the agent responsibilities,
+ - project overview,
+ - coding guidelines,
+ - other relevant topics.
+
+Also follow the Junie-specific rules described below.
+
+## Junie Assistance Tips
+
+When working with Junie AI on the Spine Tool-Base project:
+
+1. **Project Navigation**: Use `search_project` to find relevant files and code segments.
+2. **Code Understanding**: Request file structure with `get_file_structure` before editing.
+3. **Code Editing**: Make minimal changes with `search_replace` to maintain project consistency.
+4. **Testing**: Verify changes with `run_test` on relevant test files.
+5. **Documentation**: Follow KDoc style for documentation.
+6. **Kotlin Idioms**: Prefer Kotlin-style solutions over Java-style approaches.
+7. **Version Updates**: Remember to update `version.gradle.kts` for PRs.
diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts
index b41bfb4..4048039 100644
--- a/buildSrc/build.gradle.kts
+++ b/buildSrc/build.gradle.kts
@@ -24,6 +24,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import org.jetbrains.kotlin.gradle.dsl.JvmTarget
+
/**
* This script uses two declarations of the constant [licenseReportVersion] because
* currently there is no way to define a constant _before_ a build script of `buildSrc`.
@@ -73,7 +75,7 @@ val grGitVersion = "4.1.1"
* This version may change from the [version of Kotlin][io.spine.dependency.lib.Kotlin.version]
* used by the project.
*/
-val kotlinEmbeddedVersion = "2.1.21"
+val kotlinEmbeddedVersion = "2.2.20"
/**
* The version of Guava used in `buildSrc`.
@@ -140,7 +142,7 @@ val koverVersion = "0.9.1"
*
* `7.1.2` is the last version compatible with Gradle 7.x. Newer versions require Gradle v8.x.
*
- * @see Shadow Plugin releases
+ * @see Shadow Plugin releases
*/
val shadowVersion = "8.3.6"
@@ -158,6 +160,17 @@ configurations.all {
}
}
+java {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+}
+
+kotlin {
+ compilerOptions {
+ jvmTarget.set(JvmTarget.JVM_17)
+ }
+}
+
dependencies {
api("com.github.jk1:gradle-license-report:$licenseReportVersion")
api(platform("org.jetbrains.kotlin:kotlin-bom:$kotlinEmbeddedVersion"))
diff --git a/buildSrc/src/main/kotlin/BuildExtensions.kt b/buildSrc/src/main/kotlin/BuildExtensions.kt
index 4654e36..e92238c 100644
--- a/buildSrc/src/main/kotlin/BuildExtensions.kt
+++ b/buildSrc/src/main/kotlin/BuildExtensions.kt
@@ -31,15 +31,18 @@ import io.spine.dependency.build.GradleDoctor
import io.spine.dependency.build.Ksp
import io.spine.dependency.build.PluginPublishPlugin
import io.spine.dependency.lib.Protobuf
+import io.spine.dependency.local.Compiler
+import io.spine.dependency.local.CoreJvmCompiler
import io.spine.dependency.local.McJava
-import io.spine.dependency.local.ProtoData
import io.spine.dependency.local.ProtoTap
import io.spine.dependency.test.Kotest
import io.spine.dependency.test.Kover
import io.spine.gradle.repo.standardToSpineSdk
import org.gradle.api.Project
import org.gradle.api.Task
+import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.tasks.JavaExec
+import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.ScriptHandlerScope
import org.gradle.plugin.use.PluginDependenciesSpec
import org.gradle.plugin.use.PluginDependencySpec
@@ -79,6 +82,12 @@ fun ScriptHandlerScope.standardSpineSdkRepositories() {
val ScriptHandlerScope.protobuf: Protobuf
get() = Protobuf
+/**
+ * Shortcut to [CoreJvmCompiler] dependency object for using under `buildScript`.
+ */
+val ScriptHandlerScope.coreJvmCompiler: CoreJvmCompiler
+ get() = CoreJvmCompiler
+
/**
* Shortcut to [McJava] dependency object for using under `buildScript`.
*/
@@ -86,30 +95,30 @@ val ScriptHandlerScope.mcJava: McJava
get() = McJava
/**
- * Shortcut to [McJava] dependency object.
+ * Shortcut to [CoreJvmCompiler] dependency object.
*
* This plugin is not published to Gradle Portal and cannot be applied directly to a project.
* Firstly, it should be put to buildscript's classpath and then applied by ID only.
*/
-val PluginDependenciesSpec.mcJava: McJava
- get() = McJava
+val PluginDependenciesSpec.coreJvmCompiler: CoreJvmCompiler
+ get() = CoreJvmCompiler
/**
- * Shortcut to [ProtoData] dependency object for using under `buildscript`.
+ * Shortcut to [Compiler] dependency object for using under `buildscript`.
*/
-val ScriptHandlerScope.protoData: ProtoData
- get() = ProtoData
+val ScriptHandlerScope.spineCompiler: Compiler
+ get() = Compiler
/**
- * Shortcut to [ProtoData] dependency object.
+ * Shortcut to [Compiler] dependency object.
*
* This plugin is published at Gradle Plugin Portal.
* But when used in a pair with [mcJava], it cannot be applied directly to a project.
- * It is so, because [mcJava] uses [protoData] as its dependency.
+ * It is so, because [mcJava] uses [spineCompiler] as its dependency.
* And the buildscript's classpath ends up with both of them.
*/
-val PluginDependenciesSpec.protoData: ProtoData
- get() = ProtoData
+val PluginDependenciesSpec.spineCompiler: Compiler
+ get() = Compiler
/**
* Provides shortcuts for applying plugins from our dependency objects.
@@ -162,11 +171,11 @@ val PluginDependenciesSpec.`plugin-publish`: PluginDependencySpec
/**
* Configures the dependencies between third-party Gradle tasks
- * and those defined via ProtoData and Spine Model Compiler.
+ * and those defined via the Spine Compiler and its plugins.
*
* It is required to avoid warnings in build logs, detecting the undeclared
* usage of Spine-specific task output by other tasks,
- * e.g., the output of `launchProtoData` is used by `compileKotlin`.
+ * e.g., the output of `launchSpineCompiler` is used by `compileKotlin`.
*/
@Suppress("unused")
fun Project.configureTaskDependencies() {
@@ -297,31 +306,58 @@ fun Project.setRemoteDebug(taskName: String, enabled: Boolean = true) {
}
/**
- * Sets remote debug options for the `launchProtoData` task.
+ * Sets remote debug options for the `launchSpineCompiler` task.
*
* @param enabled if `true` the task will be suspended.
*
* @see remoteDebug
*/
-fun Project.protoDataRemoteDebug(enabled: Boolean = true) =
- setRemoteDebug("launchProtoData", enabled)
+fun Project.spineCompilerRemoteDebug(enabled: Boolean = true) =
+ setRemoteDebug("launchSpineCompiler", enabled)
/**
- * Sets remote debug options for the `launchTestProtoData` task.
+ * Sets remote debug options for the `launchTestSpineCompiler` task.
*
* @param enabled if `true` the task will be suspended.
*
* @see remoteDebug
*/
-fun Project.testProtoDataRemoteDebug(enabled: Boolean = true) =
- setRemoteDebug("launchTestProtoData", enabled)
+fun Project.testSpineCompilerRemoteDebug(enabled: Boolean = true) =
+ setRemoteDebug("launchTestSpineCompiler", enabled)
/**
- * Sets remote debug options for the `launchTestFixturesProtoData` task.
+ * Sets remote debug options for the `launchTestFixturesSpineCompiler` task.
*
* @param enabled if `true` the task will be suspended.
*
* @see remoteDebug
*/
-fun Project.testFixturesProtoDataRemoteDebug(enabled: Boolean = true) =
- setRemoteDebug("launchTestFixturesProtoData", enabled)
+fun Project.testFixturesSpineCompilerRemoteDebug(enabled: Boolean = true) =
+ setRemoteDebug("launchTestFixturesSpineCompiler", enabled)
+
+/**
+ * Parts of names of configurations to be excluded by
+ * `artifactMeta/excludeConfigurations/containing` in the modules
+ * where `io.spine.atifact-meta` plugin is applied.
+ */
+val buildToolConfigurations: Array = arrayOf(
+ "detekt",
+ "jacoco",
+ "pmd",
+ "checkstyle",
+ "checkerframework",
+ "ksp",
+ "dokka",
+)
+
+/**
+ * Make the `sourcesJar` task accept duplicated input which seems to occur
+ * somewhere inside Protobuf Gradle Plugin.
+ */
+fun Project.allowDuplicationInSourcesJar() {
+ tasks.withType(Jar::class.java).configureEach {
+ if (name == "sourcesJar") {
+ duplicatesStrategy = DuplicatesStrategy.INCLUDE
+ }
+ }
+}
diff --git a/buildSrc/src/main/kotlin/DokkaExts.kt b/buildSrc/src/main/kotlin/DokkaExts.kt
index 03a6e03..e505a6d 100644
--- a/buildSrc/src/main/kotlin/DokkaExts.kt
+++ b/buildSrc/src/main/kotlin/DokkaExts.kt
@@ -69,11 +69,17 @@ fun DependencyHandlerScope.useDokkaWithSpineExtensions() {
private fun DependencyHandler.dokkaPlugin(dependencyNotation: Any): Dependency? =
add("dokkaPlugin", dependencyNotation)
+/**
+ * Resolves the directory where Dokka outputs HTML documentation for the given language.
+ */
internal fun Project.dokkaOutput(language: String): File {
val lng = language.titleCaseFirstChar()
return layout.buildDirectory.dir("docs/dokka$lng").get().asFile
}
+/**
+ * Locates a Dokka configuration file under the `buildSrc` resources.
+ */
fun Project.dokkaConfigFile(file: String): File {
val dokkaConfDir = project.rootDir.resolve("buildSrc/src/main/resources/dokka")
return dokkaConfDir.resolve(file)
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt b/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt
index 87f1174..80c79f4 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/Dependency.kt
@@ -114,3 +114,19 @@ private fun ResolutionStrategy.forceWithLogging(
force(artifact)
project.log { "Forced the version of `$artifact` in " + configuration.diagSuffix(project) }
}
+
+/**
+ * Obtains full Maven coordinates for the requested [module].
+ *
+ * This extension allows referencing properties of the [Dependency],
+ * upon which it is invoked.
+ *
+ * An example usage:
+ *
+ * ```
+ * // Supposing there is `Ksp.symbolProcessingApi: String` property declared.
+ * Ksp.artifact { symbolProcessingApi }
+ * ```
+ */
+fun T.artifact(module: T.() -> String): String =
+ artifact(module())
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt b/buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt
index 89cfb34..766430b 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/build/GradleDoctor.kt
@@ -33,6 +33,6 @@ package io.spine.dependency.build
*/
@Suppress("unused", "ConstPropertyName")
object GradleDoctor {
- const val version = "0.10.0"
+ const val version = "0.12.0"
const val pluginId = "com.osacky.doctor"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt b/buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt
index 662a94e..f96ce56 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/build/Ksp.kt
@@ -35,10 +35,11 @@ import io.spine.dependency.Dependency
*/
@Suppress("unused")
object Ksp : Dependency() {
- override val version = "2.1.21-2.0.2"
+ override val version = "2.2.20-2.0.4"
override val group = "com.google.devtools.ksp"
const val id = "com.google.devtools.ksp"
+ const val gradlePluginArtifactName = "com.google.devtools.ksp.gradle.plugin"
val symbolProcessingApi = "$group:symbol-processing-api"
val symbolProcessing = "$group:symbol-processing"
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt
index b47b0c5..2e846f7 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Jackson.kt
@@ -33,7 +33,10 @@ import io.spine.dependency.DependencyWithBom
@Suppress("unused")
object Jackson : DependencyWithBom() {
override val group = "com.fasterxml.jackson"
- override val version = "2.18.3"
+ override val version = "2.20.0"
+
+ // https://github.com/FasterXML/jackson-annotations?tab=readme-ov-file#release-notes
+ const val annotationsVersion = "2.20"
// https://github.com/FasterXML/jackson-bom
override val bom = "$group:jackson-bom:$version"
@@ -51,16 +54,19 @@ object Jackson : DependencyWithBom() {
val databind = "$coreGroup:jackson-databind"
// https://github.com/FasterXML/jackson-annotations
- val annotations = "$coreGroup:jackson-annotations"
+ val annotations = "$coreGroup:jackson-annotations:$annotationsVersion"
// https://github.com/FasterXML/jackson-module-kotlin/releases
val moduleKotlin = "$moduleGroup:jackson-module-kotlin"
+ // https://github.com/FasterXML/jackson-modules-java8
+ val moduleParameterNames = "$moduleGroup:jackson-module-parameter-names"
+
override val modules = listOf(
core,
databind,
- annotations,
- moduleKotlin
+ moduleKotlin,
+ moduleParameterNames
)
object DataFormat : Dependency() {
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt
index 48694c5..0029ab1 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/Kotlin.kt
@@ -39,7 +39,7 @@ object Kotlin : DependencyWithBom() {
* depend on Gradle and the version of embedded Kotlin.
*/
@Suppress("MemberVisibilityCanBePrivate") // used directly from the outside.
- const val runtimeVersion = "2.1.21"
+ const val runtimeVersion = "2.2.20"
override val version = runtimeVersion
override val group = "org.jetbrains.kotlin"
@@ -49,7 +49,7 @@ object Kotlin : DependencyWithBom() {
* This is the version of
* [Kotlin embedded into Gradle](https://docs.gradle.org/current/userguide/compatibility.html#kotlin).
*/
- const val embeddedVersion = "2.1.21"
+ const val embeddedVersion = "2.2.20"
/**
* The version of the JetBrains annotations library, which is a transitive
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt
index 346c5d8..d7ece62 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/KotlinPoet.kt
@@ -29,7 +29,7 @@ package io.spine.dependency.lib
// https://github.com/square/kotlinpoet
@Suppress("unused", "ConstPropertyName")
object KotlinPoet {
- private const val version = "2.0.0"
+ private const val version = "2.2.0"
const val lib = "com.squareup:kotlinpoet:$version"
const val ksp = "com.squareup:kotlinpoet-ksp:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/lib/PalantirJavaFormat.kt b/buildSrc/src/main/kotlin/io/spine/dependency/lib/PalantirJavaFormat.kt
new file mode 100644
index 0000000..9ce082f
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/lib/PalantirJavaFormat.kt
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2025, TeamDev. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package io.spine.dependency.lib
+
+import io.spine.dependency.Dependency
+
+/**
+ * Palantir Java Format.
+ *
+ * @see GitHub Repo
+ */
+object PalantirJavaFormat : Dependency() {
+
+ override val group = "com.palantir.javaformat"
+ override val version = "2.75.0"
+ override val modules: List = listOf("$group:palantir-java-format")
+
+ val lib = artifact(modules[0])
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
index e8e51f2..b8351d9 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Base.kt
@@ -33,12 +33,12 @@ package io.spine.dependency.local
*/
@Suppress("ConstPropertyName", "unused")
object Base {
- const val version = "2.0.0-SNAPSHOT.360"
- const val versionForBuildScript = "2.0.0-SNAPSHOT.360"
+ const val version = "2.0.0-SNAPSHOT.361"
+ const val versionForBuildScript = "2.0.0-SNAPSHOT.361"
const val group = Spine.group
const val artifact = "spine-base"
const val lib = "$group:$artifact:$version"
- const val annotations = "$group:spine-annotations:$version"
const val format = "$group:spine-format:$version"
const val libForBuildScript = "$group:$artifact:$versionForBuildScript"
+ const val annotations = "$group:spine-annotations:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt
new file mode 100644
index 0000000..708dd6b
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2025, TeamDev. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package io.spine.dependency.local
+
+/**
+ * Dependencies on the Spine Compiler modules.
+ *
+ * To use a locally published ProtoData version instead of the version from a public plugin
+ * registry, set the `COMPILER_VERSION` and/or the `COMPILER_DF_VERSION` environment variables
+ * and stop the Gradle daemons so that Gradle observes the env change:
+ * ```
+ * export COMPILER_VERSION=0.43.0-local
+ * export COMPILER_DF_VERSION=0.41.0
+ *
+ * ./gradle --stop
+ * ./gradle build # Conduct the intended checks.
+ * ```
+ *
+ * Then, to reset the console to run the usual versions again, remove the values of
+ * the environment variables and stop the daemon:
+ * ```
+ * export COMPILER_VERSION=""
+ * export COMPILER_DF_VERSION=""
+ *
+ * ./gradle --stop
+ * ```
+ *
+ * See [`SpineEventEngine/compiler`](https://github.com/SpineEventEngine/compiler/).
+ */
+@Suppress(
+ "unused" /* Some subprojects do not use the Compiler directly. */,
+ "ConstPropertyName" /* We use custom convention for artifact properties. */,
+ "MemberVisibilityCanBePrivate" /* The properties are used directly by other subprojects. */,
+)
+object Compiler {
+ const val pluginGroup = Spine.group
+ const val group = "io.spine.tools"
+ const val pluginId = "io.spine.compiler"
+
+ /**
+ * Identifies the Compiler as a `classpath` dependency under `buildScript` block.
+ */
+ const val module = "io.spine.tools:compiler"
+
+ /**
+ * The version of ProtoData dependencies.
+ */
+ val version: String
+ private const val fallbackVersion = "2.0.0-SNAPSHOT.024"
+
+ /**
+ * The distinct version of ProtoData used by other build tools.
+ *
+ * When ProtoData is used both for building the project and as a part of the Project's
+ * transitional dependencies, this is the version used to build the project itself.
+ */
+ val dogfoodingVersion: String
+ private const val fallbackDfVersion = "2.0.0-SNAPSHOT.024"
+
+ /**
+ * The artifact for the ProtoData Gradle plugin.
+ */
+ val pluginLib: String
+
+ /**
+ * The artifact to be used during experiments when publishing locally.
+ *
+ * @see Compiler
+ */
+ fun pluginLib(version: String): String =
+ "$group:compiler-gradle-plugin:$version"
+
+ fun api(version: String): String =
+ "$group:compiler-api:$version"
+
+ val api
+ get() = api(version)
+
+ val backend
+ get() = "$group:compiler-backend:$version"
+
+ val params
+ get() = "$group:compiler-params:$version"
+
+ val protocPlugin
+ get() = "$group:compiler-protoc-plugin:$version"
+
+ val gradleApi
+ get() = "$group:compiler-gradle-api:$version"
+
+ val cliApi
+ get() = "$group:compiler-cli-api:$version"
+
+ val jvmModule = "$group:compiler-jvm"
+
+ fun jvm(version: String): String =
+ "$jvmModule:$version"
+
+ val jvm
+ get() = jvm(version)
+
+ val fatCli
+ get() = "$group:compiler-fat-cli:$version"
+
+ val testlib
+ get() = "$group:compiler-testlib:$version"
+
+ /**
+ * An env variable storing a custom [version].
+ */
+ private const val VERSION_ENV = "COMPILER_VERSION"
+
+ /**
+ * An env variable storing a custom [dogfoodingVersion].
+ */
+ private const val DF_VERSION_ENV = "COMPILER_DF_VERSION"
+
+ /**
+ * Sets up the versions and artifacts for the build to use.
+ *
+ * If either [VERSION_ENV] or [DF_VERSION_ENV] is set, those versions are used instead of
+ * the hardcoded ones. Also, in this mode, the [pluginLib] coordinates are changed so that
+ * it points at a locally published artifact. Otherwise, it points at an artifact that would be
+ * published to a public plugin registry.
+ */
+ init {
+ val experimentVersion = System.getenv(VERSION_ENV)
+ val experimentDfVersion = System.getenv(DF_VERSION_ENV)
+ if (experimentVersion?.isNotBlank() == true || experimentDfVersion?.isNotBlank() == true) {
+ version = experimentVersion ?: fallbackVersion
+ dogfoodingVersion = experimentDfVersion ?: fallbackDfVersion
+
+ pluginLib = pluginLib(version)
+ println("""
+
+ ❗ Running an experiment with the Spine Compiler. ❗
+ -----------------------------------------
+ Regular version = v$version
+ Dogfooding version = v$dogfoodingVersion
+
+ The Compiler Gradle plugin can now be loaded from Maven Local.
+
+ To reset the versions, erase the `$$VERSION_ENV` and `$$DF_VERSION_ENV` environment variables.
+
+ """.trimIndent())
+ } else {
+ version = fallbackVersion
+ dogfoodingVersion = fallbackDfVersion
+ pluginLib = pluginLib(version)
+ }
+ }
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJava.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt
similarity index 77%
rename from buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJava.kt
rename to buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt
index 54bfd6d..d9f5ba3 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJava.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt
@@ -26,15 +26,18 @@
package io.spine.dependency.local
+// For backward compatibility.
+typealias CoreJava = CoreJvm
+
/**
* Dependencies on `core-java` modules.
*
* See [`SpineEventEngine/core-java`](https://github.com/SpineEventEngine/core-java/).
*/
@Suppress("ConstPropertyName", "unused")
-object CoreJava {
+object CoreJvm {
const val group = Spine.group
- const val version = "2.0.0-SNAPSHOT.330"
+ const val version = "2.0.0-SNAPSHOT.332"
const val coreArtifact = "spine-core"
const val clientArtifact = "spine-client"
@@ -44,5 +47,10 @@ object CoreJava {
const val client = "$group:$clientArtifact:$version"
const val server = "$group:$serverArtifact:$version"
- const val testUtilServer = "${Spine.toolsGroup}:spine-testutil-server:$version"
+ @Deprecated("Use `serverTestLib` instead.", ReplaceWith("serverTestLib"))
+ const val testUtilServer = "${Spine.toolsGroup}:spine-server-testlib:$version"
+
+ const val coreTestLib = "${Spine.toolsGroup}:spine-core-testlib:$version"
+ const val clientTestLib = "${Spine.toolsGroup}:spine-client-testlib:$version"
+ const val serverTestLib = "${Spine.toolsGroup}:spine-server-testlib:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt
new file mode 100644
index 0000000..5762d48
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2025, TeamDev. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package io.spine.dependency.local
+
+/**
+ * Dependencies on the CoreJvm Compiler artifacts.
+ *
+ * See [mc-java](https://github.com/SpineEventEngine/core-jvm-compiler).
+ */
+@Suppress(
+ "MemberVisibilityCanBePrivate" /* `pluginLib()` is used by subprojects. */,
+ "ConstPropertyName",
+ "unused"
+)
+object CoreJvmCompiler {
+
+ /**
+ * The Compiler belongs to the `tools` group.
+ */
+ const val group = Spine.toolsGroup
+
+ /**
+ * The version used to in the build classpath.
+ */
+ const val dogfoodingVersion = "2.0.0-SNAPSHOT.015"
+
+ /**
+ * The version to be used for integration tests.
+ */
+ const val version = "2.0.0-SNAPSHOT.015"
+
+ /**
+ * The ID of the Gradle plugin.
+ */
+ const val pluginId = "io.spine.core-jvm"
+
+ /**
+ * The library with the [dogfoodingVersion].
+ */
+ val pluginLib = pluginLibNew(dogfoodingVersion)
+
+ /**
+ * The library with the given [version].
+ *
+ * This is the notation before the version `2.0.0-SNAPSHOT.013`
+ */
+ @Deprecated("Use `pluginLibNew()` instead.")
+ fun pluginLib(version: String): String = "$group:core-jvm-plugins:$version:all"
+
+ /**
+ * The library with the given [version].
+ *
+ * @since 2.0.0-SNAPSHOT.013
+ */
+ fun pluginLibNew(version: String): String = "$group:core-jvm-plugins:$version"
+
+ /** The artifact reference for forcing in configurations. */
+ const val pluginsArtifact: String = "$group:core-jvm-plugins:$version"
+
+ /**
+ * The `core-jvm-base` artifact with the [version].
+ */
+ val base = base(version)
+
+ /**
+ * The `core-jvm-base` artifact with the given [version].
+ */
+ fun base(version: String): String = "$group:core-jvm-base:$version"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Spine.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Spine.kt
index d7b6d0c..a5cce49 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Spine.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Spine.kt
@@ -31,87 +31,6 @@ package io.spine.dependency.local
*/
@Suppress("unused", "ConstPropertyName")
object Spine {
-
const val group = "io.spine"
const val toolsGroup = "io.spine.tools"
-
- @Deprecated(message = "Please use `Base.lib`.", ReplaceWith("Base.lib"))
- const val base = Base.lib
-
- @Deprecated(
- message = "Please use `Base.libForBuildScript`.",
- ReplaceWith("Base.libForBuildScript")
- )
- const val baseForBuildScript = Base.libForBuildScript
-
- @Deprecated(message = "Please use `Reflect.lib`.", ReplaceWith("Reflect.lib"))
- const val reflect = Reflect.lib
-
- @Deprecated(message = "Please use `BaseTypes.lib`.", ReplaceWith("BaseTypes.lib"))
- const val baseTypes = BaseTypes.lib
-
- @Deprecated(message = "Please use `Time.lib`.", ReplaceWith("Time.lib"))
- const val time = Time.lib
-
- @Deprecated(message = "Please use `Change.lib`.", ReplaceWith("Change.lib"))
- const val change = Change.lib
-
- @Deprecated(message = "Please use `Text.lib`.", ReplaceWith("Text.lib"))
- const val text = Text.lib
-
- @Deprecated(message = "Please use `TestLib.lib`.", ReplaceWith("TestLib.lib"))
- const val testlib = TestLib.lib
-
- @Deprecated(message = "Please use `Time.testLib`.", ReplaceWith("Time.testLib"))
- const val testUtilTime = Time.testLib
-
- @Deprecated(message = "Please use `ToolBase.psiJava` instead`.")
- const val psiJava = "$toolsGroup:spine-psi-java:${ToolBase.version}"
-
- @Deprecated(
- message = "Please use `ToolBase.psiJava` instead`.",
- ReplaceWith("ToolBase.psiJava")
- )
- const val psiJavaBundle = "$toolsGroup:spine-psi-java-bundle:${ToolBase.version}"
-
- @Deprecated(message = "Please use `ToolBase.lib` instead`.", ReplaceWith("ToolBase.lib"))
- const val toolBase = "$toolsGroup:spine-tool-base:${ToolBase.version}"
-
- @Deprecated(
- message = "Please use `ToolBase.pluginBase` instead`.",
- ReplaceWith("ToolBase.pluginBase")
- )
- const val pluginBase = "$toolsGroup:spine-plugin-base:${ToolBase.version}"
-
- @Deprecated(
- message = "Please use `ToolBase.pluginTestlib` instead`.",
- ReplaceWith("ToolBase.pluginTestlib")
- )
- const val pluginTestlib = ToolBase.pluginTestlib
-
- @Deprecated(
- message = "Please use `ModelCompiler.lib` instead.",
- ReplaceWith("ModelCompiler.lib")
- )
- const val modelCompiler = ModelCompiler.lib
-
- @Deprecated(
- message = "Please use top level `McJava` object instead.",
- ReplaceWith("McJava", "io.spine.dependency.local.McJava")
- )
- val McJava = io.spine.dependency.local.McJava
-
- const val javadocFilter = "$toolsGroup:spine-javadoc-filter:${ArtifactVersion.javadocTools}"
-
- @Deprecated(
- message = "Please use top level `CoreJava.client` object instead.",
- ReplaceWith("CoreJava.client", "io.spine.dependency.local.CoreJava")
- )
- const val client = CoreJava.client
-
- @Deprecated(
- message = "Please use top level `CoreJava.server` object instead.",
- ReplaceWith("CoreJava.server", "io.spine.dependency.local.CoreJava")
- )
- const val server = CoreJava.server
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt
index 1c7a444..f9754bb 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/TestLib.kt
@@ -33,7 +33,7 @@ package io.spine.dependency.local
*/
@Suppress("ConstPropertyName")
object TestLib {
- const val version = "2.0.0-SNAPSHOT.202"
+ const val version = "2.0.0-SNAPSHOT.210"
const val group = Spine.toolsGroup
const val artifact = "spine-testlib"
const val lib = "$group:$artifact:$version"
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt
index 043247c..69e7bea 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ToolBase.kt
@@ -34,9 +34,10 @@ package io.spine.dependency.local
@Suppress("ConstPropertyName", "unused")
object ToolBase {
const val group = Spine.toolsGroup
- const val version = "2.0.0-SNAPSHOT.355"
+ const val version = "2.0.0-SNAPSHOT.361"
const val lib = "$group:tool-base:$version"
+ const val classicCodegen = "$group:classic-codegen:$version"
const val pluginBase = "$group:plugin-base:$version"
const val pluginTestlib = "$group:plugin-testlib:$version"
@@ -52,4 +53,10 @@ object ToolBase {
const val jvmTools = "$group:jvm-tools:$version"
const val jvmToolPlugins = "$group:jvm-tool-all-plugins:$version"
+
+ object JavadocFilter {
+ const val group = ToolBase.group
+ const val version = "2.0.0-SNAPSHOT.75"
+ const val artifact = "$group:spine-javadoc-filter:$version"
+ }
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
index 7326ced..e842283 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Validation.kt
@@ -36,14 +36,20 @@ object Validation {
/**
* The version of the Validation library artifacts.
*/
- const val version = "2.0.0-SNAPSHOT.340"
+ const val version = "2.0.0-SNAPSHOT.351"
+
+ /**
+ * The last version of Validation compatible with ProtoData.
+ */
+ const val pdCompatibleVersion = "2.0.0-SNAPSHOT.342"
const val group = "io.spine.validation"
private const val prefix = "spine-validation"
const val runtimeModule = "$group:$prefix-java-runtime"
const val runtime = "$runtimeModule:$version"
- const val java = "$group:$prefix-java:$version"
+ const val javaModule = "$group:$prefix-java"
+ const val java = "$javaModule:$version"
const val javaBundleModule = "$group:$prefix-java-bundle"
@@ -53,5 +59,7 @@ object Validation {
val javaBundle = javaBundle(version)
const val model = "$group:$prefix-model:$version"
- const val config = "$group:$prefix-configuration:$version"
+
+ const val configModule = "$group:$prefix-configuration"
+ const val configuration = "$configModule:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt b/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
index 8de10ff..0d71ab2 100644
--- a/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
+++ b/buildSrc/src/main/kotlin/io/spine/dependency/test/Kotest.kt
@@ -35,7 +35,7 @@ package io.spine.dependency.test
*/
@Suppress("unused", "ConstPropertyName")
object Kotest {
- const val version = "5.9.1"
+ const val version = "6.0.3"
const val group = "io.kotest"
const val assertions = "$group:kotest-assertions-core:$version"
const val runnerJUnit5 = "$group:kotest-runner-junit5:$version"
@@ -46,14 +46,15 @@ object Kotest {
// https://plugins.gradle.org/plugin/io.kotest.multiplatform
object MultiplatformGradlePlugin {
- const val version = Kotest.version
+ const val version = "6.0.0.M4"
const val id = "io.kotest.multiplatform"
const val classpath = "$group:kotest-framework-multiplatform-plugin-gradle:$version"
}
// https://github.com/kotest/kotest-gradle-plugin
+ @Deprecated("The repository is archived. Use `io.kotest.multiplatform` plugin instead.")
object JvmGradlePlugin {
- const val version = "0.4.10"
+ const val version = "0.4.11"
const val id = "io.kotest"
const val classpath = "$group:kotest-gradle-plugin:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/Runtime.kt b/buildSrc/src/main/kotlin/io/spine/gradle/Runtime.kt
index fb4efaf..0a32c33 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/Runtime.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/Runtime.kt
@@ -53,7 +53,7 @@ class Cli(private val workingFolder: File) {
* [Executes][Runtime.exec] the given `String` array as a CLI command.
*
* If the execution is successful, returns the command output.
- * Throws an {@link IllegalStateException} otherwise.
+ * Throws an [IllegalStateException] otherwise.
*
* @param command the command to execute.
* @return the command line output.
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt b/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt
index e46a565..e339dd4 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/UpdateGitHubPages.kt
@@ -159,7 +159,7 @@ class UpdateGitHubPages : Plugin {
includedInputs = extension.includedInputs()
if (!allowInternalJavadoc) {
- val doclet = ExcludeInternalDoclet(extension.excludeInternalDocletVersion)
+ val doclet = ExcludeInternalDoclet()
doclet.registerTaskIn(this)
}
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt b/buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt
index 541504c..c42c65c 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/javadoc/ExcludeInternalDoclet.kt
@@ -26,8 +26,7 @@
package io.spine.gradle.javadoc
-import io.spine.dependency.local.ArtifactVersion
-import io.spine.dependency.local.Spine
+import io.spine.dependency.local.ToolBase
import io.spine.gradle.javadoc.ExcludeInternalDoclet.Companion.taskName
import io.spine.gradle.sourceSets
import org.gradle.api.Project
@@ -39,12 +38,9 @@ import org.gradle.external.javadoc.StandardJavadocDocletOptions
* The doclet which removes Javadoc for `@Internal` things in the Java code.
*/
@Suppress("ConstPropertyName")
-class ExcludeInternalDoclet(
- @Deprecated("`Spine.ArtifactVersion.javadocTools` is used instead.")
- val version: String = ArtifactVersion.javadocTools
-) {
+class ExcludeInternalDoclet {
- private val dependency = Spine.javadocFilter
+ private val dependency = ToolBase.JavadocFilter.artifact
companion object {
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt b/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt
index ea47967..4539aa9 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/kotlin/KotlinConfig.kt
@@ -59,7 +59,7 @@ fun KotlinCommonCompilerOptions.setFreeCompilerArgs() {
"-Xjvm-default=all",
"-Xinline-classes",
"-Xexpect-actual-classes",
- "-Xcontext-receivers",
+ "-Xcontext-parameters",
"-opt-in=" +
"kotlin.contracts.ExperimentalContracts," +
"kotlin.io.path.ExperimentalPathApi," +
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt b/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt
index e47edae..9b4ba30 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/publish/CheckVersionIncrement.kt
@@ -30,6 +30,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PRO
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import io.spine.gradle.repo.Repository
import java.io.FileNotFoundException
+import java.net.URI
import java.net.URL
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
@@ -84,7 +85,7 @@ open class CheckVersionIncrement : DefaultTask() {
}
private fun fetch(repository: String, artifact: String): MavenMetadata? {
- val url = URL("$repository/$artifact")
+ val url = URI.create("$repository/$artifact").toURL()
return MavenMetadata.fetchAndParse(url)
}
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/JacocoConfig.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/JacocoConfig.kt
index 5114add..65bf2ee 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/JacocoConfig.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/coverage/JacocoConfig.kt
@@ -144,7 +144,7 @@ class JacocoConfig(
private fun registerRootReport(
tasks: TaskContainer,
- copyReports: TaskProvider?
+ copyReports: TaskProvider
): TaskProvider {
val allSourceSets = Projects(projects).sourceSets()
val mainJavaSrcDirs = allSourceSets.mainJavaSrcDirs()
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt
index eda2493..79d00c6 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt
@@ -121,11 +121,8 @@ fun Project.dependencies(): SortedSet {
private fun Project.depsFromAllConfigurations(): Set {
val result = mutableSetOf()
this.configurations.forEach { configuration ->
- if (configuration.isCanBeResolved) {
- // Force resolution of the configuration.
- configuration.resolvedConfiguration
- }
- configuration.dependencies.filter { it.isExternal() }
+ configuration.dependencies
+ .filter { it.isExternal() }
.forEach { dependency ->
val forcedVersion = configuration.forcedVersionOf(dependency)
val moduleDependency =
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomFormatting.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomFormatting.kt
index a29d0a4..15059ea 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomFormatting.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomFormatting.kt
@@ -92,7 +92,7 @@ internal object PomFormatting {
* Writes the specified lines using the specified [destination], dividing them
* by platform-specific line separator.
*
- * The written lines are also padded with the platform's line separator from both sides.
+ * Each written line is followed by two platform-specific line separators.
*/
internal fun writeBlocks(destination: StringWriter, vararg lines: String) {
lines.iterator().forEach {
diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt
index e26c738..6e986e1 100644
--- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt
+++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/PomGenerator.kt
@@ -69,7 +69,7 @@ object PomGenerator {
fun applyTo(project: Project) {
/**
- * In some cases, the `base` plugin, which by default is added by e.g., `java`,
+ * In some cases, the `base` plugin, which by default is added by e.g. `java`,
* is not yet added.
*
* The `base` plugin defines the `build` task.
diff --git a/buildSrc/src/main/kotlin/jvm-module.gradle.kts b/buildSrc/src/main/kotlin/jvm-module.gradle.kts
new file mode 100644
index 0000000..7bc595c
--- /dev/null
+++ b/buildSrc/src/main/kotlin/jvm-module.gradle.kts
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2025, TeamDev. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import io.spine.dependency.boms.BomsPlugin
+import io.spine.dependency.build.CheckerFramework
+import io.spine.dependency.build.Dokka
+import io.spine.dependency.build.ErrorProne
+import io.spine.dependency.build.JSpecify
+import io.spine.dependency.lib.Guava
+import io.spine.dependency.lib.Protobuf
+import io.spine.dependency.local.Reflect
+import io.spine.dependency.test.Jacoco
+import io.spine.gradle.checkstyle.CheckStyleConfig
+import io.spine.gradle.github.pages.updateGitHubPages
+import io.spine.gradle.javac.configureErrorProne
+import io.spine.gradle.javac.configureJavac
+import io.spine.gradle.javadoc.JavadocConfig
+import io.spine.gradle.kotlin.setFreeCompilerArgs
+import io.spine.gradle.report.license.LicenseReporter
+
+plugins {
+ `java-library`
+ id("net.ltgt.errorprone")
+ id("pmd-settings")
+ id("project-report")
+ id("dokka-for-java")
+ kotlin("jvm")
+ id("detekt-code-analysis")
+ id("dokka-for-kotlin")
+ id("org.jetbrains.kotlinx.kover")
+ id("module-testing")
+}
+apply()
+LicenseReporter.generateReportIn(project)
+JavadocConfig.applyTo(project)
+CheckStyleConfig.applyTo(project)
+
+project.run {
+ configureJava()
+ configureKotlin()
+ addDependencies()
+ forceConfigurations()
+
+ val generatedDir = "$projectDir/generated"
+ setTaskDependencies(generatedDir)
+
+ configureGitHubPages()
+}
+
+typealias Module = Project
+
+fun Module.configureJava() {
+ java {
+ sourceCompatibility = BuildSettings.javaVersionCompat
+ targetCompatibility = BuildSettings.javaVersionCompat
+ }
+
+ tasks {
+ withType().configureEach {
+ configureJavac()
+ configureErrorProne()
+ }
+ }
+}
+
+fun Module.configureKotlin() {
+ kotlin {
+ explicitApi()
+ compilerOptions {
+ jvmTarget.set(BuildSettings.jvmTarget)
+ setFreeCompilerArgs()
+ }
+ }
+
+ kover {
+ useJacoco(version = Jacoco.version)
+ reports {
+ total {
+ xml {
+ onCheck = true
+ }
+ }
+ }
+ }
+}
+
+/**
+ * These dependencies are applied to all subprojects and do not have to
+ * be included explicitly.
+ *
+ * We expose production code dependencies as API because they are used
+ * by the framework parts that depend on `base`.
+ */
+fun Module.addDependencies() = dependencies {
+ errorprone(ErrorProne.core)
+
+ Protobuf.libs.forEach { api(it) }
+ api(Guava.lib)
+
+ compileOnlyApi(CheckerFramework.annotations)
+ api(JSpecify.annotations)
+ ErrorProne.annotations.forEach { compileOnlyApi(it) }
+}
+
+fun Module.forceConfigurations() {
+ with(configurations) {
+ forceVersions()
+ excludeProtobufLite()
+ all {
+ resolutionStrategy {
+ force(
+ Dokka.BasePlugin.lib,
+ Reflect.lib,
+ )
+ }
+ }
+ }
+}
+
+fun Module.setTaskDependencies(generatedDir: String) {
+ tasks {
+ val cleanGenerated by registering(Delete::class) {
+ delete(generatedDir)
+ }
+ clean.configure {
+ dependsOn(cleanGenerated)
+ }
+
+ project.afterEvaluate {
+ val publish = tasks.findByName("publish")
+ publish?.dependsOn("${project.path}:updateGitHubPages")
+ }
+ }
+ afterEvaluate {
+ configureTaskDependencies()
+ }
+}
+
+fun Module.configureGitHubPages() {
+ val docletVersion = project.version.toString()
+ updateGitHubPages(docletVersion) {
+ allowInternalJavadoc.set(true)
+ rootFolder.set(rootDir)
+ }
+}
diff --git a/buildSrc/src/main/kotlin/kmp-module.gradle.kts b/buildSrc/src/main/kotlin/kmp-module.gradle.kts
index b23dc02..7577ed5 100644
--- a/buildSrc/src/main/kotlin/kmp-module.gradle.kts
+++ b/buildSrc/src/main/kotlin/kmp-module.gradle.kts
@@ -143,7 +143,6 @@ java {
targetCompatibility = BuildSettings.javaVersionCompat
}
-
/**
* Performs the standard task's configuration.
*
diff --git a/buildSrc/src/main/kotlin/module-testing.gradle.kts b/buildSrc/src/main/kotlin/module-testing.gradle.kts
index 715852c..ee3fe61 100644
--- a/buildSrc/src/main/kotlin/module-testing.gradle.kts
+++ b/buildSrc/src/main/kotlin/module-testing.gradle.kts
@@ -65,7 +65,6 @@ dependencies {
testImplementation(TestLib.lib)
testImplementation(Kotest.assertions)
- testImplementation(Kotest.datatest)
testRuntimeOnly(Jupiter.engine)
}
diff --git a/buildSrc/src/main/kotlin/module.gradle.kts b/buildSrc/src/main/kotlin/module.gradle.kts
index 1b40ec6..c5db1f9 100644
--- a/buildSrc/src/main/kotlin/module.gradle.kts
+++ b/buildSrc/src/main/kotlin/module.gradle.kts
@@ -30,6 +30,7 @@ import io.spine.dependency.build.Dokka
import io.spine.dependency.build.ErrorProne
import io.spine.dependency.build.JSpecify
import io.spine.dependency.lib.Guava
+import io.spine.dependency.lib.Kotlin
import io.spine.dependency.lib.Protobuf
import io.spine.dependency.local.Reflect
import io.spine.dependency.local.Logging
@@ -49,7 +50,6 @@ plugins {
id("project-report")
id("dokka-for-java")
kotlin("jvm")
- id("io.kotest")
id("detekt-code-analysis")
id("dokka-for-kotlin")
id("org.jetbrains.kotlinx.kover")
@@ -134,6 +134,7 @@ fun Module.forceConfigurations() {
all {
resolutionStrategy {
force(
+ Kotlin.bom,
Logging.lib,
Dokka.BasePlugin.lib,
Reflect.lib,
diff --git a/buildSrc/src/main/kotlin/test-module.gradle.kts b/buildSrc/src/main/kotlin/test-module.gradle.kts
new file mode 100644
index 0000000..23aa4a2
--- /dev/null
+++ b/buildSrc/src/main/kotlin/test-module.gradle.kts
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2024, TeamDev. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Redistribution and use in source and/or binary forms, with or without
+ * modification, must retain the above copyright notice and the following
+ * disclaimer.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import io.spine.dependency.local.Base
+import io.spine.dependency.local.Validation
+
+plugins {
+ java
+ `java-test-fixtures`
+}
+
+dependencies {
+ arrayOf(
+ Base.lib,
+ Validation.runtime
+ ).forEach {
+ testFixturesImplementation(it)?.because(
+ """
+ We do not apply CoreJvm Compiler Gradle plugin which adds
+ the `implementation` dependency on Validation runtime automatically
+ (see `Project.configureValidation()` function in `CompilerConfigPlugin.kt`).
+
+ In a test module we use vanilla `protoc` (via ProtoTap) and then run codegen
+ using the Spine Compiler `Pipeline` and the plugins of the module under the test.
+
+ Because of this we need to add the dependencies above explicitly for the
+ generated code of test fixtures to compile.
+ """.trimIndent()
+ )
+ }
+}
diff --git a/config b/config
index d7539c9..c2504f2 160000
--- a/config
+++ b/config
@@ -1 +1 @@
-Subproject commit d7539c900d623a9bd9a1c50a10eb40667afa878d
+Subproject commit c2504f24673ac232481a8b59352707d0443b0efd
diff --git a/dependencies.md b/dependencies.md
index 23920c7..4104a49 100644
--- a/dependencies.md
+++ b/dependencies.md
@@ -1,6 +1,6 @@
-# Dependencies of `io.spine.tools:spine-testlib:2.0.0-SNAPSHOT.210`
+# Dependencies of `io.spine.tools:spine-testlib:2.0.0-SNAPSHOT.211`
## Runtime
1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.2.
@@ -72,35 +72,27 @@
1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.12.
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
@@ -125,17 +117,17 @@
* **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.29.0.
* **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu)
@@ -161,6 +153,14 @@
* **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
* **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-test. **Version** : 1.10.2.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-test-jvm. **Version** : 1.10.2.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-datetime. **Version** : 0.7.1.
* **Project URL:** [https://github.com/Kotlin/kotlinx-datetime](https://github.com/Kotlin/kotlinx-datetime)
* **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -234,6 +234,10 @@
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 2.9.3.
+ * **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine)
+ * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : com.github.ben-manes.caffeine. **Name** : caffeine. **Version** : 3.0.5.
* **Project URL:** [https://github.com/ben-manes/caffeine](https://github.com/ben-manes/caffeine)
* **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -487,53 +491,37 @@
* **Project URL:** [https://detekt.dev](https://detekt.dev)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-api-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-core-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-assertions-shared-jvm. **Version** : 5.9.1.
+1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 6.0.3.
* **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
* **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.kotest. **Name** : kotest-common. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-common-jvm. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-framework-api. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-framework-api-jvm. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
-
-1. **Group** : io.kotest. **Name** : kotest-framework-datatest. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
+1. **Group** : io.opentelemetry. **Name** : opentelemetry-api. **Version** : 1.41.0.
+ * **Project URL:** [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
+ * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : io.kotest. **Name** : kotest-framework-datatest-jvm. **Version** : 5.9.1.
- * **Project URL:** [https://github.com/kotest/kotest](https://github.com/kotest/kotest)
- * **License:** [Apache-2.0](https://opensource.org/licenses/Apache-2.0)
+1. **Group** : io.opentelemetry. **Name** : opentelemetry-context. **Version** : 1.41.0.
+ * **Project URL:** [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java)
+ * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
@@ -605,6 +593,23 @@
* **Project URL:** [https://github.com/apiguardian-team/apiguardian](https://github.com/apiguardian-team/apiguardian)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.bouncycastle. **Name** : bcpg-jdk18on. **Version** : 1.80.
+ * **Project URL:** [https://www.bouncycastle.org/download/bouncy-castle-java/](https://www.bouncycastle.org/download/bouncy-castle-java/)
+ * **License:** [Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+ * **License:** [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html)
+
+1. **Group** : org.bouncycastle. **Name** : bcpkix-jdk18on. **Version** : 1.80.
+ * **Project URL:** [https://www.bouncycastle.org/download/bouncy-castle-java/](https://www.bouncycastle.org/download/bouncy-castle-java/)
+ * **License:** [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html)
+
+1. **Group** : org.bouncycastle. **Name** : bcprov-jdk18on. **Version** : 1.80.
+ * **Project URL:** [https://www.bouncycastle.org/download/bouncy-castle-java/](https://www.bouncycastle.org/download/bouncy-castle-java/)
+ * **License:** [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html)
+
+1. **Group** : org.bouncycastle. **Name** : bcutil-jdk18on. **Version** : 1.80.
+ * **Project URL:** [https://www.bouncycastle.org/download/bouncy-castle-java/](https://www.bouncycastle.org/download/bouncy-castle-java/)
+ * **License:** [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html)
+
1. **Group** : org.checkerframework. **Name** : checker-compat-qual. **Version** : 2.5.3.
* **Project URL:** [https://checkerframework.org](https://checkerframework.org)
* **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html)
@@ -690,93 +695,105 @@
* **Project URL:** [https://github.com/JetBrains/intellij-deps-trove4j](https://github.com/JetBrains/intellij-deps-trove4j)
* **License:** [GNU LESSER GENERAL PUBLIC LICENSE 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : abi-tools. **Version** : 2.2.20.
+ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlin. **Name** : abi-tools-api. **Version** : 2.2.20.
+ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-bom. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-api. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-build-tools-impl. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-embeddable. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-compiler-runner. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-client. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-daemon-embeddable. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-klib-commonizer-embeddable. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-metadata-jvm. **Version** : 2.2.20.
+ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-reflect. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-script-runtime. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-common. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-embeddable. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-compiler-impl-embeddable. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-scripting-jvm. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.1.21.
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-common. **Version** : 2.2.20.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
- * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 2.0.21.
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
@@ -786,6 +803,10 @@
* **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
* **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.jetbrains.kotlin. **Name** : swift-export-embeddable. **Version** : 2.2.20.
+ * **Project URL:** [https://kotlinlang.org/](https://kotlinlang.org/)
+ * **License:** [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : org.jetbrains.kotlinx. **Name** : atomicfu. **Version** : 0.23.1.
* **Project URL:** [https://github.com/Kotlin/kotlinx.atomicfu](https://github.com/Kotlin/kotlinx.atomicfu)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -842,14 +863,26 @@
* **Project URL:** [https://github.com/Kotlin/kotlinx.html](https://github.com/Kotlin/kotlinx.html)
* **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-bom. **Version** : 1.7.3.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-core. **Version** : 1.4.1.
* **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-core. **Version** : 1.7.3.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-core-jvm. **Version** : 1.4.1.
* **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-core-jvm. **Version** : 1.7.3.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-json. **Version** : 1.4.1.
* **Project URL:** [https://github.com/Kotlin/kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization)
* **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -949,6 +982,6 @@
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sat Sep 20 23:45:13 WEST 2025** using
+This report was generated on **Fri Oct 10 19:29:47 WEST 2025** using
[Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under
[Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index fa14eb2..93bcb69 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,32 +1,24 @@
-#
-# Copyright 2023, TeamDev. All rights reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Redistribution and use in source and/or binary forms, with or without
-# modification, must retain the above copyright notice and the following
-# disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
+# Allow Gradle to auto-detect installed JDKs.
+org.gradle.java.installations.auto-detect=true
+
+# Optional: Allow Gradle to download JDKs if needed.
+org.gradle.java.installations.auto-download=true
+
+# Use parallel builds for better performance.
+org.gradle.parallel=true
+#org.gradle.caching=true
# Dokka plugin eats more memory than usual. Therefore, all builds should have enough.
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -XX:+UseParallelGC
+# suppress inspection "UnusedProperty"
+# The below property enables generation of XML reports for tests.
+# If this flag is false, it causes `KotlinTestReport` task to replace these reports with one
+# consolidated HTML report.
+# See: https://github.com/JetBrains/kotlin/blob/9fd05632f0d7f074b6544527e73eb0fbb2fb1ef2/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt#L20
+# See: https://youtrack.jetbrains.com/issue/KT-32608
+kotlin.tests.individualTaskReports=true
+
# Enables the Dokka migration mode from v1 to v2.
# For details please see:
# https://kotlinlang.org/docs/dokka-migration.html#enable-migration-helpers
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 9bbc975..8bdaf60 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 37f853b..2e11132 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 965e398..23d15a9 100755
--- a/gradlew
+++ b/gradlew
@@ -7,7 +7,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
-# https://www.apache.org/licenses/LICENSE-2.0
+# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -112,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -211,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
- org.gradle.wrapper.GradleWrapperMain \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
diff --git a/gradlew.bat b/gradlew.bat
index 9d21a21..db3a6ac 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+set CLASSPATH=
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/pom.xml b/pom.xml
index dc44c88..acad9b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject.
-->
io.spine.tools
testlib
-2.0.0-SNAPSHOT.210
+2.0.0-SNAPSHOT.211
2015
@@ -80,7 +80,7 @@ all modules and does not describe the project structure per-subproject.
io.kotest
kotest-assertions-core
- 5.9.1
+ 6.0.3
compile
@@ -92,13 +92,13 @@ all modules and does not describe the project structure per-subproject.
org.jetbrains.kotlin
kotlin-bom
- 2.1.21
+ 2.2.20
compile
org.jetbrains.kotlin
kotlin-stdlib
- 2.1.21
+ 2.2.20
compile
@@ -131,12 +131,6 @@ all modules and does not describe the project structure per-subproject.
0.7.4
runtime
-
- io.kotest
- kotest-framework-datatest
- 5.9.1
- test
-
io.spine
spine-logging-std-context
@@ -152,7 +146,7 @@ all modules and does not describe the project structure per-subproject.
io.spine.tools
spine-testlib
- 2.0.0-SNAPSHOT.202
+ 2.0.0-SNAPSHOT.210
test
@@ -225,6 +219,16 @@ all modules and does not describe the project structure per-subproject.
pmd-java
7.12.0
+
+ org.bouncycastle
+ bcpg-jdk18on
+ 1.80
+
+
+ org.bouncycastle
+ bcpkix-jdk18on
+ 1.80
+
org.checkerframework
checker-qual
@@ -271,25 +275,35 @@ all modules and does not describe the project structure per-subproject.
templating-plugin
2.0.0
+
+ org.jetbrains.kotlin
+ abi-tools
+ 2.2.20
+
org.jetbrains.kotlin
kotlin-build-tools-impl
- 2.1.21
+ 2.2.20
org.jetbrains.kotlin
kotlin-compiler-embeddable
- 2.1.21
+ 2.2.20
org.jetbrains.kotlin
kotlin-klib-commonizer-embeddable
- 2.1.21
+ 2.2.20
org.jetbrains.kotlin
kotlin-scripting-compiler-embeddable
- 2.1.21
+ 2.2.20
+
+
+ org.jetbrains.kotlin
+ swift-export-embeddable
+ 2.2.20
diff --git a/version.gradle.kts b/version.gradle.kts
index a98b219..c568351 100644
--- a/version.gradle.kts
+++ b/version.gradle.kts
@@ -24,4 +24,4 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-val versionToPublish: String by extra("2.0.0-SNAPSHOT.210")
+val versionToPublish: String by extra("2.0.0-SNAPSHOT.211")