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")