diff --git a/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt b/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt
index 14f8f5266..1ec90eedb 100644
--- a/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt
+++ b/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt
@@ -37,17 +37,22 @@ import kotlin.io.path.listDirectoryEntries
* A directory containing settings files.
*
* Only the files with the [recognized extensions][Format] are considered settings files.
- * Only the files directly in the directory are considered, no subdirectories are traversed.
+ *
+ * Only the files belonging to the directory directly are considered,
+ * no subdirectories are traversed.
+ *
+ * @param path
+ * the existing path to the settings directory.
*/
public class SettingsDirectory(
- private val directory: Path
+ public val path: Path
) {
init {
- require(directory.toFile().isDirectory) {
- "The path `$directory` is not a directory."
+ require(path.toFile().isDirectory) {
+ "The path `$path` is not a directory."
}
- require(directory.exists()) {
- "The directory `$directory` does not exist."
+ require(path.exists()) {
+ "The directory `$path` does not exist."
}
}
@@ -111,7 +116,7 @@ public class SettingsDirectory(
private fun file(consumerId: String, format: Format): Path {
val fileName = "${consumerId}.${format.extensions.first()}"
- return directory.resolve(fileName)
+ return path.resolve(fileName)
}
/**
@@ -126,6 +131,6 @@ public class SettingsDirectory(
}
private fun files() =
- directory.listDirectoryEntries()
+ path.listDirectoryEntries()
.filter { it.isSettings() }
}
diff --git a/api/src/main/proto/spine/protodata/settings.proto b/api/src/main/proto/spine/protodata/settings.proto
index 8897569bc..f90179d70 100644
--- a/api/src/main/proto/spine/protodata/settings.proto
+++ b/api/src/main/proto/spine/protodata/settings.proto
@@ -70,21 +70,31 @@ extend google.protobuf.EnumValueOptions {
// Possible file extensions associated with a file format.
//
- // Only applicable to the `ConfigurationFormat` enum.
+ // Only applicable to the `Format` enum.
//
repeated string extension = 73980 [(internal) = true];
}
-// The format of a custom configuration for ProtoData.
+// The format of a protobuf message stored in a file.
+//
+// Configuration files for ProtoData and its plugins could be stored in one of these formats.
//
enum Format {
RCF_UNKNOWN = 0;
// A Protobuf message encoded in binary.
- PROTO_BINARY = 1 [(extension) = "pb", (extension) = "bin"];
+ //
+ // See: https://protobuf.dev/programming-guides/techniques/#suffixes
+ // See: https://buf.build/docs/reference/inputs#binpb
+ //
+ PROTO_BINARY = 1 [(extension) = "binpb", (extension) = "pb", (extension) = "bin"];
// A Protobuf message encoded in Protobuf JSON.
+ //
+ // Use this item instead of [JSON] for Protobuf messages stored in
+ // JSON format so that the correct parser is selected for the file.
+ //
PROTO_JSON = 2 [(extension) = "pb.json"];
// A plain JSON value.
diff --git a/api/src/test/kotlin/io/spine/protodata/settings/FormatSpec.kt b/api/src/test/kotlin/io/spine/protodata/settings/FormatSpec.kt
index f22f645d4..65078314f 100644
--- a/api/src/test/kotlin/io/spine/protodata/settings/FormatSpec.kt
+++ b/api/src/test/kotlin/io/spine/protodata/settings/FormatSpec.kt
@@ -26,7 +26,8 @@
package io.spine.protodata.settings
-import com.google.common.truth.Truth.assertThat
+import io.kotest.matchers.collections.shouldContainInOrder
+import io.kotest.matchers.shouldBe
import io.spine.protodata.settings.Format.JSON
import io.spine.protodata.settings.Format.PLAIN
import io.spine.protodata.settings.Format.PROTO_BINARY
@@ -41,18 +42,22 @@ class FormatSpec {
@Test
fun `provide allowed extensions`() {
- assertThat(RCF_UNKNOWN.extensions)
- .isEmpty()
+ RCF_UNKNOWN.extensions shouldBe emptyList()
- assertThat(JSON.extensions)
- .containsExactly("json")
- assertThat(PROTO_JSON.extensions)
- .containsExactly("pb.json")
- assertThat(PROTO_BINARY.extensions)
- .containsExactly("pb", "bin")
- assertThat(YAML.extensions)
- .containsExactly("yml", "yaml")
- assertThat(PLAIN.extensions)
- .containsExactly("txt")
+ PROTO_BINARY.extensions.shouldContainInOrder(
+ "binpb", "pb", "bin"
+ )
+ PROTO_JSON.extensions.shouldContainInOrder(
+ "pb.json"
+ )
+ JSON.extensions.shouldContainInOrder(
+ "json"
+ )
+ YAML.extensions.shouldContainInOrder(
+ "yml", "yaml"
+ )
+ PLAIN.extensions.shouldContainInOrder(
+ "txt"
+ )
}
}
diff --git a/backend/src/main/kotlin/io/spine/protodata/backend/Pipeline.kt b/backend/src/main/kotlin/io/spine/protodata/backend/Pipeline.kt
index 5f1f94dda..37702ddf1 100644
--- a/backend/src/main/kotlin/io/spine/protodata/backend/Pipeline.kt
+++ b/backend/src/main/kotlin/io/spine/protodata/backend/Pipeline.kt
@@ -80,7 +80,7 @@ public class Pipeline(
private val request: CodeGeneratorRequest,
/**
- * The directory where setting files for this pipeline are stored.
+ * The directory to which setting files for the [plugins] should be stored.
*/
private val settings: SettingsDirectory
) {
diff --git a/buildSrc/src/main/kotlin/BuildExtensions.kt b/buildSrc/src/main/kotlin/BuildExtensions.kt
index 9e51bca3c..87739c3da 100644
--- a/buildSrc/src/main/kotlin/BuildExtensions.kt
+++ b/buildSrc/src/main/kotlin/BuildExtensions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023, TeamDev. All rights reserved.
+ * 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.
@@ -31,6 +31,7 @@ import io.spine.internal.dependency.GradleDoctor
import io.spine.internal.dependency.Kotest
import io.spine.internal.dependency.Kover
import io.spine.internal.dependency.ProtoData
+import io.spine.internal.dependency.ProtoTap
import io.spine.internal.dependency.Protobuf
import io.spine.internal.dependency.Spine
import io.spine.internal.gradle.standardToSpineSdk
@@ -81,8 +82,9 @@ val PluginDependenciesSpec.mcJava: Spine.McJava
/**
* Shortcut to [ProtoData] dependency object.
*
- * This plugin is in Gradle Portal. But when used in pair with [mcJava], it cannot be applied
- * directly to a project. It is so, because [mcJava] uses [protoData] as its dependency.
+ * This plugin is published at Gradle 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.
* And buildscript's classpath ends up with both of them.
*/
val PluginDependenciesSpec.protoData: ProtoData
@@ -95,8 +97,8 @@ val PluginDependenciesSpec.protoData: ProtoData
* declared in auto-generated `org.gradle.kotlin.dsl.PluginAccessors.kt` file.
* It conflicts with our own declarations.
*
- * Declaring of top-level shortcuts eliminates need in applying plugins
- * using fully-qualified name of dependency objects.
+ * Declaring of top-level shortcuts eliminates the need in applying plugins
+ * using fully qualified name of dependency objects.
*
* It is still possible to apply a plugin with a custom version, if needed.
* Just declare a version again on the returned [PluginDependencySpec].
@@ -117,6 +119,9 @@ val PluginDependenciesSpec.errorprone: PluginDependencySpec
val PluginDependenciesSpec.protobuf: PluginDependencySpec
get() = id(Protobuf.GradlePlugin.id)
+val PluginDependenciesSpec.prototap: PluginDependencySpec
+ get() = id(ProtoTap.gradlePluginId).version(ProtoTap.version)
+
val PluginDependenciesSpec.`gradle-doctor`: PluginDependencySpec
get() = id(GradleDoctor.pluginId).version(GradleDoctor.version)
@@ -132,9 +137,9 @@ val PluginDependenciesSpec.kover: PluginDependencySpec
* Configures the dependencies between third-party Gradle tasks
* and those defined via ProtoData and Spine Model Compiler.
*
- * It is required in order to avoid warnings in build logs, detecting the undeclared
+ * 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 `launchProtoData` is used by `compileKotlin`.
*/
@Suppress("unused")
fun Project.configureTaskDependencies() {
diff --git a/buildSrc/src/main/kotlin/DependencyResolution.kt b/buildSrc/src/main/kotlin/DependencyResolution.kt
index aa2eb715a..7016e404c 100644
--- a/buildSrc/src/main/kotlin/DependencyResolution.kt
+++ b/buildSrc/src/main/kotlin/DependencyResolution.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023, TeamDev. All rights reserved.
+ * 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.
@@ -57,7 +57,7 @@ import org.gradle.api.artifacts.ConfigurationContainer
import org.gradle.api.artifacts.ResolutionStrategy
/**
- * The function to be used in `buildscript` when a fully-qualified call must be made.
+ * The function to be used in `buildscript` when a fully qualified call must be made.
*/
@Suppress("unused")
fun doForceVersions(configurations: ConfigurationContainer) {
@@ -122,6 +122,10 @@ private fun ResolutionStrategy.forceTestDependencies() {
private fun ResolutionStrategy.forceTransitiveDependencies() {
force(
Asm.lib,
+ Asm.tree,
+ Asm.analysis,
+ Asm.util,
+ Asm.commons,
AutoValue.annotations,
CommonsCli.lib,
CommonsCodec.lib,
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt
index 82550efe3..a6339fb54 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Asm.kt
@@ -29,6 +29,14 @@ package io.spine.internal.dependency
// https://asm.ow2.io/
@Suppress("unused", "ConstPropertyName")
object Asm {
- private const val version = "9.2"
+ private const val version = "9.6"
const val lib = "org.ow2.asm:asm:$version"
+
+ // We use the following artifacts only to force the versions
+ // of the dependencies which are transitive for us.
+ //
+ const val tree = "org.ow2.asm:asm-tree:$version"
+ const val analysis = "org.ow2.asm:asm-analysis:$version"
+ const val util = "org.ow2.asm:asm-util:$version"
+ const val commons = "org.ow2.asm:asm-commons:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Caffeine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Caffeine.kt
new file mode 100644
index 000000000..1ad7a6bc3
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Caffeine.kt
@@ -0,0 +1,41 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.internal.dependency
+
+/**
+ * A [high performance](https://github.com/ben-manes/caffeine/wiki/Benchmarks),
+ * [near optimal](https://github.com/ben-manes/caffeine/wiki/Efficiency) caching library.
+ *
+ * This library is a transitive dependency for us via ErrorProne.
+ *
+ * @see Caffeine at GitHub
+ */
+@Suppress("unused")
+object Caffeine {
+ private const val version = "3.0.5"
+ const val lib = "com.github.ben-manes.caffeine:caffeine:$version"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt
index 6158c678e..17cfa4584 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt
@@ -35,7 +35,7 @@ object Dokka {
* When changing the version, also change the version used in the
* `buildSrc/build.gradle.kts`.
*/
- const val version = "1.9.10"
+ const val version = "1.9.20"
object GradlePlugin {
const val id = "org.jetbrains.dokka"
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jacoco.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jacoco.kt
new file mode 100644
index 000000000..507724184
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Jacoco.kt
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+package io.spine.internal.dependency
+
+/**
+ * Code coverage library for Java.
+ *
+ * @see Releases
+ */
+@Suppress("ConstPropertyName")
+object Jacoco {
+ const val version = "0.8.12"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt
index 30f81f5c7..a4dca1f7e 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Kover.kt
@@ -29,7 +29,7 @@ package io.spine.internal.dependency
// https://github.com/Kotlin/kotlinx-kover
@Suppress("unused", "ConstPropertyName")
object Kover {
- const val version = "0.7.4"
+ const val version = "0.7.6"
const val id = "org.jetbrains.kotlinx.kover"
const val classpath = "org.jetbrains.kotlinx:kover-gradle-plugin:$version"
}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Log4j2.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Log4j2.kt
new file mode 100644
index 000000000..1da0d72c8
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Log4j2.kt
@@ -0,0 +1,42 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.internal.dependency
+
+/**
+ * An open-source logging framework.
+ *
+ * Spine uses its own [logging library][Spine.Logging], but also
+ * provides a backend implementation for [Log4j2]. This is why
+ * this dependency is needed.
+ *
+ * @see Log4j2 releases at GitHub
+ */
+@Suppress("unused", "ConstPropertyName")
+object Log4j2 {
+ private const val version = "2.20.0"
+ const val core = "org.apache.logging.log4j:log4j-core:$version"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoData.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoData.kt
index b127c2fec..25eb191a8 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoData.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoData.kt
@@ -65,7 +65,7 @@ object ProtoData {
* The version of ProtoData dependencies.
*/
val version: String
- private const val fallbackVersion = "0.20.7"
+ private const val fallbackVersion = "0.21.5"
/**
* The distinct version of ProtoData used by other build tools.
@@ -74,7 +74,7 @@ object ProtoData {
* transitional dependencies, this is the version used to build the project itself.
*/
val dogfoodingVersion: String
- private const val fallbackDfVersion = "0.20.7"
+ private const val fallbackDfVersion = "0.21.5"
/**
* The artifact for the ProtoData Gradle plugin.
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt
new file mode 100644
index 000000000..8afeb34bc
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt
@@ -0,0 +1,46 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.internal.dependency
+
+/**
+ * Dependencies on ProtoTap plugins.
+ *
+ * See [`SpineEventEngine/ProtoTap`](https://github.com/SpineEventEngine/ProtoTap/).
+ */
+@Suppress(
+ "unused" /* Some subprojects do not use ProtoData directly. */,
+ "ConstPropertyName" /* We use custom convention for artifact properties. */,
+ "MemberVisibilityCanBePrivate" /* The properties are used directly by other subprojects. */,
+)
+object ProtoTap {
+ const val group = "io.spine.tools"
+ const val version = "0.8.3"
+ const val gradlePluginId = "io.spine.prototap"
+ const val api = "$group:prototap-api:$version"
+ const val gradlePlugin = "$group:prototap-gradle-plugin:$version"
+ const val protocPlugin = "$group:prototap-protoc-plugin:$version"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt
index be80d2dfb..de40557a4 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Protobuf.kt
@@ -34,12 +34,23 @@ package io.spine.internal.dependency
object Protobuf {
private const val group = "com.google.protobuf"
const val version = "3.25.1"
+
+ /**
+ * The Java library with Protobuf data types.
+ */
+ const val javaLib = "${group}:protobuf-java:${version}"
+
+ /**
+ * The Java library containing proto definitions of Google Protobuf types.
+ */
+ @Suppress("unused")
+ const val protoSrcLib = javaLib
+
/**
- * The Java library containing proto definitions of Google Protobuf.
+ * All Java and Kotlin libraries we depend on.
*/
- const val protoSrcLib = "${group}:protobuf-java:${version}"
val libs = listOf(
- protoSrcLib,
+ javaLib,
"${group}:protobuf-java-util:${version}",
"${group}:protobuf-kotlin:${version}"
)
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt
index dd1a6943b..91a91d739 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt
@@ -52,7 +52,7 @@ object Spine {
*
* @see spine-reflect
*/
- const val reflect = "2.0.0-SNAPSHOT.183"
+ const val reflect = "2.0.0-SNAPSHOT.184"
/**
* The version of [Spine.Logging].
@@ -89,7 +89,7 @@ object Spine {
*
* @see spine-mc-java
*/
- const val mcJava = "2.0.0-SNAPSHOT.205"
+ const val mcJava = "2.0.0-SNAPSHOT.206"
/**
* The version of [Spine.baseTypes].
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/SystemLambda.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/SystemLambda.kt
new file mode 100644
index 000000000..593c3ae2d
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/SystemLambda.kt
@@ -0,0 +1,35 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.internal.dependency
+
+// https://github.com/stefanbirkner/system-lambda
+@Suppress("unused", "ConstPropertyName")
+object SystemLambda {
+ const val version = "1.2.1"
+ const val group = "com.github.stefanbirkner"
+ const val lib = "$group:system-lambda:$version"
+}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt
index ded15d831..ab1a82590 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Validation.kt
@@ -36,7 +36,7 @@ object Validation {
/**
* The version of the Validation library artifacts.
*/
- const val version = "2.0.0-SNAPSHOT.132"
+ const val version = "2.0.0-SNAPSHOT.133"
/**
* The distinct version of the Validation library used by build tools during
@@ -46,7 +46,7 @@ object Validation {
* transitional dependencies, this is the version used to build the project itself to
* avoid errors caused by incompatible API changes.
*/
- const val dogfoodingVersion = "2.0.0-SNAPSHOT.132"
+ const val dogfoodingVersion = "2.0.0-SNAPSHOT.133"
const val group = "io.spine.validation"
private const val prefix = "spine-validation"
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt
index 2ef4bd8e1..13535b8e7 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/ProjectExtensions.kt
@@ -27,6 +27,7 @@
package io.spine.internal.gradle
import io.spine.internal.gradle.publish.SpinePublishing
+import java.io.File
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
@@ -91,3 +92,9 @@ val Project.artifactId: String
val artifactId = spinePublishing?.artifactId(this)
return artifactId ?: name
}
+
+/**
+ * Returns project's build directory as [File].
+ */
+val Project.buildDirectory: File
+ get() = layout.buildDirectory.get().asFile
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt
new file mode 100644
index 000000000..b3b14584a
--- /dev/null
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2022, 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.
+ */
+
+package io.spine.internal.gradle.dokka
+
+import java.io.File
+import org.gradle.api.file.FileCollection
+import org.jetbrains.dokka.gradle.GradleDokkaSourceSetBuilder
+
+/**
+ * Returns only Java source roots out of all present in the source set.
+ *
+ * It is a helper method for generating documentation by Dokka only for Java code.
+ * It is helpful when both Java and Kotlin source files are present in a source set.
+ * Dokka can properly generate documentation for either Kotlin or Java depending on
+ * the configuration, but not both.
+ */
+@Suppress("unused")
+internal fun GradleDokkaSourceSetBuilder.onlyJavaSources(): FileCollection {
+ return sourceRoots.filter(File::isJavaSourceDirectory)
+}
+
+private fun File.isJavaSourceDirectory(): Boolean {
+ return isDirectory && name == "java"
+}
diff --git a/protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt
similarity index 82%
rename from protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt
rename to buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt
index ad6896088..fb116851f 100644
--- a/protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt
@@ -24,15 +24,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package io.spine.protodata.protoc
+package io.spine.internal.gradle.dokka
-import java.util.*
-import kotlin.text.Charsets.UTF_8
+import org.gradle.api.tasks.TaskContainer
+import org.jetbrains.dokka.gradle.DokkaTask
/**
- * Decodes a UTF-8 string encoded in Base64 in this string.
+ * Finds the `dokkaHtml` Gradle task.
*/
-internal fun String.decodeBase64(): String {
- val bytes = Base64.getDecoder().decode(this)
- return String(bytes, UTF_8)
-}
+@Suppress("unused")
+fun TaskContainer.dokkaHtmlTask() = this.getByName("dokkaHtml") as DokkaTask
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt
index b2964cee2..3307b94d2 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt
@@ -58,6 +58,9 @@ fun KotlinCompile.setFreeCompilerArgs() {
"-Xskip-prerelease-check",
"-Xjvm-default=all",
"-Xinline-classes",
+ // Avoid Kotlin compiler warning for `expect/actual` classes.
+ // See: https://youtrack.jetbrains.com/issue/KT-61573
+ "-Xexpect-actual-classes",
"-opt-in=" +
"kotlin.contracts.ExperimentalContracts," +
"kotlin.io.path.ExperimentalPathApi," +
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt
index 0c4c8b419..de78a5ec8 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/protobuf/ProtoTaskExtensions.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023, TeamDev. All rights reserved.
+ * 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.
@@ -134,7 +134,8 @@ private fun GenerateProtoTask.setupDescriptorSetFileCreation() {
// The name of the generated file reflects project's Maven coordinates.
val ssn = sourceSet.name
generateDescriptorSet = true
- val descriptorsDir = "${project.buildDir}/descriptors/${ssn}"
+ val buildDir = project.layout.buildDirectory.asFile.get().path
+ val descriptorsDir = "$buildDir/descriptors/${ssn}"
val descriptorName = project.descriptorSetName(sourceSet)
with(descriptorSetOptions) {
path = "$descriptorsDir/$descriptorName"
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt
index fef068219..68b68a2bf 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/GitHubPackages.kt
@@ -28,6 +28,7 @@ package io.spine.internal.gradle.publish
import io.spine.internal.gradle.Credentials
import io.spine.internal.gradle.Repository
+import io.spine.internal.gradle.buildDirectory
import net.lingala.zip4j.ZipFile
import org.gradle.api.Project
@@ -90,7 +91,7 @@ private fun Project.readGitHubToken(): String {
* use such a workaround.
*/
private fun Project.readTokenFromArchive(): String {
- val targetDir = "${buildDir}/token"
+ val targetDir = "$buildDirectory/token"
file(targetDir).mkdirs()
val fileToUnzip = "${rootDir}/buildSrc/aus.weis"
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt
index b97a5ee50..d7c6745e7 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/IncrementGuard.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023, TeamDev. All rights reserved.
+ * 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.
@@ -45,11 +45,13 @@ class IncrementGuard : Plugin {
/**
* Adds the [CheckVersionIncrement] task to the project.
*
- * Only adds the check if the project is built on Travis CI and the job is a pull request.
+ * The task is created anyway, but it is enabled only if:
+ * 1. The project is built on GitHub CI, and
+ * 2. The job is a pull request.
*
- * The task only runs on non-master branches on GitHub Actions. This is done
- * to prevent unexpected CI fails when re-building `master` multiple times, creating git
- * tags, and in other cases that go outside of the "usual" development cycle.
+ * The task only runs on non-master branches on GitHub Actions.
+ * This is done to prevent unexpected CI fails when re-building `master` multiple times,
+ * creating git tags, and in other cases that go outside the "usual" development cycle.
*/
override fun apply(target: Project) {
val tasks = target.tasks
@@ -57,7 +59,6 @@ class IncrementGuard : Plugin {
repository = CloudRepo.published
tasks.getByName("check").dependsOn(this)
- shouldRunAfter("test")
if (!shouldCheckVersion()) {
logger.info(
"The build does not represent a GitHub Actions feature branch job, " +
@@ -72,7 +73,7 @@ class IncrementGuard : Plugin {
* Returns `true` if the current build is a GitHub Actions build which represents a push
* to a feature branch.
*
- * Returns `false` if the associated reference is not a branch (e.g. a tag) or if it has
+ * Returns `false` if the associated reference is not a branch (e.g., a tag) or if it has
* the name which ends with `master` or `main`.
*
* For example, on the following branches the method would return `false`:
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt
index 78e739544..fc985ccec 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt
@@ -38,11 +38,11 @@ import org.gradle.api.publish.PublishingExtension
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.Jar
+import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.register
-import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.withType
/**
@@ -58,10 +58,23 @@ internal val Project.publications: PublicationContainer
get() = publishingExtension.publications
/**
- * Obtains [SpinePublishing] extension from the root project.
+ * Obtains [SpinePublishing] extension from this [Project].
+ *
+ * If this [Project] doesn't have one, it returns [SpinePublishing]
+ * declared in the root project.
*/
internal val Project.spinePublishing: SpinePublishing
- get() = this.rootProject.the()
+ get() {
+ val local = this.extensions.findByType()
+ if (local != null) {
+ return local
+ }
+ val fromRoot = this.rootProject.extensions.findByType()
+ if (fromRoot != null) {
+ return fromRoot
+ }
+ error("`SpinePublishing` is not found in `${project.name}`.")
+ }
/**
* Tells if this project has custom publishing.
@@ -212,7 +225,8 @@ internal fun Project.testJar(): TaskProvider = tasks.getOrCreate("testJar")
*/
fun Project.javadocJar(): TaskProvider = tasks.getOrCreate("javadocJar") {
archiveClassifier.set("javadoc")
- from(files("$buildDir/docs/javadoc"))
+ val javadocFiles = layout.buildDirectory.files("/docs/javadoc")
+ from(javadocFiles)
dependsOn("javadoc")
}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt
index f55b85f37..fb9203717 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/SpinePublishing.kt
@@ -24,6 +24,8 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+@file:Suppress("TooManyFunctions")
+
package io.spine.internal.gradle.publish
import dokkaJavaJar
@@ -152,6 +154,22 @@ open class SpinePublishing(private val project: Project) {
*/
var modules: Set = emptySet()
+ /**
+ * Controls whether the published module needs standard publications.
+ *
+ * If `true`, the module should configure publications on its own.
+ * Otherwise, the extension will configure standard [ones][StandardJavaPublicationHandler].
+ *
+ * This property is analogue of [modulesWithCustomPublishing] for projects,
+ * for which [spinePublishing] is configured individually.
+ *
+ * Setting of this property and having a non-empty [modules] will lead
+ * to an exception.
+ *
+ * Default value is `false`.
+ */
+ var customPublishing = false
+
/**
* Set of modules that have custom publications and do not need standard ones.
*
@@ -299,7 +317,8 @@ open class SpinePublishing(private val project: Project) {
internal fun configured() {
ensureProtoJarExclusionsArePublished()
ensureTestJarInclusionsArePublished()
- ensuresModulesNotDuplicated()
+ ensureModulesNotDuplicated()
+ ensureCustomPublishingNotMisused()
val projectsToPublish = projectsToPublish()
projectsToPublish.forEach { project ->
@@ -352,7 +371,7 @@ open class SpinePublishing(private val project: Project) {
* we configure publishing for it.
*/
private fun Project.setUpPublishing(jarFlags: JarFlags) {
- val customPublishing = modulesWithCustomPublishing.contains(name)
+ val customPublishing = modulesWithCustomPublishing.contains(name) || customPublishing
val handler = if (customPublishing) {
CustomPublicationHandler(project, destinations)
} else {
@@ -409,7 +428,7 @@ open class SpinePublishing(private val project: Project) {
* We allow configuration of publishing from two places - a root project and module itself.
* Here we verify that publishing of a module is not configured in both places simultaneously.
*/
- private fun ensuresModulesNotDuplicated() {
+ private fun ensureModulesNotDuplicated() {
val rootProject = project.rootProject
if (rootProject == project) {
return
@@ -425,4 +444,11 @@ open class SpinePublishing(private val project: Project) {
}
}
}
+
+ private fun ensureCustomPublishingNotMisused() {
+ if (modules.isNotEmpty() && customPublishing) {
+ error("`customPublishing` property can be set only if `spinePublishing` extension " +
+ "is open in an individual module, so `modules` property should be empty.")
+ }
+ }
}
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt
index 4d789a596..36a4c2043 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/coverage/JacocoConfig.kt
@@ -26,6 +26,7 @@
package io.spine.internal.gradle.report.coverage
+import io.spine.internal.dependency.Jacoco
import io.spine.internal.gradle.applyPlugin
import io.spine.internal.gradle.findTask
import io.spine.internal.gradle.report.coverage.TaskName.check
@@ -36,7 +37,6 @@ import io.spine.internal.gradle.sourceSets
import java.io.File
import java.util.*
import org.gradle.api.Project
-import org.gradle.api.Task
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.tasks.Copy
@@ -45,7 +45,9 @@ import org.gradle.api.tasks.SourceSetOutput
import org.gradle.api.tasks.TaskContainer
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.get
+import org.gradle.kotlin.dsl.the
import org.gradle.testing.jacoco.plugins.JacocoPlugin
+import org.gradle.testing.jacoco.plugins.JacocoPluginExtension
import org.gradle.testing.jacoco.tasks.JacocoReport
/**
@@ -90,7 +92,8 @@ class JacocoConfig(
fun applyTo(project: Project) {
project.applyPlugin(BasePlugin::class.java)
val javaProjects: Iterable = eligibleProjects(project)
- val reportsDir = project.rootProject.buildDir.resolve(reportsDirSuffix)
+ val reportsDir = project.rootProject.layout
+ .buildDirectory.dir(reportsDirSuffix).get().asFile
JacocoConfig(project.rootProject, reportsDir, javaProjects).configure()
}
@@ -117,12 +120,22 @@ class JacocoConfig(
}
private fun configure() {
+ configureVersion()
+ configureTask()
+ }
+
+ private fun configureVersion() {
+ val jacoco = rootProject.the()
+ jacoco.toolVersion = Jacoco.version
+ }
+
+ private fun configureTask() {
val tasks = rootProject.tasks
val copyReports = registerCopy(tasks)
val rootReport = registerRootReport(tasks, copyReports)
- rootProject
- .findTask(check.name)
- .dependsOn(rootReport)
+ tasks.named(check.name) {
+ dependsOn(rootReport)
+ }
}
private fun registerRootReport(
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt
index f7f1a312c..500a25169 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/report/license/LicenseReporter.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2023, TeamDev. All rights reserved.
+ * 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.
@@ -80,7 +80,7 @@ object LicenseReporter {
*/
fun generateReportIn(project: Project) {
project.applyPlugin(LicenseReportPlugin::class.java)
- val reportOutputDir = project.buildDir.resolve(Paths.relativePath)
+ val reportOutputDir = project.layout.buildDirectory.dir(Paths.relativePath).get().asFile
with(project.the()) {
outputDir = reportOutputDir.absolutePath
@@ -146,7 +146,8 @@ object LicenseReporter {
rootProject: Project
) {
val paths = sourceProjects.map {
- "${it.buildDir}/${Paths.relativePath}/${Paths.outputFilename}"
+ val buildDir = it.layout.buildDirectory.asFile.get()
+ "$buildDir/${Paths.relativePath}/${Paths.outputFilename}"
}
println("Merging the license reports from the all projects.")
val mergedContent = paths.joinToString("\n\n\n") { (File(it)).readText() }
diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt
index 1d7a656e9..f501940c1 100644
--- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt
+++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/testing/Tasks.kt
@@ -75,7 +75,7 @@ private const val SLOW_TAG = "slow"
/**
* Executes JUnit tests filtering out the ones tagged as `slow`.
*/
-private open class FastTest : Test() {
+private abstract class FastTest : Test() {
init {
description = "Executes all JUnit tests but the ones tagged as `slow`."
group = "Verification"
@@ -89,7 +89,7 @@ private open class FastTest : Test() {
/**
* Executes JUnit tests tagged as `slow`.
*/
-private open class SlowTest : Test() {
+private abstract class SlowTest : Test() {
init {
description = "Executes JUnit tests tagged as `slow`."
group = "Verification"
diff --git a/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts b/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts
index b6b493269..4c0ae904f 100644
--- a/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts
+++ b/buildSrc/src/main/kotlin/jacoco-kotlin-jvm.gradle.kts
@@ -24,11 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-import java.io.File
-import org.gradle.kotlin.dsl.getValue
-import org.gradle.kotlin.dsl.getting
-import org.gradle.kotlin.dsl.jacoco
-import org.gradle.testing.jacoco.tasks.JacocoReport
+import io.spine.internal.gradle.buildDirectory
plugins {
jacoco
@@ -55,7 +51,7 @@ private val about = ""
*/
val jacocoTestReport: JacocoReport by tasks.getting(JacocoReport::class) {
- val classFiles = File("${buildDir}/classes/kotlin/jvm/")
+ val classFiles = File("$buildDirectory/classes/kotlin/jvm/")
.walkBottomUp()
.toSet()
classDirectories.setFrom(classFiles)
@@ -66,5 +62,5 @@ val jacocoTestReport: JacocoReport by tasks.getting(JacocoReport::class) {
)
sourceDirectories.setFrom(files(coverageSourceDirs))
- executionData.setFrom(files("${buildDir}/jacoco/jvmTest.exec"))
+ executionData.setFrom(files("$buildDirectory/jacoco/jvmTest.exec"))
}
diff --git a/buildSrc/src/main/kotlin/jvm-module.gradle.kts b/buildSrc/src/main/kotlin/jvm-module.gradle.kts
index b6473b561..b0f323332 100644
--- a/buildSrc/src/main/kotlin/jvm-module.gradle.kts
+++ b/buildSrc/src/main/kotlin/jvm-module.gradle.kts
@@ -31,6 +31,7 @@ import io.spine.internal.dependency.Dokka
import io.spine.internal.dependency.ErrorProne
import io.spine.internal.dependency.Guava
import io.spine.internal.dependency.JUnit
+import io.spine.internal.dependency.Jacoco
import io.spine.internal.dependency.JavaX
import io.spine.internal.dependency.Kotest
import io.spine.internal.dependency.Protobuf
@@ -107,7 +108,7 @@ fun Module.configureKotlin(javaVersion: JavaLanguageVersion) {
}
kover {
- useJacoco()
+ useJacoco(version = Jacoco.version)
}
koverReport {
@@ -159,7 +160,8 @@ fun Module.forceConfigurations() {
force(
JUnit.bom,
JUnit.runner,
- Dokka.BasePlugin.lib
+ Dokka.BasePlugin.lib,
+ Spine.reflect
)
}
}
diff --git a/config b/config
index bb06dc1f6..3d1243345 160000
--- a/config
+++ b/config
@@ -1 +1 @@
-Subproject commit bb06dc1f6d6e3f687a423d08c15c74ce58950849
+Subproject commit 3d1243345b366bc34020991e9cb8d77a930269fc
diff --git a/dependencies.md b/dependencies.md
index afeae9386..327fe553a 100644
--- a/dependencies.md
+++ b/dependencies.md
@@ -1,6 +1,6 @@
-# Dependencies of `io.spine.protodata:protodata-api:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-api:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -114,7 +114,7 @@
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -551,7 +551,7 @@
1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -926,12 +926,12 @@
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:09 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:39 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-backend:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-backend:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -1045,7 +1045,7 @@ This report was generated on **Sun Apr 21 16:39:09 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -1483,6 +1483,7 @@ This report was generated on **Sun Apr 21 16:39:09 WEST 2024** using [Gradle-Lic
1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -1857,12 +1858,12 @@ This report was generated on **Sun Apr 21 16:39:09 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:10 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:39 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-cli:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-cli:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -1981,7 +1982,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -2441,6 +2442,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -2815,12 +2817,12 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:10 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:40 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-cli-api:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-cli-api:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -2934,7 +2936,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -3361,7 +3363,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -3726,12 +3728,12 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:10 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:40 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-gradle-api:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-gradle-api:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -3845,7 +3847,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -4276,7 +4278,7 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -4641,12 +4643,12 @@ This report was generated on **Sun Apr 21 16:39:10 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:11 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:41 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-gradle-plugin:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-gradle-plugin:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -4760,7 +4762,7 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -5240,7 +5242,7 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -5727,12 +5729,12 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:11 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:41 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-java:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-java:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -5846,7 +5848,7 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -6284,6 +6286,7 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -6658,55 +6661,18 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:11 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:41 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-protoc:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-protoc:0.21.6`
## Runtime
-1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
- * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/)
- * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9.
- * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson)
- * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.18.0.
- * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1.
- * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/)
- * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.0.1-jre.
- * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
- * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava.
- * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
-1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 2.8.
- * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/)
- * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.25.1.
* **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
* **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.25.1.
- * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
- * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-
-1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.25.1.
- * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-
-1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.33.0.
- * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/)
- * **License:** [The MIT License](http://opensource.org/licenses/MIT)
-
1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0.
* **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org)
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -6819,9 +6785,6 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation)
* **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.18.0.
- * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.21.1.
* **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations)
* **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -6858,10 +6821,6 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/)
* **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.0.1-jre.
- * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
- * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
-
1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.1-jre.
* **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
* **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
@@ -6897,17 +6856,10 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
* **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.25.1.
- * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
- * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-
1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.25.2.
* **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
* **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.25.1.
- * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
-
1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.25.2.
* **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
@@ -7439,12 +7391,12 @@ This report was generated on **Sun Apr 21 16:39:11 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:12 WEST 2024** 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).
+This report was generated on **Thu May 09 14:49:42 WEST 2024** 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).
-# Dependencies of `io.spine.protodata:protodata-test-env:0.21.5`
+# Dependencies of `io.spine.protodata:protodata-test-env:0.21.6`
## Runtime
1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
@@ -7558,7 +7510,7 @@ This report was generated on **Sun Apr 21 16:39:12 WEST 2024** using [Gradle-Lic
* **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
* **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
* **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
* **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
@@ -8013,6 +7965,7 @@ This report was generated on **Sun Apr 21 16:39:12 WEST 2024** using [Gradle-Lic
1. **Group** : io.spine.validation. **Name** : spine-validation-java-bundle. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.132.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
* **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
* **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
@@ -8395,4 +8348,1038 @@ This report was generated on **Sun Apr 21 16:39:12 WEST 2024** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Sun Apr 21 16:39:12 WEST 2024** 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
+This report was generated on **Thu May 09 14:49:42 WEST 2024** 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).
+
+
+
+
+# Dependencies of `io.spine.protodata:protodata-testlib:0.21.6`
+
+## Runtime
+1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4.
+ * **Project URL:** [http://source.android.com/](http://source.android.com/)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.22.0.
+ * **Project URL:** [https://github.com/googleapis/sdk-platform-java](https://github.com/googleapis/sdk-platform-java)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.1.
+ * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
+ * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.10.1.
+ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.21.1.
+ * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4.
+ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger)
+ * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4.
+ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger)
+ * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1.
+ * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.3-jre.
+ * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre.
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 2.8.
+ * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.25.2.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.25.2.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.25.2.
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0.
+ * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+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.grpc. **Name** : grpc-api. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-util. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.perfmark. **Name** : perfmark-api. **Version** : 0.26.0.
+ * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
+1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
+ * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
+ * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
+
+1. **Group** : junit. **Name** : junit. **Version** : 4.13.2.
+ * **Project URL:** [http://junit.org](http://junit.org)
+ * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html)
+
+1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2.
+ * **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.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)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.37.0.
+ * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.23.
+ * **License:** [MIT license](https://spdx.org/licenses/MIT.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3.
+ * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php)
+
+1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final.
+ * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html)
+ * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt)
+
+1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final.
+ * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html)
+ * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt)
+
+1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0.
+ * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.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** : 1.9.23.
+ * **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** : 1.9.23.
+ * **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** : 1.9.23.**No license information found**
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.9.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** : kotlin-stdlib-jdk8. **Version** : 1.9.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.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.6.4.**No license information found**
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found**
+1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0.
+ * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j)
+ * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.5.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.yaml. **Name** : snakeyaml. **Version** : 2.1.
+ * **Project URL:** [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+## Compile, tests, and tooling
+1. **Group** : aopalliance. **Name** : aopalliance. **Version** : 1.0.
+ * **Project URL:** [http://aopalliance.sourceforge.net](http://aopalliance.sourceforge.net)
+ * **License:** Public Domain
+
+1. **Group** : com.beust. **Name** : jcommander. **Version** : 1.82.
+ * **Project URL:** [https://jcommander.org](https://jcommander.org)
+ * **License:** [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.12.7.**No license information found**
+1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.15.3.**No license information found**
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.12.7.
+ * **Project URL:** [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-annotations. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.12.7.
+ * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core)
+ * **License:** [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.fasterxml.jackson.core. **Name** : jackson-core. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.12.7.1.
+ * **Project URL:** [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson)
+ * **License:** [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.fasterxml.jackson.core. **Name** : jackson-databind. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-xml. **Version** : 2.12.7.
+ * **Project URL:** [https://github.com/FasterXML/jackson-dataformat-xml](https://github.com/FasterXML/jackson-dataformat-xml)
+ * **License:** [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.fasterxml.jackson.dataformat. **Name** : jackson-dataformat-yaml. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.jackson.module. **Name** : jackson-module-jaxb-annotations. **Version** : 2.12.7.
+ * **Project URL:** [https://github.com/FasterXML/jackson-modules-base](https://github.com/FasterXML/jackson-modules-base)
+ * **License:** [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.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.12.7.
+ * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin)
+ * **License:** [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.fasterxml.jackson.module. **Name** : jackson-module-kotlin. **Version** : 2.15.3.
+ * **Project URL:** [https://github.com/FasterXML/jackson-module-kotlin](https://github.com/FasterXML/jackson-module-kotlin)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.fasterxml.woodstox. **Name** : woodstox-core. **Version** : 6.2.4.
+ * **Project URL:** [https://github.com/FasterXML/woodstox](https://github.com/FasterXML/woodstox)
+ * **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** : 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)
+
+1. **Group** : com.github.kevinstern. **Name** : software-and-algorithms. **Version** : 1.0.
+ * **Project URL:** [https://www.github.com/KevinStern/software-and-algorithms](https://www.github.com/KevinStern/software-and-algorithms)
+ * **License:** [MIT License](http://www.opensource.org/licenses/mit-license.php)
+
+1. **Group** : com.google.android. **Name** : annotations. **Version** : 4.1.1.4.
+ * **Project URL:** [http://source.android.com/](http://source.android.com/)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.22.0.
+ * **Project URL:** [https://github.com/googleapis/sdk-platform-java](https://github.com/googleapis/sdk-platform-java)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.auto. **Name** : auto-common. **Version** : 1.2.1.
+ * **Project URL:** [https://github.com/google/auto/tree/master/common](https://github.com/google/auto/tree/master/common)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.auto.service. **Name** : auto-service-annotations. **Version** : 1.0.1.
+ * **Project URL:** [https://github.com/google/auto/tree/master/service](https://github.com/google/auto/tree/master/service)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.10.1.
+ * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.auto.value. **Name** : auto-value-annotations. **Version** : 1.9.
+ * **Project URL:** [https://github.com/google/auto/tree/master/value](https://github.com/google/auto/tree/master/value)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2.
+ * **Project URL:** [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.10.1.
+ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.8.9.
+ * **Project URL:** [https://github.com/google/gson/gson](https://github.com/google/gson/gson)
+ * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_annotation. **Version** : 2.23.0.
+ * **Project URL:** [https://errorprone.info/error_prone_annotation](https://errorprone.info/error_prone_annotation)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.21.1.
+ * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_annotations. **Version** : 2.23.0.
+ * **Project URL:** [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_check_api. **Version** : 2.23.0.
+ * **Project URL:** [https://errorprone.info/error_prone_check_api](https://errorprone.info/error_prone_check_api)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_core. **Version** : 2.23.0.
+ * **Project URL:** [https://errorprone.info/error_prone_core](https://errorprone.info/error_prone_core)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : error_prone_type_annotations. **Version** : 2.23.0.
+ * **Project URL:** [https://errorprone.info/error_prone_type_annotations](https://errorprone.info/error_prone_type_annotations)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.errorprone. **Name** : javac. **Version** : 9+181-r4173-1.
+ * **Project URL:** [https://github.com/google/error-prone-javac](https://github.com/google/error-prone-javac)
+ * **License:** [GNU General Public License, version 2, with the Classpath Exception](http://openjdk.java.net/legal/gplv2+ce.html)
+
+1. **Group** : com.google.flogger. **Name** : flogger. **Version** : 0.7.4.
+ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger)
+ * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.flogger. **Name** : flogger-system-backend. **Version** : 0.7.4.
+ * **Project URL:** [https://github.com/google/flogger](https://github.com/google/flogger)
+ * **License:** [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : failureaccess. **Version** : 1.0.1.
+ * **Project URL:** [https://github.com/google/guava/](https://github.com/google/guava/)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.1-jre.
+ * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : guava. **Version** : 32.1.3-jre.
+ * **Project URL:** [https://github.com/google/guava](https://github.com/google/guava)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : guava-parent. **Version** : 32.1.1-jre.**No license information found**
+1. **Group** : com.google.guava. **Name** : guava-testlib. **Version** : 31.1-jre.
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.guava. **Name** : listenablefuture. **Version** : 9999.0-empty-to-avoid-conflict-with-guava.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.inject. **Name** : guice. **Version** : 5.1.0.
+ * **Project URL:** [https://github.com/google/guice](https://github.com/google/guice)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.j2objc. **Name** : j2objc-annotations. **Version** : 2.8.
+ * **Project URL:** [https://github.com/google/j2objc/](https://github.com/google/j2objc/)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.19.6.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-java. **Version** : 3.25.2.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-java-util. **Version** : 3.25.2.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protobuf-kotlin. **Version** : 3.25.2.
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+
+1. **Group** : com.google.protobuf. **Name** : protoc. **Version** : 3.25.1.
+ * **Project URL:** [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/)
+ * **License:** [BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth. **Name** : truth. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-java8-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-liteproto-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.google.truth.extensions. **Name** : truth-proto-extension. **Version** : 1.1.5.
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : com.soywiz.korlibs.korte. **Name** : korte-jvm. **Version** : 2.7.0.
+ * **Project URL:** [https://github.com/korlibs/korge-next](https://github.com/korlibs/korge-next)
+ * **License:** [MIT](https://raw.githubusercontent.com/korlibs/korge-next/master/korge/LICENSE.txt)
+
+1. **Group** : com.squareup. **Name** : javapoet. **Version** : 1.13.0.
+ * **Project URL:** [http://github.com/square/javapoet/](http://github.com/square/javapoet/)
+ * **License:** [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : io.github.davidburstrom.contester. **Name** : contester-breakpoint. **Version** : 0.2.0.
+ * **Project URL:** [https://github.com/davidburstrom/contester](https://github.com/davidburstrom/contester)
+ * **License:** [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : io.github.detekt.sarif4k. **Name** : sarif4k. **Version** : 0.4.0.**No license information found**
+1. **Group** : io.github.detekt.sarif4k. **Name** : sarif4k-jvm. **Version** : 0.4.0.
+ * **Project URL:** [https://detekt.github.io/detekt](https://detekt.github.io/detekt)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : io.github.eisop. **Name** : dataflow-errorprone. **Version** : 3.34.0-eisop1.
+ * **Project URL:** [https://eisop.github.io/](https://eisop.github.io/)
+ * **License:** [GNU General Public License, version 2 (GPL2), with the classpath exception](http://www.gnu.org/software/classpath/license.html)
+
+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.gitlab.arturbosch.detekt. **Name** : detekt-api. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-cli. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-core. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-metrics. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-parser. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-psi-utils. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-report-html. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-report-md. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-report-sarif. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-report-txt. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-report-xml. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-complexity. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-coroutines. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-documentation. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-empty. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-errorprone. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-exceptions. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-naming. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-performance. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-rules-style. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-tooling. **Version** : 1.23.0.
+ * **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.gitlab.arturbosch.detekt. **Name** : detekt-utils. **Version** : 1.23.0.
+ * **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.grpc. **Name** : grpc-api. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.grpc. **Name** : grpc-util. **Version** : 1.59.0.
+ * **Project URL:** [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.kotest. **Name** : kotest-assertions-api. **Version** : 5.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.5.5.
+ * **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.perfmark. **Name** : perfmark-api. **Version** : 0.26.0.
+ * **Project URL:** [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark)
+ * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
+
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.110.**No license information found**
+1. **Group** : io.spine.validation. **Name** : spine-validation-java-runtime. **Version** : 2.0.0-SNAPSHOT.133.**No license information found**
+1. **Group** : jakarta.activation. **Name** : jakarta.activation-api. **Version** : 1.2.1.
+ * **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
+ * **License:** [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
+ * **License:** [Eclipse Public License v. 2.0](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt)
+ * **License:** [GNU General Public License, version 2 with the GNU Classpath Exception](https://www.gnu.org/software/classpath/license.html)
+
+1. **Group** : jakarta.xml.bind. **Name** : jakarta.xml.bind-api. **Version** : 2.3.2.
+ * **Project URL:** [https://www.eclipse.org](https://www.eclipse.org)
+ * **License:** [Eclipse Distribution License - v 1.0](http://www.eclipse.org/org/documents/edl-v10.php)
+ * **License:** [Eclipse Public License v. 2.0](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt)
+ * **License:** [GNU General Public License, version 2 with the GNU Classpath Exception](https://www.gnu.org/software/classpath/license.html)
+
+1. **Group** : javax.annotation. **Name** : javax.annotation-api. **Version** : 1.3.2.
+ * **Project URL:** [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250)
+ * **License:** [CDDL + GPLv2 with classpath exception](https://github.com/javaee/javax.annotation/blob/master/LICENSE)
+
+1. **Group** : javax.inject. **Name** : javax.inject. **Version** : 1.
+ * **Project URL:** [http://code.google.com/p/atinject/](http://code.google.com/p/atinject/)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : junit. **Name** : junit. **Version** : 4.13.2.
+ * **Project URL:** [http://junit.org](http://junit.org)
+ * **License:** [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html)
+
+1. **Group** : net.java.dev.jna. **Name** : jna. **Version** : 5.6.0.
+ * **Project URL:** [https://github.com/java-native-access/jna](https://github.com/java-native-access/jna)
+ * **License:** [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [LGPL, version 2.1](http://www.gnu.org/licenses/licenses.html)
+
+1. **Group** : org.apiguardian. **Name** : apiguardian-api. **Version** : 1.1.2.
+ * **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.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)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.33.0.
+ * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.37.0.
+ * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.checkerframework. **Name** : checker-qual. **Version** : 3.40.0.
+ * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/)
+ * **License:** [The MIT License](http://opensource.org/licenses/MIT)
+
+1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.23.
+ * **License:** [MIT license](https://spdx.org/licenses/MIT.txt)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.codehaus.woodstox. **Name** : stax2-api. **Version** : 4.2.1.
+ * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+ * **License:** [The BSD License](http://www.opensource.org/licenses/bsd-license.php)
+
+1. **Group** : org.freemarker. **Name** : freemarker. **Version** : 2.3.31.
+ * **Project URL:** [https://freemarker.apache.org/](https://freemarker.apache.org/)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.hamcrest. **Name** : hamcrest-core. **Version** : 1.3.
+ * **License:** [New BSD License](http://www.opensource.org/licenses/bsd-license.php)
+
+1. **Group** : org.jacoco. **Name** : org.jacoco.agent. **Version** : 0.8.8.
+ * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/)
+
+1. **Group** : org.jacoco. **Name** : org.jacoco.ant. **Version** : 0.8.8.
+ * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/)
+
+1. **Group** : org.jacoco. **Name** : org.jacoco.core. **Version** : 0.8.8.
+ * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/)
+
+1. **Group** : org.jacoco. **Name** : org.jacoco.report. **Version** : 0.8.8.
+ * **License:** [Eclipse Public License 2.0](https://www.eclipse.org/legal/epl-2.0/)
+
+1. **Group** : org.jboss.forge.roaster. **Name** : roaster-api. **Version** : 2.28.0.Final.
+ * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html)
+ * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt)
+
+1. **Group** : org.jboss.forge.roaster. **Name** : roaster-jdt. **Version** : 2.28.0.Final.
+ * **License:** [Eclipse Public License version 1.0](http://www.eclipse.org/legal/epl-v10.html)
+ * **License:** [Public Domain](http://repository.jboss.org/licenses/cc0-1.0.txt)
+
+1. **Group** : org.jetbrains. **Name** : annotations. **Version** : 13.0.
+ * **Project URL:** [http://www.jetbrains.org](http://www.jetbrains.org)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains. **Name** : markdown. **Version** : 0.3.1.**No license information found**
+1. **Group** : org.jetbrains. **Name** : markdown-jvm. **Version** : 0.3.1.
+ * **Project URL:** [https://github.com/JetBrains/markdown](https://github.com/JetBrains/markdown)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : analysis-kotlin-descriptors. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : analysis-markdown. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : dokka-base. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : dokka-core. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : javadoc-plugin. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.dokka. **Name** : kotlin-as-java-plugin. **Version** : 1.9.10.
+ * **Project URL:** [https://github.com/Kotlin/dokka](https://github.com/Kotlin/dokka)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.intellij.deps. **Name** : trove4j. **Version** : 1.0.20200330.
+ * **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-compiler-embeddable. **Version** : 1.8.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** : 1.8.22.
+ * **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** : 1.8.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** : 1.8.22.
+ * **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-klib-commonizer-embeddable. **Version** : 1.8.22.
+ * **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** : 1.6.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** : kotlin-reflect. **Version** : 1.8.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** : 1.9.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** : kotlin-reflect. **Version** : 1.9.23.
+ * **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** : 1.8.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** : 1.8.22.
+ * **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-scripting-common. **Version** : 1.8.22.
+ * **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-scripting-compiler-embeddable. **Version** : 1.8.22.
+ * **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-scripting-compiler-impl-embeddable. **Version** : 1.8.22.
+ * **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-scripting-jvm. **Version** : 1.8.22.
+ * **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** : 1.8.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** : 1.8.22.
+ * **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** : 1.9.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** : kotlin-stdlib. **Version** : 1.9.23.
+ * **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** : 1.8.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** : 1.8.22.
+ * **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** : 1.9.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** : kotlin-stdlib-common. **Version** : 1.9.23.**No license information found**
+1. **Group** : org.jetbrains.kotlin. **Name** : kotlin-stdlib-jdk7. **Version** : 1.8.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-jdk7. **Version** : 1.8.22.
+ * **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-jdk7. **Version** : 1.9.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** : kotlin-stdlib-jdk8. **Version** : 1.8.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-jdk8. **Version** : 1.8.22.
+ * **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-jdk8. **Version** : 1.9.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** : kotlin-test. **Version** : 1.8.22.
+ * **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-test-annotations-common. **Version** : 1.8.22.
+ * **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-test-common. **Version** : 1.8.22.
+ * **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-test-junit5. **Version** : 1.8.22.
+ * **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.kotlinx. **Name** : atomicfu. **Version** : 0.17.3.
+ * **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)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.6.3.**No license information found**
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-bom. **Version** : 1.6.4.**No license information found**
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.3.**No license information found**
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.3.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-core-jvm. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-coroutines-jdk8. **Version** : 1.6.4.
+ * **Project URL:** [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines)
+ * **License:** [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-html-jvm. **Version** : 0.7.5.
+ * **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-html-jvm. **Version** : 0.8.1.
+ * **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-core. **Version** : 1.4.1.**No license information found**
+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-json. **Version** : 1.4.1.**No license information found**
+1. **Group** : org.jetbrains.kotlinx. **Name** : kotlinx-serialization-json-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.jsoup. **Name** : jsoup. **Version** : 1.15.3.
+ * **Project URL:** [https://jsoup.org/](https://jsoup.org/)
+ * **License:** [The MIT License](https://jsoup.org/license)
+
+1. **Group** : org.junit. **Name** : junit-bom. **Version** : 5.10.0.**No license information found**
+1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-api. **Version** : 5.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-engine. **Version** : 5.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.jupiter. **Name** : junit-jupiter-params. **Version** : 5.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.platform. **Name** : junit-platform-commons. **Version** : 1.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.junit.platform. **Name** : junit-platform-engine. **Version** : 1.10.0.
+ * **Project URL:** [https://junit.org/junit5/](https://junit.org/junit5/)
+ * **License:** [Eclipse Public License v2.0](https://www.eclipse.org/legal/epl-v20.html)
+
+1. **Group** : org.opentest4j. **Name** : opentest4j. **Version** : 1.3.0.
+ * **Project URL:** [https://github.com/ota4j-team/opentest4j](https://github.com/ota4j-team/opentest4j)
+ * **License:** [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.2.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm. **Version** : 9.5.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm-analysis. **Version** : 9.2.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm-commons. **Version** : 9.2.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.ow2.asm. **Name** : asm-tree. **Version** : 9.2.
+ * **Project URL:** [http://asm.ow2.io/](http://asm.ow2.io/)
+ * **License:** [BSD-3-Clause](https://asm.ow2.io/license.html)
+ * **License:** [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.pcollections. **Name** : pcollections. **Version** : 3.1.4.
+ * **Project URL:** [https://github.com/hrldcpr/pcollections](https://github.com/hrldcpr/pcollections)
+ * **License:** [The MIT License](https://opensource.org/licenses/mit-license.php)
+
+1. **Group** : org.snakeyaml. **Name** : snakeyaml-engine. **Version** : 2.6.
+ * **Project URL:** [https://bitbucket.org/snakeyaml/snakeyaml-engine](https://bitbucket.org/snakeyaml/snakeyaml-engine)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+1. **Group** : org.yaml. **Name** : snakeyaml. **Version** : 2.1.
+ * **Project URL:** [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml)
+ * **License:** [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+
+
+The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
+
+This report was generated on **Thu May 09 14:49:42 WEST 2024** 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/pom.xml b/pom.xml
index 139347cff..ef0d2d143 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject.
-->
io.spine.protodata
ProtoData
-0.21.5
+0.21.6
2015
@@ -92,7 +92,7 @@ all modules and does not describe the project structure per-subproject.
io.spine
spine-reflect
- 2.0.0-SNAPSHOT.183
+ 2.0.0-SNAPSHOT.184
compile
@@ -107,6 +107,12 @@ all modules and does not describe the project structure per-subproject.
2.0.0-SNAPSHOT.6
compile
+
+ io.spine.tools
+ prototap-api
+ 0.8.3
+ compile
+
io.spine.tools
spine-psi-java-bundle
@@ -122,7 +128,7 @@ all modules and does not describe the project structure per-subproject.
io.spine.validation
spine-validation-java-runtime
- 2.0.0-SNAPSHOT.132
+ 2.0.0-SNAPSHOT.133
compile
@@ -237,43 +243,48 @@ all modules and does not describe the project structure per-subproject.
io.spine.protodata
protodata-fat-cli
- 0.20.7
+ 0.21.3
io.spine.protodata
protodata-protoc
- 0.20.7
+ 0.21.3
+
+
+ io.spine.tools
+ prototap-protoc-plugin
+ 0.8.3
io.spine.tools
spine-mc-java-annotation
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
io.spine.tools
spine-mc-java-base
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
io.spine.tools
spine-mc-java-checks
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
provided
io.spine.tools
spine-mc-java-entity
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
io.spine.tools
spine-mc-java-plugins
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
io.spine.tools
spine-mc-java-rejection
- 2.0.0-SNAPSHOT.205
+ 2.0.0-SNAPSHOT.206
io.spine.tools
diff --git a/protoc/build.gradle.kts b/protoc/build.gradle.kts
index 47cd47908..351d2781e 100644
--- a/protoc/build.gradle.kts
+++ b/protoc/build.gradle.kts
@@ -28,11 +28,10 @@ import io.spine.internal.dependency.Protobuf
import org.gradle.api.file.DuplicatesStrategy.INCLUDE
dependencies {
- Protobuf.libs.forEach { implementation(it) }
+ implementation(Protobuf.javaLib)
}
tasks.jar {
-
manifest {
attributes(mapOf("Main-Class" to "io.spine.protodata.protoc.Plugin"))
}
@@ -43,10 +42,12 @@ tasks.jar {
else -> zipTree(it)
}
})
-
+ exclude(
+ // Protobuf files.
+ "google/**",
+ )
// We should provide a classifier or else Protobuf Gradle plugin will substitute it with
// an OS-specific one.
archiveClassifier.set("exe")
-
duplicatesStrategy = INCLUDE
}
diff --git a/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt b/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt
index f40758f7a..e3187945a 100644
--- a/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt
+++ b/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022, TeamDev. All rights reserved.
+ * 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.
@@ -32,20 +32,38 @@ import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse
import java.nio.file.StandardOpenOption.CREATE
import java.nio.file.StandardOpenOption.TRUNCATE_EXISTING
+import java.util.*
import kotlin.io.path.Path
import kotlin.io.path.writeBytes
+import kotlin.text.Charsets.UTF_8
/**
- * Stores the received `CodeGeneratorRequest` to the file passed as the parameter.
+ * Stores received `CodeGeneratorRequest` message to the file the name of which is passed as
+ * the value of the [parameter][CodeGeneratorRequest.getParameter] property of the request.
+ *
+ * The name of the file is [Base64] encoded.
+ *
+ * The function returns empty [CodeGeneratorRequest] written to [System.out]
+ * according to the `protoc` plugin
+ * [protocol](https://protobuf.dev/reference/cpp/api-docs/google.protobuf.compiler.plugin.pb/).
*/
public fun main() {
val request = CodeGeneratorRequest.parseFrom(System.`in`)
val requestFile = Path(request.parameter.decodeBase64())
- requestFile.toFile()
- .parentFile
- .mkdirs()
+
+ val targetDir = requestFile.toFile().parentFile
+ targetDir.mkdirs()
+
requestFile.writeBytes(request.toByteArray(), CREATE, TRUNCATE_EXISTING)
val emptyResponse = CodeGeneratorResponse.getDefaultInstance()
- System.out.write(emptyResponse.toByteArray())
+ emptyResponse.writeTo(System.out)
+}
+
+/**
+ * Decodes a UTF-8 string encoded in Base64 in this string.
+ */
+private fun String.decodeBase64(): String {
+ val bytes = Base64.getDecoder().decode(this)
+ return String(bytes, UTF_8)
}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index c9bb77000..7c6d39589 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -33,6 +33,7 @@ include(
"cli",
"protoc",
"test-env",
+ "testlib",
"java",
"gradle-api",
"gradle-plugin"
diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts
new file mode 100644
index 000000000..e9575b233
--- /dev/null
+++ b/testlib/build.gradle.kts
@@ -0,0 +1,50 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+import io.spine.internal.dependency.ProtoTap
+import io.spine.internal.dependency.Spine
+
+plugins {
+ protobuf
+ `java-test-fixtures`
+ prototap
+}
+
+protobuf {
+ protoc {
+ artifact = io.spine.internal.dependency.Protobuf.compiler
+ }
+}
+
+dependencies {
+ api(Spine.testlib)
+ api(Spine.CoreJava.testUtilServer)
+ api(ProtoTap.api)
+ api(project(":api"))
+ api(project(":backend"))
+
+ implementation(Spine.reflect)
+}
diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt
new file mode 100644
index 000000000..0ee3fc99f
--- /dev/null
+++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt
@@ -0,0 +1,290 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.protodata.testing
+
+import com.google.common.annotations.VisibleForTesting
+import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest
+import io.spine.io.Resource
+import io.spine.io.ResourceDirectory
+import io.spine.protodata.backend.Pipeline
+import io.spine.protodata.plugin.Plugin
+import io.spine.protodata.renderer.SourceFileSet
+import io.spine.protodata.settings.SettingsDirectory
+import io.spine.protodata.testing.PipelineSetup.Companion.byResources
+import io.spine.reflect.CallerFinder.findCallerOf
+import io.spine.tools.code.Java
+import io.spine.tools.code.Kotlin
+import io.spine.tools.code.Language
+import io.spine.tools.code.Protobuf
+import io.spine.tools.code.TypeScript
+import io.spine.tools.prototap.Names.PROTOC_PLUGIN_NAME
+import io.spine.tools.prototap.Paths.CODE_GENERATOR_REQUEST_FILE
+import java.nio.file.Path
+
+/**
+ * Creates a [Pipeline] for testing given ProtoData [plugins].
+ *
+ * This class simulates the first step of the code generation process
+ * performed by `protoc` compiler. Since `protoc` is a stable and predictable piece of
+ * software, we do not need to go through the "vanilla" code generation process when we
+ * test ProtoData plugins.
+ *
+ * Instead of running the whole code generation process in a Gradle build with ProtoData Gradle
+ * Plugin applied over and over again, we can generate the code and related binary data like
+ * [CodeGeneratorRequest] or [FileDescriptorSet][com.google.protobuf.DescriptorProtos.FileDescriptorSet]
+ * using `protoc` and then use its output in tests.
+ *
+ * A convenient way for capturing the generated "vanilla" code and associated files is
+ * using [ProtoTap Gradle Plugin](https://github.com/SpineEventEngine/ProtoTap).
+ * This is the recommended way for working with `PipelineSetup` which provides most of the input
+ * for creation of a [Pipeline] automatically. Configuration steps associated with this approach are
+ * described below.
+ *
+ * The class also allows fine-tuned way of working using its constructor directly for the usage
+ * scenarios when generated code and [CodeGeneratorRequest] are already available or generated via
+ * a custom procedure.
+ *
+ * ## Creating `PipelineSetup` with the help of ProtoTap
+ *
+ * Here are the steps for creating an instance of `PipelineSetup` in your tests.
+ *
+ * ### 1. Add [`java-test-fixtures`](https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures) plugin
+ * The plugin will create the `testFixtures` source set in which we will put proto files.
+ *
+ * Alternatively, you can put proto files under the `test` source set, but with `testFixtures`
+ * it is a bit more neat.
+ *
+ * ### 2. Add [Protobuf Gradle Plugin](https://github.com/google/protobuf-gradle-plugin)
+ * ... if it's not yet applied directly or indirectly.
+ *
+ * Please don't forget to specify
+ * the [`protoc` artifact](https://github.com/google/protobuf-gradle-plugin?tab=readme-ov-file#locate-external-executables).
+ *
+ * ### 3. Add [ProtoTap Gradle Plugin](https://github.com/SpineEventEngine/ProtoTap)
+ * If you're going to put proto files under `testFixtures` or `test` source sets, ProtoTap
+ * would pick them automatically.
+ *
+ * If you're going to use a custom source set, please pass it to
+ * the [plugin settings](https://github.com/SpineEventEngine/ProtoTap?tab=readme-ov-file#using-plugin-settings).
+ *
+ * ### 4. Add a test method with two `@TempDir` parameters
+ * This step applies if you're using JUnit. We will need two directories: one is for storing
+ * settings for the ProtoData plugins we're going to test, and another is for the output of
+ * the code generation process:
+ *
+ * ```kotlin
+ * @Test
+ * fun `my test`(
+ * @TempDir outputDir: Path,
+ * @TempDir settingsDir: Path
+ * ) {
+ * // Test code will be here.
+ * }
+ * ```
+ *
+ * ### 5. Create `PipelineSetup` instance using [byResources] factory method
+ *
+ * ```kotlin
+ * val setup = PipelineSetup.byResources(outputDir, settingsDir) {
+ * // Write settings here.
+ * }
+ * ```
+ * The above call to [byResources] assumes we work with code generation in [Java].
+ * For other programming languages please use the overload which accepts [Language] as
+ * the first parameter (e.g. [Kotlin] or [TypeScript]).
+ *
+ * The callback block for writing settings accepts an instance of [SettingsDirectory] that
+ * will be available from the [Pipeline] to be created.
+ *
+ * ## Conventions for directory names with the generated code
+ * Protobuf compiler creates a separate directory for each programming language after a name
+ * of the corresponding `protoc` plugin or built-in. Correspondingly, directories in test resources
+ * with the generated code copied by ProtoTap would have those names. Here are the conventions
+ * used by `PipelineSetup` for accessing language subdirectories:
+ * * [Java] -> `"java"`
+ * * [Kotlin] -> `"kotlin"`
+ * * [TypeScript] -> `"ts"`
+ * * [Protobuf] -> `"proto"`
+ * * Other languages -> a lowercase version of [Language.name].
+ *
+ * @property plugins
+ * the list of plugins to be passed to the created pipeline.
+ * @property request
+ * the code generator request created by `protoc` for the files to be processed.
+ * @param inputDir
+ * the root directory with the source code generated by `protoc`.
+ * @param outputDir
+ * the root directory to which the updated code will be placed.
+ * @param settingsDir
+ * the directory to which store the settings for the given plugin.
+ * @param writeSettings
+ * a callback for writing plugin settings before the pipeline is created.
+ * @constructor Creates in instance for creating [Pipeline] for testing the given [plugins].
+ *
+ * @see [byResources]
+ * @see [SettingsDirectory]
+ * @see [io.spine.protodata.settings.LoadsSettings.consumerId]
+ */
+public class PipelineSetup(
+ public val plugins: List,
+ inputDir: Path,
+ outputDir: Path,
+ public val request: CodeGeneratorRequest,
+ settingsDir: Path,
+ private val writeSettings: (SettingsDirectory) -> Unit
+) {
+ /**
+ * The directory to store settings for the [plugins].
+ */
+ public val settings: SettingsDirectory
+
+ /**
+ * The source file set used by the pipeline.
+ */
+ public val sourceFileSet: SourceFileSet
+
+ init {
+ require(plugins.isNotEmpty()) {
+ "The list of plugins cannot be empty."
+ }
+ settingsDir.toFile().mkdirs()
+ settings = SettingsDirectory(settingsDir)
+ outputDir.toFile().mkdirs()
+ sourceFileSet = SourceFileSet.create(inputDir, outputDir)
+ }
+
+ /**
+ * Creates the pipeline.
+ */
+ public fun createPipeline(): Pipeline {
+ writeSettings(settings)
+ val id = Pipeline.generateId()
+ val pipeline = Pipeline(id, plugins, listOf(sourceFileSet), request, settings)
+ return pipeline
+ }
+
+ public companion object {
+
+ /**
+ * Creates an instance assuming that the input directory and [CodeGeneratorRequest] are
+ * placed into the resources using [ProtoTap](https://github.com/SpineEventEngine/ProtoTap).
+ *
+ * @param language
+ * the programming language which is handled by the pipeline to be created.
+ * @param plugins
+ * the list of plugins to be passed to the created pipeline.
+ * @param outputDir
+ * the root directory to which the updated code will be placed.
+ * @param settingsDir
+ * the directory to which store the settings for the given plugin.
+ * @param writeSettings
+ * a callback for writing plugin settings before the pipeline is created.
+ */
+ public fun byResources(
+ language: Language,
+ plugins: List,
+ outputDir: Path,
+ settingsDir: Path,
+ writeSettings: (SettingsDirectory) -> Unit
+ ): PipelineSetup {
+ val callingClass = detectCallingClass()
+ val classLoader = callingClass.classLoader
+ val inputRoot = inputRootOf(language, classLoader)
+ val request = loadRequest(classLoader)
+ return PipelineSetup(
+ plugins,
+ inputRoot,
+ outputDir,
+ request,
+ settingsDir,
+ writeSettings,
+ )
+ }
+
+ /**
+ * Creates an instance assuming that the input directory and [CodeGeneratorRequest] are
+ * placed into the resources using [ProtoTap](https://github.com/SpineEventEngine/ProtoTap).
+ *
+ * The pipeline to be created will handle code generation in [Java].
+ *
+ * @param plugins
+ * the list of plugins to be passed to the created pipeline.
+ * @param outputDir
+ * the root directory to which the updated code will be placed.
+ * @param settingsDir
+ * the directory to which store the settings for the given plugin.
+ * @param writeSettings
+ * a callback for writing plugin settings before the pipeline is created.
+ */
+ public fun byResources(
+ plugins: List,
+ outputDir: Path,
+ settingsDir: Path,
+ writeSettings: (SettingsDirectory) -> Unit
+ ): PipelineSetup = byResources(Java, plugins, outputDir, settingsDir, writeSettings)
+
+ @VisibleForTesting
+ internal fun detectCallingClass(): Class<*> {
+ val thisClass = this::class.java
+ val caller = findCallerOf(thisClass, 0)
+ check(caller != null) { "Unable to obtain the caller for the class `$thisClass`." }
+ val callingClass = Class.forName(caller.className)
+ return callingClass
+ }
+
+ private fun loadRequest(classLoader: ClassLoader): CodeGeneratorRequest {
+ val file = Resource.file(
+ "$PROTOC_PLUGIN_NAME/$CODE_GENERATOR_REQUEST_FILE",
+ classLoader
+ )
+ file.open().use {
+ val request = CodeGeneratorRequest.parseFrom(it)
+ return request
+ }
+ }
+
+ private fun inputRootOf(language: Language, classLoader: ClassLoader): Path {
+ val languageDir = language.protocOutputDir()
+ val dirName = "$PROTOC_PLUGIN_NAME/$languageDir"
+ val dir = ResourceDirectory.get(dirName, classLoader)
+ val inputRoot = dir.toPath()
+ return inputRoot
+ }
+ }
+}
+
+@VisibleForTesting
+internal fun Language.protocOutputDir(): String {
+ return when(this) {
+ Java, Kotlin -> name.lowercase()
+ TypeScript -> "ts"
+ // It's not likely we have proto files in the output of `protoc` or ProtoData anytime soon.
+ // But let's cover this case of the meta-codegen tools that produce Protobuf code.
+ Protobuf -> "proto"
+ else -> name
+ }
+}
diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt
new file mode 100644
index 000000000..7323adc98
--- /dev/null
+++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt
@@ -0,0 +1,158 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+
+package io.spine.protodata.testing
+
+import com.google.protobuf.Empty
+import com.google.protobuf.compiler.PluginProtos.CodeGeneratorRequest
+import io.kotest.matchers.shouldBe
+import io.kotest.matchers.shouldNotBe
+import io.spine.io.ResourceDirectory
+import io.spine.protodata.plugin.Plugin
+import io.spine.protodata.settings.Format.PROTO_JSON
+import io.spine.protodata.settings.SettingsDirectory
+import io.spine.protodata.testing.PipelineSetup.Companion.byResources
+import io.spine.protodata.testing.PipelineSetup.Companion.detectCallingClass
+import io.spine.tools.code.Java
+import io.spine.tools.code.Kotlin
+import io.spine.tools.code.TypeScript
+import io.spine.tools.prototap.Names.PROTOC_PLUGIN_NAME
+import java.nio.file.Path
+import kotlin.io.path.Path
+import kotlin.io.path.exists
+import org.junit.jupiter.api.DisplayName
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.io.TempDir
+
+@DisplayName("`PipelineSetup` should")
+internal class PipelineSetupSpec {
+
+ @Test
+ fun `ensure directories are created`(
+ @TempDir input: Path,
+ @TempDir output: Path,
+ @TempDir settings: Path,
+ ) {
+ val setup = setup(input, output, settings) { _ -> }
+ setup.run {
+ this.settings.path.exists() shouldBe true
+ sourceFileSet.run {
+ input shouldBe input
+ output.run {
+ this shouldBe output
+ exists() shouldBe true
+ }
+ }
+ }
+ }
+
+ @Test
+ fun `invoke settings callback before creating a pipeline`(
+ @TempDir input: Path,
+ @TempDir output: Path,
+ @TempDir settings: Path,
+ ) {
+ val setup = setup(input, output, settings) {
+ it.write("foo_bar", PROTO_JSON, Empty.getDefaultInstance().toByteArray())
+ }
+ settings.fileCount() shouldBe 0
+ setup.createPipeline()
+ settings.fileCount() shouldBe 1
+ }
+
+ @Test
+ fun `obtain the calling class`() {
+ val callingClass = detectCallingClass()
+ callingClass shouldBe this::class.java
+ }
+
+ @Test
+ fun `use 'CodeGeneratorRequest' captured by ProtoTap`(
+ @TempDir output: Path,
+ @TempDir settings: Path,
+ ) {
+ val setup = setupByResources(Java, output, settings)
+ setup.request shouldNotBe CodeGeneratorRequest.getDefaultInstance()
+ }
+
+ @Test
+ fun `use sources captured by ProtoTap`(
+ @TempDir output: Path,
+ @TempDir settings: Path,
+ ) {
+ val language = Java
+ val setup = setupByResources(language, output, settings)
+ setup.run {
+ val resourceDir = ResourceDirectory.get(
+ "${PROTOC_PLUGIN_NAME}/${language.protocOutputDir()}",
+ this::class.java.classLoader
+ )
+ sourceFileSet.run {
+ isEmpty shouldBe false
+ inputRoot shouldBe resourceDir.toPath()
+ find(
+ Path("io/spine/given/domain/gas/CompressorStation.java")
+ ) shouldNotBe null
+ }
+ }
+ }
+
+ @Test
+ fun `calculate the name of 'protoc' output directory for a 'Language'`() {
+ Java.protocOutputDir() shouldBe "java"
+ Kotlin.protocOutputDir() shouldBe "kotlin"
+ TypeScript.protocOutputDir() shouldBe "ts"
+ }
+}
+
+private fun setup(
+ input: Path,
+ output: Path,
+ settings: Path,
+ writeSettings: (SettingsDirectory) -> Unit
+): PipelineSetup = PipelineSetup(
+ listOf(StubPlugin()),
+ input,
+ output,
+ CodeGeneratorRequest.getDefaultInstance(),
+ settings,
+ writeSettings
+)
+
+private fun setupByResources(
+ language: Java,
+ outputRoot: Path,
+ settingsDir: Path
+): PipelineSetup = byResources(
+ language,
+ listOf(StubPlugin()),
+ outputRoot,
+ settingsDir,
+) { _ -> }
+
+internal class StubPlugin: Plugin
+
+private fun Path.fileCount() = toFile().list()!!.size
diff --git a/testlib/src/testFixtures/proto/given/domain/gas_transportation.proto b/testlib/src/testFixtures/proto/given/domain/gas_transportation.proto
new file mode 100644
index 000000000..a79665147
--- /dev/null
+++ b/testlib/src/testFixtures/proto/given/domain/gas_transportation.proto
@@ -0,0 +1,65 @@
+/*
+* Copyright 2024, TeamDev. All rights reserved.
+*
+* 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.
+*/
+syntax = "proto3";
+
+package given.domain;
+
+//
+// This is a "vanilla" Protobuf file, which does not use Spine-specific features like
+// custom options such as `type_url_prefix` or validation constraints.
+// We also use "pure" Protobuf Java `protoc` plugin to process these files so that
+// we recreate conditions we have before ProtoData gets into play after `protoc`
+// finishes its work.
+//
+
+option java_package = "io.spine.given.domain.gas";
+option java_outer_classname = "GasTransportationProto";
+option java_multiple_files = true;
+
+import "google/type/latlng.proto";
+
+message OilAndGasWell {
+ google.type.LatLng location = 1;
+}
+
+message Pipe {
+ google.type.LatLng from = 1;
+ google.type.LatLng to = 2;
+}
+
+message GasProcessingPlant {
+ string name = 1;
+ google.type.LatLng location = 2;
+ repeated Pipe inbound = 3;
+ repeated Pipe outbound = 4;
+}
+
+message CompressorStation {
+ google.type.LatLng location = 1;
+ repeated Pipe inbound = 2;
+ repeated Pipe outbound = 3;
+}
+
+message LngStorage {
+ string name = 1;
+ google.type.LatLng location = 2;
+ Pipe inbound = 3;
+ Pipe outbound = 4;
+}
diff --git a/testlib/src/testFixtures/proto/given/domain/oil_refinery.proto b/testlib/src/testFixtures/proto/given/domain/oil_refinery.proto
new file mode 100644
index 000000000..c85fa3135
--- /dev/null
+++ b/testlib/src/testFixtures/proto/given/domain/oil_refinery.proto
@@ -0,0 +1,56 @@
+/*
+* Copyright 2024, TeamDev. All rights reserved.
+*
+* 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.
+*/
+syntax = "proto3";
+
+package given.domain;
+
+//
+// This is a "vanilla" Protobuf file, which does not use Spine-specific features like
+// custom options such as `type_url_prefix` or validation constraints.
+// We also use "pure" Protobuf Java `protoc` plugin to process these files so that
+// we recreate conditions we have before ProtoData gets into play after `protoc`
+// finishes its work.
+//
+
+option java_package = "io.spine.given.domain.oil";
+option java_outer_classname = "OilRefineryProto";
+option java_multiple_files = true;
+
+enum ProductType {
+ PT_UNKNOWN = 0;
+ PETROL = 1;
+ KEROSENE = 2;
+ DIESEL = 3;
+ FUEL_OIL = 4;
+ LUBRICATING_OIL = 5;
+ PARAFFIN_WAX = 6;
+ ASPHALT_BASE = 7;
+}
+
+message Product {
+ ProductType type = 1;
+ float volume = 2;
+}
+
+message Refinery {
+ string name = 1;
+ float input = 2;
+ repeated Product output = 3;
+}
diff --git a/version.gradle.kts b/version.gradle.kts
index f652453c7..ffb8ecdc3 100644
--- a/version.gradle.kts
+++ b/version.gradle.kts
@@ -32,4 +32,4 @@
*
* For dependencies on Spine SDK module please see [io.spine.internal.dependency.Spine].
*/
-val protoDataVersion: String by extra("0.21.5")
+val protoDataVersion: String by extra("0.21.6")