From dbc4c905e0e4482273b38a082af406d24f79ce86 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Sun, 21 Apr 2024 23:15:15 +0100 Subject: [PATCH 01/49] Improve doc wording --- backend/src/main/kotlin/io/spine/protodata/backend/Pipeline.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ) { From 92d94b816c226725879a68949ddb6e0fb3e8b4bb Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 22 Apr 2024 01:10:44 +0100 Subject: [PATCH 02/49] Add draft `PipelineSetup` Also: * Introduce `protodata-testlib` module. * Open access to `SettingsDirectory.directory` property. --- .../protodata/settings/SettingsDirectory.kt | 2 +- settings.gradle.kts | 1 + testlib/build.gradle.kts | 34 ++++++ .../spine/protodata/testing/PipelineSetup.kt | 107 ++++++++++++++++++ .../protodata/testing/PipelineSetupSpec.kt | 97 ++++++++++++++++ 5 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 testlib/build.gradle.kts create mode 100644 testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt create mode 100644 testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt 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..a1b3d887a 100644 --- a/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt +++ b/api/src/main/kotlin/io/spine/protodata/settings/SettingsDirectory.kt @@ -40,7 +40,7 @@ import kotlin.io.path.listDirectoryEntries * Only the files directly in the directory are considered, no subdirectories are traversed. */ public class SettingsDirectory( - private val directory: Path + public val directory: Path ) { init { require(directory.toFile().isDirectory) { 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..25b5224c8 --- /dev/null +++ b/testlib/build.gradle.kts @@ -0,0 +1,34 @@ +import io.spine.internal.dependency.Spine + +/* + * 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. + */ + +dependencies { + api(Spine.testlib) + api(Spine.CoreJava.testUtilServer) + api(project(":api")) + api(project(":backend")) +} 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..51d7e506b --- /dev/null +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -0,0 +1,107 @@ +/* + * 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.Descriptors.FileDescriptor +import com.google.protobuf.compiler.codeGeneratorRequest +import io.spine.protodata.FileDependencies +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 java.nio.file.Path + +/** + * Creates a [Pipeline] for testing the given ProtoData [plugin]. + * + * 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. + * + * @param P + * the type of the plugin under the test. + * @property plugin + * the plugin to be passed to the created pipeline. + * @property protoFiles + * descriptors of proto files included in the test. + * @param settingsDir + * the directory to which store the settings for the given plugin. + * @param inputRoot + * the root directory with the source code generated by `protoc`. + * @param outputRoot + * the root directory to which the updated code will be placed. + * @param writeSettings + * a callback for writing plugin settings before the pipeline is created. + * + * @see [io.spine.protodata.settings.LoadsSettings.consumerId] + */ +public class PipelineSetup( + public val plugin: P, + public val protoFiles: List, + settingsDir: Path, + inputRoot: Path, + outputRoot: Path, + private val writeSettings: (P, SettingsDirectory) -> Unit +) { + /** + * The directory to store settings for the [plugin]. + */ + public val settings: SettingsDirectory + + /** + * A sole source file set used by the pipeline. + */ + public val sourceFileSet: SourceFileSet + + init { + settingsDir.toFile().mkdirs() + settings = SettingsDirectory(settingsDir) + outputRoot.toFile().mkdirs() + sourceFileSet = SourceFileSet.create(inputRoot, outputRoot) + } + + /** + * Creates the pipeline. + */ + public fun createPipeline(): Pipeline { + writeSettings(plugin, settings) + val id = Pipeline.generateId() + val request = createRequest() + val pipeline = Pipeline(id, listOf(plugin), listOf(sourceFileSet), request, settings) + return pipeline + } + + private fun createRequest() = codeGeneratorRequest { + fileToGenerate.addAll(protoFiles.map { it.name }) + + val dependencies = FileDependencies(protoFiles).asList() + protoFile.addAll(dependencies.map { it.toProto() }) + + val sfd = protoFiles.map { it.toProto() } + sourceFileDescriptors.addAll(sfd) + } +} 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..ec046c8a5 --- /dev/null +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -0,0 +1,97 @@ +/* + * 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.AnyProto +import com.google.protobuf.Empty +import io.kotest.matchers.shouldBe +import io.spine.protodata.plugin.Plugin +import io.spine.protodata.settings.Format +import java.nio.file.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 settingsDir: Path, + @TempDir inputRoot: Path, + @TempDir outputRoot: Path, + ) { + val setup = PipelineSetup( + StubPlugin(), + listOf(AnyProto.getDescriptor()), + settingsDir, + inputRoot, + outputRoot + ) { _, _ -> } + + setup.settings.directory.exists() shouldBe true + + setup.sourceFileSet.inputRoot shouldBe inputRoot + + setup.sourceFileSet.outputRoot.run { + this shouldBe outputRoot + exists() shouldBe true + } + } + + @Test + fun `invoke settings callback before creating a pipeline`( + @TempDir settingsDir: Path, + @TempDir inputRoot: Path, + @TempDir outputRoot: Path, + ) { + val setup = PipelineSetup( + StubPlugin(), + listOf(AnyProto.getDescriptor()), + settingsDir, + inputRoot, + outputRoot + ) { _, settings -> + settings.write("foo_bar", Format.PROTO_JSON, Empty.getDefaultInstance().toByteArray()) + } + + settingsDir.fileCount() shouldBe 0 + setup.createPipeline() + settingsDir.fileCount() shouldBe 1 + } + + @Test + fun `obtain input root from the 'build' directory`() { + val currentDir = System.getProperty("user.dir") + println(currentDir) + } +} + +internal class StubPlugin: Plugin + +private fun Path.fileCount() = toFile().list()!!.size From bf720d6ff81339d9ea100efbabf22ddc87632de2 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 22 Apr 2024 01:10:59 +0100 Subject: [PATCH 03/49] Bump version -> `0.21.6` --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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") From c503b4ae21a2da09cc8fd7c868779d7dc49b89ff Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 22 Apr 2024 01:19:58 +0100 Subject: [PATCH 04/49] Rename `SettingsDirectory.directory` to `path` --- .../protodata/settings/SettingsDirectory.kt | 21 ++++++++++++------- .../protodata/testing/PipelineSetupSpec.kt | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) 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 a1b3d887a..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( - public 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/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index ec046c8a5..d270c146c 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -54,7 +54,7 @@ internal class PipelineSetupSpec { outputRoot ) { _, _ -> } - setup.settings.directory.exists() shouldBe true + setup.settings.path.exists() shouldBe true setup.sourceFileSet.inputRoot shouldBe inputRoot From 59c4abb97fa2fde20fab7a10dc4df69b2f08daf0 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 22 Apr 2024 01:20:05 +0100 Subject: [PATCH 05/49] Update dependency reports --- dependencies.md | 1065 ++++++++++++++++++++++++++++++++++++++++++++++- pom.xml | 2 +- 2 files changed, 1048 insertions(+), 19 deletions(-) diff --git a/dependencies.md b/dependencies.md index afeae9386..46afb6c36 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** @@ -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 **Mon Apr 22 01:17:58 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** @@ -1857,12 +1857,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 **Mon Apr 22 01:17:58 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** @@ -2815,12 +2815,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 **Mon Apr 22 01:17:59 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** @@ -3726,12 +3726,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 **Mon Apr 22 01:17:59 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** @@ -4641,12 +4641,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 **Mon Apr 22 01:17:59 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** @@ -5727,12 +5727,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 **Mon Apr 22 01:18:00 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** @@ -6658,12 +6658,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 **Mon Apr 22 01:18:00 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. @@ -7439,12 +7439,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 **Mon Apr 22 01:18:00 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** @@ -8395,4 +8395,1033 @@ 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 **Mon Apr 22 01:18:01 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.132.**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.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.132.**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 **Mon Apr 22 01:18:02 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..ddd81b4ab 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 From e00300a21b550c06422f0846c2522e5c4b8ce3e6 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 22 Apr 2024 14:22:46 +0100 Subject: [PATCH 06/49] Add vanilla Protobuf test fixtures --- testlib/build.gradle.kts | 19 +++++- .../given/domain/gas_transportation.proto | 65 +++++++++++++++++++ .../proto/given/domain/oil_refinery.proto | 56 ++++++++++++++++ 3 files changed, 138 insertions(+), 2 deletions(-) create mode 100644 testlib/src/testFixtures/proto/given/domain/gas_transportation.proto create mode 100644 testlib/src/testFixtures/proto/given/domain/oil_refinery.proto diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index 25b5224c8..6b99ad65f 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -1,5 +1,3 @@ -import io.spine.internal.dependency.Spine - /* * Copyright 2024, TeamDev. All rights reserved. * @@ -26,9 +24,26 @@ import io.spine.internal.dependency.Spine * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import io.spine.internal.dependency.Grpc +import io.spine.internal.dependency.Spine + +plugins { + protobuf + `java-test-fixtures` +} + +protobuf { + protoc { + artifact = io.spine.internal.dependency.Protobuf.compiler + } +} + dependencies { api(Spine.testlib) api(Spine.CoreJava.testUtilServer) api(project(":api")) api(project(":backend")) + + // For `google/type/` proto types used in stub domains. + testFixturesImplementation(Grpc.api) } 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; +} From 1239c8eea7bf49c353c8f3089eb5493853fb6f59 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 25 Apr 2024 01:16:00 +0100 Subject: [PATCH 07/49] Add popular format extensions --- api/src/main/proto/spine/protodata/settings.proto | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/api/src/main/proto/spine/protodata/settings.proto b/api/src/main/proto/spine/protodata/settings.proto index 8897569bc..9902ed97d 100644 --- a/api/src/main/proto/spine/protodata/settings.proto +++ b/api/src/main/proto/spine/protodata/settings.proto @@ -70,19 +70,23 @@ 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. +// +// See: https://protobuf.dev/programming-guides/techniques/#suffixes // enum Format { RCF_UNKNOWN = 0; // A Protobuf message encoded in binary. - PROTO_BINARY = 1 [(extension) = "pb", (extension) = "bin"]; + PROTO_BINARY = 1 [(extension) = "pb", (extension) = "bin", (extension) = "binpb"]; // A Protobuf message encoded in Protobuf JSON. PROTO_JSON = 2 [(extension) = "pb.json"]; @@ -94,5 +98,5 @@ enum Format { YAML = 4 [(extension) = "yml", (extension) = "yaml"]; // A plain string value. - PLAIN = 5 [(extension) = "txt"]; + PLAIN = 5 [(extension) = "txt", (extension) = "textpb"]; } From 3847d207e8f75aee6c06f1f6a3bb51d2eae92416 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 25 Apr 2024 01:16:24 +0100 Subject: [PATCH 08/49] Store codegen request into a file --- testlib/build.gradle.kts | 23 +++++++ .../spine/protodata/testing/PipelineSetup.kt | 4 +- .../protodata/testing/PipelineSetupSpec.kt | 61 ++++++++++++++++++- testlib/store-request.sh | 21 +++++++ 4 files changed, 105 insertions(+), 4 deletions(-) create mode 100755 testlib/store-request.sh diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index 6b99ad65f..eb42694ca 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -24,8 +24,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.google.protobuf.gradle.id import io.spine.internal.dependency.Grpc import io.spine.internal.dependency.Spine +import org.gradle.api.file.DuplicatesStrategy.INCLUDE plugins { protobuf @@ -36,6 +38,27 @@ protobuf { protoc { artifact = io.spine.internal.dependency.Protobuf.compiler } + + val scriptPluginId = "codegen-request" + plugins { + create(scriptPluginId) { + path = "$projectDir/store-request.sh" + } + } + + // Allows test suites to fetch generated Java files generated for the `testFixtures` + // source set as resources. + generateProtoTasks { + ofSourceSet("testFixtures").forEach { task -> + tasks.processTestResources { + from(task.outputs) + duplicatesStrategy = INCLUDE + } + task.plugins { + id(scriptPluginId) + } + } + } } dependencies { diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 51d7e506b..0a128070d 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -26,6 +26,7 @@ package io.spine.protodata.testing +import com.google.common.annotations.VisibleForTesting import com.google.protobuf.Descriptors.FileDescriptor import com.google.protobuf.compiler.codeGeneratorRequest import io.spine.protodata.FileDependencies @@ -95,7 +96,8 @@ public class PipelineSetup( return pipeline } - private fun createRequest() = codeGeneratorRequest { + @VisibleForTesting + internal fun createRequest() = codeGeneratorRequest { fileToGenerate.addAll(protoFiles.map { it.name }) val dependencies = FileDependencies(protoFiles).asList() diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index d270c146c..d9f369ae9 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -26,13 +26,22 @@ package io.spine.protodata.testing +import com.google.common.truth.extensions.proto.ProtoTruth.assertThat import com.google.protobuf.AnyProto 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.given.domain.gas.GasTransportationProto +import io.spine.given.domain.oil.OilRefineryProto +import io.spine.io.Resource +import io.spine.io.ResourceDirectory import io.spine.protodata.plugin.Plugin import io.spine.protodata.settings.Format import java.nio.file.Path +import java.nio.file.Paths import kotlin.io.path.exists +import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir @@ -86,9 +95,55 @@ internal class PipelineSetupSpec { } @Test - fun `obtain input root from the 'build' directory`() { - val currentDir = System.getProperty("user.dir") - println(currentDir) + fun `load Java source code copied by a Gradle task to test resources`( + @TempDir settingsDir: Path, + @TempDir outputRoot: Path, + ) { + val dir = ResourceDirectory.get("java", this::class.java.classLoader) + val inputRoot = dir.toPath() + val setup = PipelineSetup( + StubPlugin(), + listOf(AnyProto.getDescriptor()), + settingsDir, + inputRoot, + outputRoot + ) { _, _ -> } + + val sourceFileSet = setup.sourceFileSet + sourceFileSet.find( + Paths.get("io/spine/given/domain/gas/CompressorStation.java") + ) shouldNotBe null + } + + @Test + @Disabled + fun `create 'CodeGeneratorRequest' instance mimicking 'protoc'`( + @TempDir settingsDir: Path, + @TempDir outputRoot: Path, + ) { + val dir = ResourceDirectory.get("java", this::class.java.classLoader) + val inputRoot = dir.toPath() + val setup = PipelineSetup( + StubPlugin(), + listOf( + GasTransportationProto.getDescriptor(), + OilRefineryProto.getDescriptor() + ), + settingsDir, + inputRoot, + outputRoot + ) { _, _ -> } + + val resourceFile = Resource.file( + "CodeGeneratorRequest.binpb", + this::class.java.classLoader + ) + val requestFromResources = CodeGeneratorRequest.parseFrom(resourceFile.open()) + val fromSetup = setup.createRequest() + + assertThat(requestFromResources) + .comparingExpectedFieldsOnly() + .isEqualTo(fromSetup) } } diff --git a/testlib/store-request.sh b/testlib/store-request.sh new file mode 100755 index 000000000..602f9178c --- /dev/null +++ b/testlib/store-request.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# +# This script is a `protoc` plugin which stores the `CodeGeneratorRequest` passed +# to stdin of the script. +# +# See `build.gradle.kts` and the `protobuf` block for the code adding this script +# as a `protoc` plugin. +# + +# Get the directory in which the script resides. It's the root of the subproject. +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# We put the file under the `test/resources` so that tests can pick it up. +TARGET_DIR="$SCRIPT_DIR/build/test/resources" +mkdir -p $TARGET_DIR + +OUTPUT_FILE="$TARGET_DIR/CodeGeneratorRequest.binpb" + +cat >"$OUTPUT_FILE" + From ebefc752942dd2d13ff8fb90486d50fb01f791f6 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 25 Apr 2024 02:47:33 +0100 Subject: [PATCH 09/49] Fix the path to stored request --- testlib/store-request.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/testlib/store-request.sh b/testlib/store-request.sh index 602f9178c..c97a790ae 100755 --- a/testlib/store-request.sh +++ b/testlib/store-request.sh @@ -11,11 +11,10 @@ # Get the directory in which the script resides. It's the root of the subproject. SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -# We put the file under the `test/resources` so that tests can pick it up. -TARGET_DIR="$SCRIPT_DIR/build/test/resources" -mkdir -p $TARGET_DIR +# We put the file under the `build/resources/test` so that tests can pick it up. +TARGET_DIR="$SCRIPT_DIR/build/resources/test/codegen-request" +mkdir -p "$TARGET_DIR" OUTPUT_FILE="$TARGET_DIR/CodeGeneratorRequest.binpb" cat >"$OUTPUT_FILE" - From 7ff8a46245e5dc034799ef2c59946e5bf0635e47 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 25 Apr 2024 02:47:41 +0100 Subject: [PATCH 10/49] Fix the path to stored request --- .../kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index d9f369ae9..047419380 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -41,7 +41,6 @@ import io.spine.protodata.settings.Format import java.nio.file.Path import java.nio.file.Paths import kotlin.io.path.exists -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir @@ -116,7 +115,6 @@ internal class PipelineSetupSpec { } @Test - @Disabled fun `create 'CodeGeneratorRequest' instance mimicking 'protoc'`( @TempDir settingsDir: Path, @TempDir outputRoot: Path, @@ -135,7 +133,7 @@ internal class PipelineSetupSpec { ) { _, _ -> } val resourceFile = Resource.file( - "CodeGeneratorRequest.binpb", + "codegen-request/CodeGeneratorRequest.binpb", this::class.java.classLoader ) val requestFromResources = CodeGeneratorRequest.parseFrom(resourceFile.open()) From 72c0ca899e5b6726b03565340c699e7d131ba3ea Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 25 Apr 2024 14:45:19 +0100 Subject: [PATCH 11/49] Update docs and extensions for the `Format` enum --- api/src/main/proto/spine/protodata/settings.proto | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/api/src/main/proto/spine/protodata/settings.proto b/api/src/main/proto/spine/protodata/settings.proto index 9902ed97d..e245d6b82 100644 --- a/api/src/main/proto/spine/protodata/settings.proto +++ b/api/src/main/proto/spine/protodata/settings.proto @@ -79,16 +79,22 @@ extend google.protobuf.EnumValueOptions { // // Configuration files for ProtoData and its plugins could be stored in one of these formats. // -// See: https://protobuf.dev/programming-guides/techniques/#suffixes -// enum Format { RCF_UNKNOWN = 0; // A Protobuf message encoded in binary. - PROTO_BINARY = 1 [(extension) = "pb", (extension) = "bin", (extension) = "binpb"]; + // + // 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 correct parser is selected for the file. + // PROTO_JSON = 2 [(extension) = "pb.json"]; // A plain JSON value. @@ -98,5 +104,5 @@ enum Format { YAML = 4 [(extension) = "yml", (extension) = "yaml"]; // A plain string value. - PLAIN = 5 [(extension) = "txt", (extension) = "textpb"]; + PLAIN = 5 [(extension) = "txt"]; } From 6bf752a1eb68d9c106a396987fa44836f2b25a54 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 1 May 2024 15:42:15 +0100 Subject: [PATCH 12/49] Generate descriptor set file --- testlib/build.gradle.kts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index eb42694ca..138aa8a24 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -25,7 +25,6 @@ */ import com.google.protobuf.gradle.id -import io.spine.internal.dependency.Grpc import io.spine.internal.dependency.Spine import org.gradle.api.file.DuplicatesStrategy.INCLUDE @@ -39,7 +38,7 @@ protobuf { artifact = io.spine.internal.dependency.Protobuf.compiler } - val scriptPluginId = "codegen-request" + val scriptPluginId = "pipeline-setup" plugins { create(scriptPluginId) { path = "$projectDir/store-request.sh" @@ -50,12 +49,26 @@ protobuf { // source set as resources. generateProtoTasks { ofSourceSet("testFixtures").forEach { task -> + + // Copy generated code to test resources so that `PipelineSetup` could + // pick them up. tasks.processTestResources { from(task.outputs) duplicatesStrategy = INCLUDE } - task.plugins { - id(scriptPluginId) + + // Generate descriptor set file with source code info and imports. + // Put the file under test resources as well. + with(task) { + plugins { + id(scriptPluginId) + } + generateDescriptorSet = true + with(descriptorSetOptions) { + path = "$buildDir/resources/test/$scriptPluginId/FileDescriptorSet.binpb" + includeSourceInfo = true + includeImports = true + } } } } @@ -66,7 +79,4 @@ dependencies { api(Spine.CoreJava.testUtilServer) api(project(":api")) api(project(":backend")) - - // For `google/type/` proto types used in stub domains. - testFixturesImplementation(Grpc.api) } From 64882556bd08a43151f7455b71577c8ac153f54e Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 1 May 2024 15:43:14 +0100 Subject: [PATCH 13/49] Test `binpb` as the primary format extension Also: * Migrate `FormatSpec` to Kotest assertions. --- .../io/spine/protodata/settings/FormatSpec.kt | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) 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" + ) } } From c23cbdfb3448139b5a53b684a230d4d685713b26 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 1 May 2024 15:43:39 +0100 Subject: [PATCH 14/49] Temporarily disable test --- .../spine/protodata/testing/PipelineSetupSpec.kt | 16 +++++++++++----- testlib/store-request.sh | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index 047419380..a52c59915 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -41,6 +41,7 @@ import io.spine.protodata.settings.Format import java.nio.file.Path import java.nio.file.Paths import kotlin.io.path.exists +import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir @@ -115,6 +116,7 @@ internal class PipelineSetupSpec { } @Test + @Disabled("Until migration to ProtoTap") fun `create 'CodeGeneratorRequest' instance mimicking 'protoc'`( @TempDir settingsDir: Path, @TempDir outputRoot: Path, @@ -132,11 +134,15 @@ internal class PipelineSetupSpec { outputRoot ) { _, _ -> } - val resourceFile = Resource.file( - "codegen-request/CodeGeneratorRequest.binpb", - this::class.java.classLoader - ) - val requestFromResources = CodeGeneratorRequest.parseFrom(resourceFile.open()) + val resourceDir = "pipeline-setup" + val classLoader = this::class.java.classLoader + + //val descriptorSetFile = Resource.file("$resourceDir/FileDescriptorSet.binpb", classLoader) + //val descriptorSet = FileDescriptorSet.parseFrom(descriptorSetFile.open()) + + val requestFile = Resource.file("$resourceDir/CodeGeneratorRequest.binpb", classLoader) + val requestFromResources = CodeGeneratorRequest.parseFrom(requestFile.open()) + val fromSetup = setup.createRequest() assertThat(requestFromResources) diff --git a/testlib/store-request.sh b/testlib/store-request.sh index c97a790ae..c786f226e 100755 --- a/testlib/store-request.sh +++ b/testlib/store-request.sh @@ -12,7 +12,7 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) # We put the file under the `build/resources/test` so that tests can pick it up. -TARGET_DIR="$SCRIPT_DIR/build/resources/test/codegen-request" +TARGET_DIR="$SCRIPT_DIR/build/resources/test/pipeline-setup" mkdir -p "$TARGET_DIR" OUTPUT_FILE="$TARGET_DIR/CodeGeneratorRequest.binpb" From 6d4fa68767aafb53d7b6186c99fac2730daef906 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 17:12:37 +0100 Subject: [PATCH 15/49] Improve docs of `protoc` plugin --- .../io/spine/protodata/protoc/Plugin.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) 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..5e2928a39 100644 --- a/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt +++ b/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt @@ -32,20 +32,29 @@ 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 /** - * 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) } From c44482a2dabbcbd05cff0b1fd5328e65708d739a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 18:02:39 +0100 Subject: [PATCH 16/49] Bump `checkout` and `setup-java` -> `v4` --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index cadc62cc6..73a0a69f2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,11 +8,11 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'true' - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: java-version: 11 distribution: zulu From 99ecccb74bf5066595e9a387804842247e5c984d Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 18:08:28 +0100 Subject: [PATCH 17/49] Add `prototap` build extension Also: * Fix doc language grammar and punctuation. --- buildSrc/src/main/kotlin/BuildExtensions.kt | 19 +++++--- .../src/main/kotlin/DependencyResolution.kt | 4 +- .../io/spine/internal/dependency/ProtoTap.kt | 46 +++++++++++++++++++ testlib/build.gradle.kts | 46 ++----------------- 4 files changed, 65 insertions(+), 50 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt 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..24c320d91 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) { 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..0a1730189 --- /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.1" + 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/testlib/build.gradle.kts b/testlib/build.gradle.kts index 138aa8a24..a8239a241 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -24,59 +24,23 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.google.protobuf.gradle.id +import io.spine.internal.dependency.ProtoTap import io.spine.internal.dependency.Spine -import org.gradle.api.file.DuplicatesStrategy.INCLUDE plugins { protobuf `java-test-fixtures` + prototap } -protobuf { - protoc { - artifact = io.spine.internal.dependency.Protobuf.compiler - } - - val scriptPluginId = "pipeline-setup" - plugins { - create(scriptPluginId) { - path = "$projectDir/store-request.sh" - } - } - - // Allows test suites to fetch generated Java files generated for the `testFixtures` - // source set as resources. - generateProtoTasks { - ofSourceSet("testFixtures").forEach { task -> - - // Copy generated code to test resources so that `PipelineSetup` could - // pick them up. - tasks.processTestResources { - from(task.outputs) - duplicatesStrategy = INCLUDE - } - - // Generate descriptor set file with source code info and imports. - // Put the file under test resources as well. - with(task) { - plugins { - id(scriptPluginId) - } - generateDescriptorSet = true - with(descriptorSetOptions) { - path = "$buildDir/resources/test/$scriptPluginId/FileDescriptorSet.binpb" - includeSourceInfo = true - includeImports = true - } - } - } - } +prototap { + artifact.set(io.spine.internal.dependency.Protobuf.compiler) } dependencies { api(Spine.testlib) api(Spine.CoreJava.testUtilServer) + api(ProtoTap.api) api(project(":api")) api(project(":backend")) } From d059e597f65b97fa428f39e423889817dc43b72c Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:07:40 +0100 Subject: [PATCH 18/49] Consolidate `protoc` plugin code --- .../io/spine/protodata/protoc/Decoding.kt | 38 ------------------- .../io/spine/protodata/protoc/Plugin.kt | 12 +++++- 2 files changed, 11 insertions(+), 39 deletions(-) delete mode 100644 protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt diff --git a/protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt b/protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt deleted file mode 100644 index ad6896088..000000000 --- a/protoc/src/main/kotlin/io/spine/protodata/protoc/Decoding.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.protodata.protoc - -import java.util.* -import kotlin.text.Charsets.UTF_8 - -/** - * Decodes a UTF-8 string encoded in Base64 in this string. - */ -internal fun String.decodeBase64(): String { - val bytes = Base64.getDecoder().decode(this) - return String(bytes, UTF_8) -} 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 5e2928a39..b30cc0e31 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. @@ -35,6 +35,7 @@ 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 received `CodeGeneratorRequest` message to the file the name of which is passed as @@ -58,3 +59,12 @@ public fun main() { val emptyResponse = CodeGeneratorResponse.getDefaultInstance() 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) +} + From 06a4805bbb4190438cb26515ca21abe06cbac860 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:08:44 +0100 Subject: [PATCH 19/49] Avoid unnecessary dependencies Also: * Exclude unnecessary files from fat JAR. --- protoc/build.gradle.kts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/protoc/build.gradle.kts b/protoc/build.gradle.kts index 47cd47908..faf959428 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,10 @@ tasks.jar { else -> zipTree(it) } }) - - // We should provide a classifier or else Protobuf Gradle plugin will substitute it with - // an OS-specific one. + exclude( + // Protobuf files. + "google/**", + ) archiveClassifier.set("exe") - duplicatesStrategy = INCLUDE } From 7ff9968e4c24ccf842bc445ea4618a497d520d84 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:22:45 +0100 Subject: [PATCH 20/49] Specify artifact for `protoc` --- testlib/build.gradle.kts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index a8239a241..033d6b332 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -33,8 +33,10 @@ plugins { prototap } -prototap { - artifact.set(io.spine.internal.dependency.Protobuf.compiler) +protobuf { + protoc { + artifact = io.spine.internal.dependency.Protobuf.compiler + } } dependencies { From 2f0fe207ace0defe020351e844e01eae106af3ec Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:23:21 +0100 Subject: [PATCH 21/49] Bump ProtoTap -> `0.8.3` --- .../src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt index 0a1730189..8afeb34bc 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/ProtoTap.kt @@ -38,7 +38,7 @@ package io.spine.internal.dependency ) object ProtoTap { const val group = "io.spine.tools" - const val version = "0.8.1" + 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" From 82cbe8fae525d6731e4ca0592d5c3f8e58f62a55 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:23:57 +0100 Subject: [PATCH 22/49] Expose `Protobuf.javaLib` artifact --- .../io/spine/internal/dependency/Protobuf.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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}" ) From 5c92254f4af35759b7675239e45037c3f95da44a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:24:05 +0100 Subject: [PATCH 23/49] Remove unnecessary file --- testlib/store-request.sh | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100755 testlib/store-request.sh diff --git a/testlib/store-request.sh b/testlib/store-request.sh deleted file mode 100755 index c786f226e..000000000 --- a/testlib/store-request.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# -# This script is a `protoc` plugin which stores the `CodeGeneratorRequest` passed -# to stdin of the script. -# -# See `build.gradle.kts` and the `protobuf` block for the code adding this script -# as a `protoc` plugin. -# - -# Get the directory in which the script resides. It's the root of the subproject. -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) - -# We put the file under the `build/resources/test` so that tests can pick it up. -TARGET_DIR="$SCRIPT_DIR/build/resources/test/pipeline-setup" -mkdir -p "$TARGET_DIR" - -OUTPUT_FILE="$TARGET_DIR/CodeGeneratorRequest.binpb" - -cat >"$OUTPUT_FILE" From 83952fd6cb0665cce9c521c1b61c14ecc1185f46 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 2 May 2024 23:24:27 +0100 Subject: [PATCH 24/49] Get generated source code from ProtoTap --- .../kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index a52c59915..1c8fcea88 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -39,7 +39,7 @@ import io.spine.io.ResourceDirectory import io.spine.protodata.plugin.Plugin import io.spine.protodata.settings.Format import java.nio.file.Path -import java.nio.file.Paths +import kotlin.io.path.Path import kotlin.io.path.exists import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName @@ -99,7 +99,7 @@ internal class PipelineSetupSpec { @TempDir settingsDir: Path, @TempDir outputRoot: Path, ) { - val dir = ResourceDirectory.get("java", this::class.java.classLoader) + val dir = ResourceDirectory.get("prototap/java", this::class.java.classLoader) val inputRoot = dir.toPath() val setup = PipelineSetup( StubPlugin(), @@ -111,7 +111,7 @@ internal class PipelineSetupSpec { val sourceFileSet = setup.sourceFileSet sourceFileSet.find( - Paths.get("io/spine/given/domain/gas/CompressorStation.java") + Path("io/spine/given/domain/gas/CompressorStation.java") ) shouldNotBe null } From b4d5e9e1d5da069f9584818e9629100d84002921 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Fri, 3 May 2024 18:51:02 +0100 Subject: [PATCH 25/49] Remove extra empty line --- protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt | 1 - 1 file changed, 1 deletion(-) 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 b30cc0e31..e3187945a 100644 --- a/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt +++ b/protoc/src/main/kotlin/io/spine/protodata/protoc/Plugin.kt @@ -67,4 +67,3 @@ private fun String.decodeBase64(): String { val bytes = Base64.getDecoder().decode(this) return String(bytes, UTF_8) } - From e60c5516a74770456140f608c010c064a4c9f661 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 02:35:00 +0100 Subject: [PATCH 26/49] Update `config` --- .../src/main/kotlin/DependencyResolution.kt | 4 ++ .../io/spine/internal/dependency/Asm.kt | 10 ++- .../io/spine/internal/dependency/Jacoco.kt | 37 +++++++++++ .../io/spine/internal/dependency/Kover.kt | 2 +- .../io/spine/internal/dependency/Log4j2.kt | 42 +++++++++++++ .../io/spine/internal/dependency/Spine.kt | 2 +- .../spine/internal/dependency/SystemLambda.kt | 35 +++++++++++ .../internal/gradle/ProjectExtensions.kt | 7 +++ .../internal/gradle/dokka/DokkaExtensions.kt | 47 ++++++++++++++ .../gradle/dokka/TaskContainerExtensions.kt | 35 +++++++++++ .../io/spine/internal/gradle/java/Linters.kt | 61 +++++++++++++++++++ .../internal/gradle/kotlin/KotlinConfig.kt | 1 + .../gradle/protobuf/ProtoTaskExtensions.kt | 3 +- .../internal/gradle/publish/GitHubPackages.kt | 3 +- .../internal/gradle/publish/PublishingExts.kt | 22 +++++-- .../gradle/publish/SpinePublishing.kt | 30 ++++++++- .../gradle/report/coverage/JacocoConfig.kt | 23 +++++-- .../gradle/report/license/LicenseReporter.kt | 7 ++- .../io/spine/internal/gradle/testing/Tasks.kt | 4 +- .../main/kotlin/jacoco-kotlin-jvm.gradle.kts | 10 +-- .../src/main/kotlin/jvm-module.gradle.kts | 6 +- 21 files changed, 360 insertions(+), 31 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/dependency/Jacoco.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/dependency/Log4j2.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/dependency/SystemLambda.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt diff --git a/buildSrc/src/main/kotlin/DependencyResolution.kt b/buildSrc/src/main/kotlin/DependencyResolution.kt index 24c320d91..7016e404c 100644 --- a/buildSrc/src/main/kotlin/DependencyResolution.kt +++ b/buildSrc/src/main/kotlin/DependencyResolution.kt @@ -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/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/Spine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt index dd1a6943b..a3310dd50 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]. 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/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..a912d50b6 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt @@ -0,0 +1,47 @@ +/* + * 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. + */ +internal fun GradleDokkaSourceSetBuilder.onlyJavaSources(): FileCollection { + return sourceRoots.filter(File::isJavaSourceDirectory) +} + +private fun File.isJavaSourceDirectory(): Boolean { + return isDirectory && name == "java" +} diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt new file mode 100644 index 000000000..058eb992d --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt @@ -0,0 +1,35 @@ +/* + * 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 org.gradle.api.tasks.TaskContainer +import org.jetbrains.dokka.gradle.DokkaTask + +/** + * Finds the `dokkaHtml` Gradle task. + */ +fun TaskContainer.dokkaHtmlTask() = this.getByName("dokkaHtml") as DokkaTask diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt new file mode 100644 index 000000000..cfa49a982 --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt @@ -0,0 +1,61 @@ +/* + * 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.gradle.java + +import net.ltgt.gradle.errorprone.errorprone +import org.gradle.api.Project +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.kotlin.dsl.invoke +import org.gradle.kotlin.dsl.named + +/** + * Disables Java linters in this [Project]. + * + * In particular, the following linters will be disabled: + * + * 1. CheckStyle. + * 2. PMD. + * 3. ErrorProne. + * + * Apply this configuration for modules that have original Flogger sources, + * which have not been migrated to Kotlin yet. They produce a lot of + * errors/warnings failing the build. + * + * Our own sources are mostly in Kotlin (as for `spine-logging` repo), + * so this action seems quite safe. + */ +// TODO:2023-09-22:yevhenii.nadtochii: Remove this piece of configuration. +// See issue: https://github.com/SpineEventEngine/logging/issues/56 +fun Project.disableLinters() { + tasks { + named("checkstyleMain") { enabled = false } + named("pmdMain") { enabled = false } + named("compileJava") { + options.errorprone.isEnabled.set(false) + } + } +} 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..7a94730ae 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,7 @@ fun KotlinCompile.setFreeCompilerArgs() { "-Xskip-prerelease-check", "-Xjvm-default=all", "-Xinline-classes", + "-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..785d9f7f8 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 @@ -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/PublishingExts.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/publish/PublishingExts.kt index 78e739544..6237ce77b 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 + } + throw IllegalStateException("`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..17a2fd4ad 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 @@ -152,6 +152,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 +315,8 @@ open class SpinePublishing(private val project: Project) { internal fun configured() { ensureProtoJarExclusionsArePublished() ensureTestJarInclusionsArePublished() - ensuresModulesNotDuplicated() + ensureModulesNotDuplicated() + ensureCustomPublishingNotMisused() val projectsToPublish = projectsToPublish() projectsToPublish.forEach { project -> @@ -352,7 +369,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 +426,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 +442,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 ) } } From 6343330c48e6e8fa9628477fd17b5ade78b0ae76 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 02:35:17 +0100 Subject: [PATCH 27/49] Update `config` --- .../internal/gradle/publish/IncrementGuard.kt | 15 ++-- dependencies.md | 76 ++++--------------- pom.xml | 13 +++- 3 files changed, 35 insertions(+), 69 deletions(-) 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/dependencies.md b/dependencies.md index 46afb6c36..32b94b11c 100644 --- a/dependencies.md +++ b/dependencies.md @@ -926,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:17:58 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 **Tue May 07 19:30:07 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). @@ -1857,7 +1857,7 @@ This report was generated on **Mon Apr 22 01:17:58 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:17:58 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 **Tue May 07 19:30:07 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). @@ -2815,7 +2815,7 @@ This report was generated on **Mon Apr 22 01:17:58 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:17:59 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 **Tue May 07 19:30:08 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). @@ -3726,7 +3726,7 @@ This report was generated on **Mon Apr 22 01:17:59 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:17:59 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 **Tue May 07 19:30:08 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). @@ -4641,7 +4641,7 @@ This report was generated on **Mon Apr 22 01:17:59 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:17:59 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 **Tue May 07 19:30:08 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). @@ -5727,7 +5727,7 @@ This report was generated on **Mon Apr 22 01:17:59 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:18:00 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 **Tue May 07 19:30: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). @@ -6658,7 +6658,7 @@ This report was generated on **Mon Apr 22 01:18:00 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:18:00 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 **Tue May 07 19:30: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). @@ -6666,47 +6666,10 @@ This report was generated on **Mon Apr 22 01:18:00 WEST 2024** using [Gradle-Lic # 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 +6782,6 @@ This report was generated on **Mon Apr 22 01:18:00 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 +6818,6 @@ This report was generated on **Mon Apr 22 01:18:00 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 +6853,10 @@ This report was generated on **Mon Apr 22 01:18:00 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,7 +7388,7 @@ This report was generated on **Mon Apr 22 01:18:00 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:18:00 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 **Tue May 07 19:30: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). @@ -8395,7 +8344,7 @@ This report was generated on **Mon Apr 22 01:18:00 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:18:01 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 **Tue May 07 19:30: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). @@ -8864,6 +8813,11 @@ This report was generated on **Mon Apr 22 01:18:01 WEST 2024** using [Gradle-Lic 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) @@ -9424,4 +9378,4 @@ This report was generated on **Mon Apr 22 01:18:01 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Mon Apr 22 01:18:02 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 **Tue May 07 19:30: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). \ No newline at end of file diff --git a/pom.xml b/pom.xml index ddd81b4ab..641cb2b79 100644 --- a/pom.xml +++ b/pom.xml @@ -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 @@ -244,6 +250,11 @@ all modules and does not describe the project structure per-subproject. protodata-protoc 0.20.7 + + io.spine.tools + prototap-protoc-plugin + 0.8.3 + io.spine.tools spine-mc-java-annotation From ac951c933b3f150a1da651c71fbeb11bdf4732b1 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 02:35:49 +0100 Subject: [PATCH 28/49] Obtain class loader from a calling class --- testlib/build.gradle.kts | 2 + .../spine/protodata/testing/PipelineSetup.kt | 129 ++++++++++++++---- .../protodata/testing/PipelineSetupSpec.kt | 96 +++++-------- 3 files changed, 139 insertions(+), 88 deletions(-) diff --git a/testlib/build.gradle.kts b/testlib/build.gradle.kts index 033d6b332..e9575b233 100644 --- a/testlib/build.gradle.kts +++ b/testlib/build.gradle.kts @@ -45,4 +45,6 @@ dependencies { 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 index 0a128070d..abfbe34d8 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -27,49 +27,67 @@ package io.spine.protodata.testing import com.google.common.annotations.VisibleForTesting -import com.google.protobuf.Descriptors.FileDescriptor -import com.google.protobuf.compiler.codeGeneratorRequest -import io.spine.protodata.FileDependencies +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.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 the given ProtoData [plugin]. + * Creates a [Pipeline] for testing the 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. * - * @param P - * the type of the plugin under the test. - * @property plugin - * the plugin to be passed to the created pipeline. - * @property protoFiles - * descriptors of proto files included in the test. - * @param settingsDir - * the directory to which store the settings for the given plugin. + * @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 inputRoot * the root directory with the source code generated by `protoc`. * @param outputRoot * 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. * * @see [io.spine.protodata.settings.LoadsSettings.consumerId] */ -public class PipelineSetup( - public val plugin: P, - public val protoFiles: List, - settingsDir: Path, +public class PipelineSetup( + public val plugins: List, inputRoot: Path, outputRoot: Path, - private val writeSettings: (P, SettingsDirectory) -> Unit + public val request: CodeGeneratorRequest, + settingsDir: Path, + private val writeSettings: (SettingsDirectory) -> Unit ) { /** - * The directory to store settings for the [plugin]. + * Creates an instance with only one plugin to be passed to the created pipeline. + */ + public constructor( + plugin: Plugin, + inputRoot: Path, + outputRoot: Path, + request: CodeGeneratorRequest, + settingsDir: Path, + writeSettings: (SettingsDirectory) -> Unit + ): this(listOf(plugin), inputRoot, outputRoot, request, settingsDir, writeSettings) + + /** + * The directory to store settings for the [plugins]. */ public val settings: SettingsDirectory @@ -79,6 +97,9 @@ public class PipelineSetup( public val sourceFileSet: SourceFileSet init { + require(plugins.isNotEmpty()) { + "The list of plugins cannot be empty." + } settingsDir.toFile().mkdirs() settings = SettingsDirectory(settingsDir) outputRoot.toFile().mkdirs() @@ -89,21 +110,73 @@ public class PipelineSetup( * Creates the pipeline. */ public fun createPipeline(): Pipeline { - writeSettings(plugin, settings) + writeSettings(settings) val id = Pipeline.generateId() - val request = createRequest() - val pipeline = Pipeline(id, listOf(plugin), listOf(sourceFileSet), request, settings) + val pipeline = Pipeline(id, plugins, listOf(sourceFileSet), request, settings) return pipeline } - @VisibleForTesting - internal fun createRequest() = codeGeneratorRequest { - fileToGenerate.addAll(protoFiles.map { it.name }) + public companion object { + + public fun byResources( + language: Language, + plugins: List, + outputRoot: Path, + settingsDir: Path, + writeSettings: (SettingsDirectory) -> Unit + ): PipelineSetup { + val classLoader = classLoaderOfCaller() + val inputRoot = inputRootOf(language, classLoader) + val request = loadRequest(classLoader) + return PipelineSetup( + plugins, + inputRoot, + outputRoot, + request, + settingsDir, + writeSettings, + ) + } + + @VisibleForTesting + internal fun detectCallingClass(): Class<*> { + val caller = findCallerOf(this::class.java, 0) + val callingClass = Class.forName(caller!!.className) + return callingClass + } + + private fun classLoaderOfCaller(): ClassLoader { + val callingClass = detectCallingClass() + return callingClass.classLoader + } - val dependencies = FileDependencies(protoFiles).asList() - protoFile.addAll(dependencies.map { it.toProto() }) + 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 + } + } +} - val sfd = protoFiles.map { it.toProto() } - sourceFileDescriptors.addAll(sfd) +@VisibleForTesting +internal fun Language.protocOutputDir(): String { + return when(this) { + Java, Kotlin -> name.lowercase() + Protobuf -> "proto" + TypeScript -> "ts" + 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 index 1c8fcea88..b45e17a8a 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -26,22 +26,18 @@ package io.spine.protodata.testing -import com.google.common.truth.extensions.proto.ProtoTruth.assertThat -import com.google.protobuf.AnyProto 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.given.domain.gas.GasTransportationProto -import io.spine.given.domain.oil.OilRefineryProto -import io.spine.io.Resource import io.spine.io.ResourceDirectory import io.spine.protodata.plugin.Plugin import io.spine.protodata.settings.Format +import io.spine.tools.code.Java +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.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.io.TempDir @@ -57,11 +53,11 @@ internal class PipelineSetupSpec { ) { val setup = PipelineSetup( StubPlugin(), - listOf(AnyProto.getDescriptor()), - settingsDir, inputRoot, - outputRoot - ) { _, _ -> } + outputRoot, + CodeGeneratorRequest.getDefaultInstance(), + settingsDir, + ) { _ -> } setup.settings.path.exists() shouldBe true @@ -81,11 +77,11 @@ internal class PipelineSetupSpec { ) { val setup = PipelineSetup( StubPlugin(), - listOf(AnyProto.getDescriptor()), - settingsDir, inputRoot, - outputRoot - ) { _, settings -> + outputRoot, + CodeGeneratorRequest.getDefaultInstance(), + settingsDir, + ) { settings -> settings.write("foo_bar", Format.PROTO_JSON, Empty.getDefaultInstance().toByteArray()) } @@ -95,59 +91,39 @@ internal class PipelineSetupSpec { } @Test - fun `load Java source code copied by a Gradle task to test resources`( - @TempDir settingsDir: Path, - @TempDir outputRoot: Path, - ) { - val dir = ResourceDirectory.get("prototap/java", this::class.java.classLoader) - val inputRoot = dir.toPath() - val setup = PipelineSetup( - StubPlugin(), - listOf(AnyProto.getDescriptor()), - settingsDir, - inputRoot, - outputRoot - ) { _, _ -> } - - val sourceFileSet = setup.sourceFileSet - sourceFileSet.find( - Path("io/spine/given/domain/gas/CompressorStation.java") - ) shouldNotBe null + fun `obtain the calling class`() { + val callingClass = PipelineSetup.detectCallingClass() + callingClass shouldBe this::class.java } @Test - @Disabled("Until migration to ProtoTap") - fun `create 'CodeGeneratorRequest' instance mimicking 'protoc'`( + fun `obtain 'CodeGeneratorRequest' request and sources from resources captured by ProtoTap`( @TempDir settingsDir: Path, @TempDir outputRoot: Path, ) { - val dir = ResourceDirectory.get("java", this::class.java.classLoader) - val inputRoot = dir.toPath() - val setup = PipelineSetup( - StubPlugin(), - listOf( - GasTransportationProto.getDescriptor(), - OilRefineryProto.getDescriptor() - ), + val language = Java + val setup = PipelineSetup.byResources( + language, + listOf(StubPlugin()), + outputRoot, settingsDir, - inputRoot, - outputRoot - ) { _, _ -> } - - val resourceDir = "pipeline-setup" - val classLoader = this::class.java.classLoader - - //val descriptorSetFile = Resource.file("$resourceDir/FileDescriptorSet.binpb", classLoader) - //val descriptorSet = FileDescriptorSet.parseFrom(descriptorSetFile.open()) - - val requestFile = Resource.file("$resourceDir/CodeGeneratorRequest.binpb", classLoader) - val requestFromResources = CodeGeneratorRequest.parseFrom(requestFile.open()) - - val fromSetup = setup.createRequest() - - assertThat(requestFromResources) - .comparingExpectedFieldsOnly() - .isEqualTo(fromSetup) + ) { _ -> } + + val resourceDir = ResourceDirectory.get( + "${PROTOC_PLUGIN_NAME}/${language.protocOutputDir()}", + this::class.java.classLoader + ) + + setup.run { + sourceFileSet.run { + inputRoot shouldBe resourceDir.toPath() + isEmpty shouldBe false + find( + Path("io/spine/given/domain/gas/CompressorStation.java") + ) shouldNotBe null + } + request shouldNotBe CodeGeneratorRequest.getDefaultInstance() + } } } From 3b9fbf3a67d86292692a178ae47c8ab348a6efdb Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 04:41:41 +0100 Subject: [PATCH 29/49] Expose obtaining the calling class --- .../spine/protodata/testing/PipelineSetup.kt | 14 +++++------- .../protodata/testing/PipelineSetupSpec.kt | 22 ++++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index abfbe34d8..2f916724b 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -125,7 +125,8 @@ public class PipelineSetup( settingsDir: Path, writeSettings: (SettingsDirectory) -> Unit ): PipelineSetup { - val classLoader = classLoaderOfCaller() + val callingClass = detectCallingClass() + val classLoader = callingClass.classLoader val inputRoot = inputRootOf(language, classLoader) val request = loadRequest(classLoader) return PipelineSetup( @@ -140,16 +141,13 @@ public class PipelineSetup( @VisibleForTesting internal fun detectCallingClass(): Class<*> { - val caller = findCallerOf(this::class.java, 0) - val callingClass = Class.forName(caller!!.className) + 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 classLoaderOfCaller(): ClassLoader { - val callingClass = detectCallingClass() - return callingClass.classLoader - } - private fun loadRequest(classLoader: ClassLoader): CodeGeneratorRequest { val file = Resource.file( "$PROTOC_PLUGIN_NAME/$CODE_GENERATOR_REQUEST_FILE", diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index b45e17a8a..8f138e31c 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -59,13 +59,15 @@ internal class PipelineSetupSpec { settingsDir, ) { _ -> } - setup.settings.path.exists() shouldBe true - - setup.sourceFileSet.inputRoot shouldBe inputRoot - - setup.sourceFileSet.outputRoot.run { - this shouldBe outputRoot - exists() shouldBe true + setup.run { + settings.path.exists() shouldBe true + sourceFileSet.run { + inputRoot shouldBe inputRoot + outputRoot.run { + this shouldBe outputRoot + exists() shouldBe true + } + } } } @@ -97,7 +99,7 @@ internal class PipelineSetupSpec { } @Test - fun `obtain 'CodeGeneratorRequest' request and sources from resources captured by ProtoTap`( + fun `obtain 'CodeGeneratorRequest' and sources from resources captured by ProtoTap`( @TempDir settingsDir: Path, @TempDir outputRoot: Path, ) { @@ -115,14 +117,14 @@ internal class PipelineSetupSpec { ) setup.run { + request shouldNotBe CodeGeneratorRequest.getDefaultInstance() sourceFileSet.run { - inputRoot shouldBe resourceDir.toPath() isEmpty shouldBe false + inputRoot shouldBe resourceDir.toPath() find( Path("io/spine/given/domain/gas/CompressorStation.java") ) shouldNotBe null } - request shouldNotBe CodeGeneratorRequest.getDefaultInstance() } } } From b03588d344df4a216dc29af6744159507fd471fc Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 04:55:00 +0100 Subject: [PATCH 30/49] Remove redundant build config --- .../io/spine/internal/gradle/java/Linters.kt | 61 ------------------- 1 file changed, 61 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt deleted file mode 100644 index cfa49a982..000000000 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/java/Linters.kt +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.gradle.java - -import net.ltgt.gradle.errorprone.errorprone -import org.gradle.api.Project -import org.gradle.api.tasks.compile.JavaCompile -import org.gradle.kotlin.dsl.invoke -import org.gradle.kotlin.dsl.named - -/** - * Disables Java linters in this [Project]. - * - * In particular, the following linters will be disabled: - * - * 1. CheckStyle. - * 2. PMD. - * 3. ErrorProne. - * - * Apply this configuration for modules that have original Flogger sources, - * which have not been migrated to Kotlin yet. They produce a lot of - * errors/warnings failing the build. - * - * Our own sources are mostly in Kotlin (as for `spine-logging` repo), - * so this action seems quite safe. - */ -// TODO:2023-09-22:yevhenii.nadtochii: Remove this piece of configuration. -// See issue: https://github.com/SpineEventEngine/logging/issues/56 -fun Project.disableLinters() { - tasks { - named("checkstyleMain") { enabled = false } - named("pmdMain") { enabled = false } - named("compileJava") { - options.errorprone.isEnabled.set(false) - } - } -} From af7cf87632179a611aad36628a8f8a8f456d1cf7 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 06:06:44 +0100 Subject: [PATCH 31/49] Improve tests of `PipelineSetup` --- .../spine/protodata/testing/PipelineSetup.kt | 12 --- .../protodata/testing/PipelineSetupSpec.kt | 97 +++++++++++-------- 2 files changed, 55 insertions(+), 54 deletions(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 2f916724b..0b0acf560 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -74,18 +74,6 @@ public class PipelineSetup( settingsDir: Path, private val writeSettings: (SettingsDirectory) -> Unit ) { - /** - * Creates an instance with only one plugin to be passed to the created pipeline. - */ - public constructor( - plugin: Plugin, - inputRoot: Path, - outputRoot: Path, - request: CodeGeneratorRequest, - settingsDir: Path, - writeSettings: (SettingsDirectory) -> Unit - ): this(listOf(plugin), inputRoot, outputRoot, request, settingsDir, writeSettings) - /** * The directory to store settings for the [plugins]. */ diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index 8f138e31c..97b64b0da 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -32,7 +32,8 @@ 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 +import io.spine.protodata.settings.Format.PROTO_JSON +import io.spine.protodata.testing.PipelineSetup.Companion.byResources import io.spine.tools.code.Java import io.spine.tools.prototap.Names.PROTOC_PLUGIN_NAME import java.nio.file.Path @@ -45,26 +46,28 @@ import org.junit.jupiter.api.io.TempDir @DisplayName("`PipelineSetup` should") internal class PipelineSetupSpec { + private val emptyRequest = CodeGeneratorRequest.getDefaultInstance() + @Test fun `ensure directories are created`( - @TempDir settingsDir: Path, - @TempDir inputRoot: Path, - @TempDir outputRoot: Path, + @TempDir input: Path, + @TempDir output: Path, + @TempDir settings: Path, ) { val setup = PipelineSetup( - StubPlugin(), - inputRoot, - outputRoot, - CodeGeneratorRequest.getDefaultInstance(), - settingsDir, + listOf(StubPlugin()), + input, + output, + emptyRequest, + settings, ) { _ -> } setup.run { - settings.path.exists() shouldBe true + this.settings.path.exists() shouldBe true sourceFileSet.run { - inputRoot shouldBe inputRoot - outputRoot.run { - this shouldBe outputRoot + input shouldBe input + output.run { + this shouldBe output exists() shouldBe true } } @@ -73,23 +76,21 @@ internal class PipelineSetupSpec { @Test fun `invoke settings callback before creating a pipeline`( - @TempDir settingsDir: Path, - @TempDir inputRoot: Path, - @TempDir outputRoot: Path, + @TempDir input: Path, + @TempDir output: Path, + @TempDir settings: Path, ) { val setup = PipelineSetup( - StubPlugin(), - inputRoot, - outputRoot, - CodeGeneratorRequest.getDefaultInstance(), - settingsDir, - ) { settings -> - settings.write("foo_bar", Format.PROTO_JSON, Empty.getDefaultInstance().toByteArray()) - } + listOf(StubPlugin()), + input, + output, + emptyRequest, + settings, + ) { it.write("foo_bar", PROTO_JSON, Empty.getDefaultInstance().toByteArray()) } - settingsDir.fileCount() shouldBe 0 + settings.fileCount() shouldBe 0 setup.createPipeline() - settingsDir.fileCount() shouldBe 1 + settings.fileCount() shouldBe 1 } @Test @@ -99,25 +100,26 @@ internal class PipelineSetupSpec { } @Test - fun `obtain 'CodeGeneratorRequest' and sources from resources captured by ProtoTap`( - @TempDir settingsDir: Path, - @TempDir outputRoot: Path, + fun `use 'CodeGeneratorRequest' captured by ProtoTap`( + @TempDir output: Path, + @TempDir settings: Path, ) { - val language = Java - val setup = PipelineSetup.byResources( - language, - listOf(StubPlugin()), - outputRoot, - settingsDir, - ) { _ -> } - - val resourceDir = ResourceDirectory.get( - "${PROTOC_PLUGIN_NAME}/${language.protocOutputDir()}", - this::class.java.classLoader - ) + 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 { - request shouldNotBe CodeGeneratorRequest.getDefaultInstance() + val resourceDir = ResourceDirectory.get( + "${PROTOC_PLUGIN_NAME}/${language.protocOutputDir()}", + this::class.java.classLoader + ) sourceFileSet.run { isEmpty shouldBe false inputRoot shouldBe resourceDir.toPath() @@ -129,6 +131,17 @@ internal class PipelineSetupSpec { } } +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 From 87b56828511f00af31f45b729895e30c66b5204b Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Wed, 8 May 2024 06:25:54 +0100 Subject: [PATCH 32/49] Extract common code as `fun` --- .../protodata/testing/PipelineSetupSpec.kt | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index 97b64b0da..4b1e621cd 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -33,7 +33,9 @@ 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.prototap.Names.PROTOC_PLUGIN_NAME import java.nio.file.Path @@ -46,22 +48,13 @@ import org.junit.jupiter.api.io.TempDir @DisplayName("`PipelineSetup` should") internal class PipelineSetupSpec { - private val emptyRequest = CodeGeneratorRequest.getDefaultInstance() - @Test fun `ensure directories are created`( @TempDir input: Path, @TempDir output: Path, @TempDir settings: Path, ) { - val setup = PipelineSetup( - listOf(StubPlugin()), - input, - output, - emptyRequest, - settings, - ) { _ -> } - + val setup = setup(input, output, settings) { _ -> } setup.run { this.settings.path.exists() shouldBe true sourceFileSet.run { @@ -80,14 +73,9 @@ internal class PipelineSetupSpec { @TempDir output: Path, @TempDir settings: Path, ) { - val setup = PipelineSetup( - listOf(StubPlugin()), - input, - output, - emptyRequest, - settings, - ) { it.write("foo_bar", PROTO_JSON, Empty.getDefaultInstance().toByteArray()) } - + 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 @@ -95,7 +83,7 @@ internal class PipelineSetupSpec { @Test fun `obtain the calling class`() { - val callingClass = PipelineSetup.detectCallingClass() + val callingClass = detectCallingClass() callingClass shouldBe this::class.java } @@ -131,6 +119,20 @@ internal class PipelineSetupSpec { } } +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, From aa33a66bf5bd22c7663eb1fce0f5066c36daac93 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 00:18:27 +0100 Subject: [PATCH 33/49] Add test for `protocOutputDir` ext. `fun` --- .../io/spine/protodata/testing/PipelineSetupSpec.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt index 4b1e621cd..7323adc98 100644 --- a/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt +++ b/testlib/src/test/kotlin/io/spine/protodata/testing/PipelineSetupSpec.kt @@ -37,6 +37,8 @@ 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 @@ -117,6 +119,13 @@ internal class PipelineSetupSpec { } } } + + @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( From e65914d2cd0479d93e1e21485cd7098a42ff9904 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 00:19:28 +0100 Subject: [PATCH 34/49] Document `PipelineSetup` factory methods Also: * Add general description for the `PipelineSetup`. * Improve parameter names. --- .../spine/protodata/testing/PipelineSetup.kt | 129 ++++++++++++++++-- 1 file changed, 117 insertions(+), 12 deletions(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 0b0acf560..0939ae645 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -34,6 +34,7 @@ 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 @@ -45,19 +46,84 @@ import io.spine.tools.prototap.Paths.CODE_GENERATOR_REQUEST_FILE import java.nio.file.Path /** - * Creates a [Pipeline] for testing the given ProtoData [plugins]. + * 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. + * 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 another programming language 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. * * @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 inputRoot + * @param inputDir * the root directory with the source code generated by `protoc`. - * @param outputRoot + * @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. @@ -68,8 +134,8 @@ import java.nio.file.Path */ public class PipelineSetup( public val plugins: List, - inputRoot: Path, - outputRoot: Path, + inputDir: Path, + outputDir: Path, public val request: CodeGeneratorRequest, settingsDir: Path, private val writeSettings: (SettingsDirectory) -> Unit @@ -80,7 +146,7 @@ public class PipelineSetup( public val settings: SettingsDirectory /** - * A sole source file set used by the pipeline. + * The source file set used by the pipeline. */ public val sourceFileSet: SourceFileSet @@ -90,8 +156,8 @@ public class PipelineSetup( } settingsDir.toFile().mkdirs() settings = SettingsDirectory(settingsDir) - outputRoot.toFile().mkdirs() - sourceFileSet = SourceFileSet.create(inputRoot, outputRoot) + outputDir.toFile().mkdirs() + sourceFileSet = SourceFileSet.create(inputDir, outputDir) } /** @@ -106,10 +172,25 @@ public class PipelineSetup( 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, - outputRoot: Path, + outputDir: Path, settingsDir: Path, writeSettings: (SettingsDirectory) -> Unit ): PipelineSetup { @@ -120,13 +201,35 @@ public class PipelineSetup( return PipelineSetup( plugins, inputRoot, - outputRoot, + 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 @@ -161,8 +264,10 @@ public class PipelineSetup( internal fun Language.protocOutputDir(): String { return when(this) { Java, Kotlin -> name.lowercase() - Protobuf -> "proto" 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 mete-codegen tools that produce Protobuf code. + Protobuf -> "proto" else -> name } } From f562db3a61186498e20af524fae2f6e0b9447a76 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 00:31:03 +0100 Subject: [PATCH 35/49] Document the constructor Also: * Add `@see` links. --- .../main/kotlin/io/spine/protodata/testing/PipelineSetup.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 0939ae645..cb1a29650 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -129,7 +129,10 @@ import java.nio.file.Path * 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( From 7ed4a2dfb48bc35b8377c0cfb67c9350f5a0c5c9 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 00:36:44 +0100 Subject: [PATCH 36/49] Update build time --- dependencies.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dependencies.md b/dependencies.md index 32b94b11c..da3485f82 100644 --- a/dependencies.md +++ b/dependencies.md @@ -926,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30:07 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 00:36:02 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). @@ -1857,7 +1857,7 @@ This report was generated on **Tue May 07 19:30:07 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30:07 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 00:36:02 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). @@ -2815,7 +2815,7 @@ This report was generated on **Tue May 07 19:30:07 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30:08 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 00:36:02 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). @@ -3726,7 +3726,7 @@ This report was generated on **Tue May 07 19:30:08 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30:08 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 00:36:03 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). @@ -4641,7 +4641,7 @@ This report was generated on **Tue May 07 19:30:08 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30:08 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 00:36:03 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). @@ -5727,7 +5727,7 @@ This report was generated on **Tue May 07 19:30:08 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Tue May 07 19:30: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 00:36:04 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). @@ -6658,7 +6658,7 @@ This report was generated on **Tue May 07 19:30: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 **Tue May 07 19:30: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 00:36:04 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). @@ -7388,7 +7388,7 @@ This report was generated on **Tue May 07 19:30: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 **Tue May 07 19:30: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 00:36:04 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). @@ -8344,7 +8344,7 @@ This report was generated on **Tue May 07 19:30: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 **Tue May 07 19:30: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 00:36:05 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). @@ -9378,4 +9378,4 @@ This report was generated on **Tue May 07 19:30: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 **Tue May 07 19:30: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). \ No newline at end of file +This report was generated on **Thu May 09 00:36:05 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 From ee8716b745e88cc581ff52716f55d0f0c48e1cd5 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 00:59:35 +0100 Subject: [PATCH 37/49] Update `config` --- .github/workflows/publish.yml | 4 +- .../io/spine/internal/dependency/Caffeine.kt | 41 +++++++++++++++ .../io/spine/internal/dependency/ProtoData.kt | 4 +- .../io/spine/internal/dependency/Spine.kt | 2 +- .../spine/internal/dependency/Validation.kt | 4 +- .../internal/gradle/dokka/DokkaExtensions.kt | 1 + .../gradle/dokka/TaskContainerExtensions.kt | 1 + .../gradle/protobuf/ProtoTaskExtensions.kt | 2 +- .../internal/gradle/publish/PublishingExts.kt | 2 +- .../gradle/publish/SpinePublishing.kt | 2 + config | 2 +- dependencies.md | 52 ++++++++++--------- pom.xml | 18 +++---- 13 files changed, 92 insertions(+), 43 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/internal/dependency/Caffeine.kt diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 73a0a69f2..cadc62cc6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,11 +8,11 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v3 with: submodules: 'true' - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v3 with: java-version: 11 distribution: zulu 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/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/Spine.kt b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt index a3310dd50..91a91d739 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/dependency/Spine.kt @@ -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/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/dokka/DokkaExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt index a912d50b6..b3b14584a 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/DokkaExtensions.kt @@ -38,6 +38,7 @@ import org.jetbrains.dokka.gradle.GradleDokkaSourceSetBuilder * 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) } diff --git a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt index 058eb992d..fb116851f 100644 --- a/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt +++ b/buildSrc/src/main/kotlin/io/spine/internal/gradle/dokka/TaskContainerExtensions.kt @@ -32,4 +32,5 @@ import org.jetbrains.dokka.gradle.DokkaTask /** * Finds the `dokkaHtml` Gradle task. */ +@Suppress("unused") fun TaskContainer.dokkaHtmlTask() = this.getByName("dokkaHtml") as DokkaTask 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 785d9f7f8..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. 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 6237ce77b..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 @@ -73,7 +73,7 @@ internal val Project.spinePublishing: SpinePublishing if (fromRoot != null) { return fromRoot } - throw IllegalStateException("`SpinePublishing` is not found in `${project.name}`.") + error("`SpinePublishing` is not found in `${project.name}`.") } /** 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 17a2fd4ad..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 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 da3485f82..ab1fa5e92 100644 --- a/dependencies.md +++ b/dependencies.md @@ -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,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:02 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 00:50:19 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). @@ -1045,7 +1045,7 @@ This report was generated on **Thu May 09 00:36:02 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 **Thu May 09 00:36:02 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,7 +1858,7 @@ This report was generated on **Thu May 09 00:36:02 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:02 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 00:50:20 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). @@ -1981,7 +1982,7 @@ This report was generated on **Thu May 09 00:36:02 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 **Thu May 09 00:36:02 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,7 +2817,7 @@ This report was generated on **Thu May 09 00:36:02 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:02 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 00:50:20 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). @@ -2934,7 +2936,7 @@ This report was generated on **Thu May 09 00:36:02 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 **Thu May 09 00:36:02 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,7 +3728,7 @@ This report was generated on **Thu May 09 00:36:02 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:03 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 00:50:20 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). @@ -3845,7 +3847,7 @@ This report was generated on **Thu May 09 00:36:03 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 **Thu May 09 00:36:03 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,7 +4643,7 @@ This report was generated on **Thu May 09 00:36:03 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:03 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 00:50:21 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). @@ -4760,7 +4762,7 @@ This report was generated on **Thu May 09 00:36:03 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 **Thu May 09 00:36:03 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,7 +5729,7 @@ This report was generated on **Thu May 09 00:36:03 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:04 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 00:50:21 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). @@ -5846,7 +5848,7 @@ This report was generated on **Thu May 09 00:36:04 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 **Thu May 09 00:36:04 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,7 +6661,7 @@ This report was generated on **Thu May 09 00:36:04 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:04 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 00:50:21 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). @@ -7388,7 +7391,7 @@ This report was generated on **Thu May 09 00:36:04 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:04 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 00:50:22 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). @@ -7507,7 +7510,7 @@ This report was generated on **Thu May 09 00:36:04 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) @@ -7962,6 +7965,7 @@ This report was generated on **Thu May 09 00:36:04 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) @@ -8344,7 +8348,7 @@ This report was generated on **Thu May 09 00:36:04 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:05 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 00:50:22 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). @@ -8525,7 +8529,7 @@ This report was generated on **Thu May 09 00:36:05 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) @@ -9015,7 +9019,7 @@ This report was generated on **Thu May 09 00:36:05 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) @@ -9378,4 +9382,4 @@ This report was generated on **Thu May 09 00:36:05 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:36:05 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 00:50:22 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 641cb2b79..ef0d2d143 100644 --- a/pom.xml +++ b/pom.xml @@ -128,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 @@ -243,12 +243,12 @@ 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 @@ -258,33 +258,33 @@ all modules and does not describe the project structure per-subproject. 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 From aaf753932914399f92a150462615d6e9c7f67c24 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 13:32:32 +0100 Subject: [PATCH 38/49] Document `-Xexpect-actual-classes` Kotlin compiler arg. --- .../main/kotlin/io/spine/internal/gradle/kotlin/KotlinConfig.kt | 2 ++ 1 file changed, 2 insertions(+) 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 7a94730ae..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,8 @@ 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," + From 0d8051d69d6076d32284b6538ceb27c520478d85 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 13:35:27 +0100 Subject: [PATCH 39/49] Restore the comment on archive classifier --- protoc/build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protoc/build.gradle.kts b/protoc/build.gradle.kts index faf959428..351d2781e 100644 --- a/protoc/build.gradle.kts +++ b/protoc/build.gradle.kts @@ -46,6 +46,8 @@ tasks.jar { // 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 } From 5fa074a3a2c7a18b174857c1328b2a6fcc9f9534 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 13:36:54 +0100 Subject: [PATCH 40/49] Fix the level of nested headers --- .../main/kotlin/io/spine/protodata/testing/PipelineSetup.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index cb1a29650..49d28362a 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -78,20 +78,20 @@ import java.nio.file.Path * 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) + * #### 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) + * #### 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 + * #### 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: From be79255d6bd70f09c4b77b5adb7ee735497a15de Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 13:54:39 +0100 Subject: [PATCH 41/49] Document directory name conventions Also: * Improve layout of code blocks. * Fix misspelling. --- .../io/spine/protodata/testing/PipelineSetup.kt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 49d28362a..8e83aea81 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -95,6 +95,7 @@ import java.nio.file.Path * 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`( @@ -104,7 +105,9 @@ import java.nio.file.Path * // Test code will be here. * } * ``` + * * ### 5. Create `PipelineSetup` instance using [byResources] factory method + * * ```kotlin * val setup = PipelineSetup.byResources(outputDir, settingsDir) { * // Write settings here. @@ -117,6 +120,17 @@ import java.nio.file.Path * 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 for generated Protobuf 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 @@ -269,7 +283,7 @@ internal fun Language.protocOutputDir(): String { 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 mete-codegen tools that produce Protobuf code. + // But let's cover this case of the meta-codegen tools that produce Protobuf code. Protobuf -> "proto" else -> name } From 6d9e4be624c6263cc4ed804c16231c38754310f4 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:01:41 +0100 Subject: [PATCH 42/49] Update build time --- dependencies.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dependencies.md b/dependencies.md index ab1fa5e92..52d138bfb 100644 --- a/dependencies.md +++ b/dependencies.md @@ -926,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:19 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 13:59:19 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). @@ -1858,7 +1858,7 @@ This report was generated on **Thu May 09 00:50:19 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:20 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 13:59:20 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). @@ -2817,7 +2817,7 @@ This report was generated on **Thu May 09 00:50:20 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:20 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 13:59:20 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). @@ -3728,7 +3728,7 @@ This report was generated on **Thu May 09 00:50:20 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:20 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 13:59:21 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). @@ -4643,7 +4643,7 @@ This report was generated on **Thu May 09 00:50:20 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:21 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 13:59:21 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). @@ -5729,7 +5729,7 @@ This report was generated on **Thu May 09 00:50:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:21 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 13:59:21 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). @@ -6661,7 +6661,7 @@ This report was generated on **Thu May 09 00:50:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:21 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 13:59:22 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). @@ -7391,7 +7391,7 @@ This report was generated on **Thu May 09 00:50:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:22 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 13:59:22 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). @@ -8348,7 +8348,7 @@ This report was generated on **Thu May 09 00:50:22 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:22 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 13:59:22 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). @@ -9382,4 +9382,4 @@ This report was generated on **Thu May 09 00:50:22 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 00:50:22 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 13:59:22 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 From 0f166521ff8825527920f9e18be0b5da28d47413 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:12:19 +0100 Subject: [PATCH 43/49] Fix grammar in docs --- api/src/main/proto/spine/protodata/settings.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/proto/spine/protodata/settings.proto b/api/src/main/proto/spine/protodata/settings.proto index e245d6b82..f90179d70 100644 --- a/api/src/main/proto/spine/protodata/settings.proto +++ b/api/src/main/proto/spine/protodata/settings.proto @@ -93,7 +93,7 @@ enum Format { // A Protobuf message encoded in Protobuf JSON. // // Use this item instead of [JSON] for Protobuf messages stored in - // JSON format so that correct parser is selected for the file. + // JSON format so that the correct parser is selected for the file. // PROTO_JSON = 2 [(extension) = "pb.json"]; From e75c694408c6a9b330b9754abf8cc4e1d8d6c19e Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:21:15 +0100 Subject: [PATCH 44/49] Update build time --- dependencies.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dependencies.md b/dependencies.md index 52d138bfb..9ff16e928 100644 --- a/dependencies.md +++ b/dependencies.md @@ -926,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:19 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:16:47 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). @@ -1858,7 +1858,7 @@ This report was generated on **Thu May 09 13:59:19 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:20 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:16:48 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). @@ -2817,7 +2817,7 @@ This report was generated on **Thu May 09 13:59:20 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:20 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:16:48 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). @@ -3728,7 +3728,7 @@ This report was generated on **Thu May 09 13:59:20 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:21 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:16:48 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). @@ -4643,7 +4643,7 @@ This report was generated on **Thu May 09 13:59:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:21 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:16:49 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). @@ -5729,7 +5729,7 @@ This report was generated on **Thu May 09 13:59:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:21 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:16:49 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). @@ -6661,7 +6661,7 @@ This report was generated on **Thu May 09 13:59:21 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:22 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:16:49 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). @@ -7391,7 +7391,7 @@ This report was generated on **Thu May 09 13:59:22 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:22 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:16:50 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). @@ -8348,7 +8348,7 @@ This report was generated on **Thu May 09 13:59:22 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:22 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:16:50 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). @@ -9382,4 +9382,4 @@ This report was generated on **Thu May 09 13:59:22 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 13:59:22 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:16:50 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 From 1a7a1a3d6af6da78b20e2acde3f31a7f1bcf556d Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:23:16 +0100 Subject: [PATCH 45/49] Fix the level of the header --- .../src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 8e83aea81..263fe5393 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -106,7 +106,7 @@ import java.nio.file.Path * } * ``` * - * ### 5. Create `PipelineSetup` instance using [byResources] factory method + * #### 5. Create `PipelineSetup` instance using [byResources] factory method * * ```kotlin * val setup = PipelineSetup.byResources(outputDir, settingsDir) { From 307573efc6c4edb2daff1775231336ffd1105dfd Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:37:40 +0100 Subject: [PATCH 46/49] Bump Dokka -> `1.9.20` --- buildSrc/src/main/kotlin/io/spine/internal/dependency/Dokka.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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" From 7bd10746f6ab0302f4f8fbb19dade99aab4b9eda Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:37:55 +0100 Subject: [PATCH 47/49] Fix doc heading levels --- .../spine/protodata/testing/PipelineSetup.kt | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 263fe5393..07bfe90ba 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -68,30 +68,30 @@ import java.nio.file.Path * scenarios when generated code and [CodeGeneratorRequest] are already available or generated via * a custom procedure. * - * ### Creating `PipelineSetup` with the help of ProtoTap + * ## 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 + * ### 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) + * ### 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) + * ### 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 + * ### 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: @@ -106,29 +106,29 @@ import java.nio.file.Path * } * ``` * - * #### 5. Create `PipelineSetup` instance using [byResources] factory method + * ### 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 another programming language please use the overload which accepts [Language] as + * 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 for generated Protobuf code + * ## 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" + * * [Java] -> `"java"` + * * [Kotlin] -> `"kotlin"` + * * [TypeScript] -> `"ts"` + * * [Protobuf] -> `"proto"` * * Other languages -> a lowercase version of [Language.name]. * * @property plugins From f3393f4b55d7b3189b3faf8f4ba78d7df27b78a1 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:45:16 +0100 Subject: [PATCH 48/49] Use link to the method --- .../src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt index 07bfe90ba..0ee3fc99f 100644 --- a/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt +++ b/testlib/src/main/kotlin/io/spine/protodata/testing/PipelineSetup.kt @@ -113,7 +113,7 @@ import java.nio.file.Path * // Write settings here. * } * ``` - * The above call to `byResources()` assumes we work with code generation in [Java]. + * 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]). * From dc95cdee86a1966f400f7589f4793a07638b212e Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Thu, 9 May 2024 14:52:19 +0100 Subject: [PATCH 49/49] Update build time --- dependencies.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dependencies.md b/dependencies.md index 9ff16e928..327fe553a 100644 --- a/dependencies.md +++ b/dependencies.md @@ -926,7 +926,7 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:47 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). @@ -1858,7 +1858,7 @@ This report was generated on **Thu May 09 14:16:47 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:48 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). @@ -2817,7 +2817,7 @@ This report was generated on **Thu May 09 14:16:48 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:48 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). @@ -3728,7 +3728,7 @@ This report was generated on **Thu May 09 14:16:48 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:48 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). @@ -4643,7 +4643,7 @@ This report was generated on **Thu May 09 14:16:48 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:49 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). @@ -5729,7 +5729,7 @@ This report was generated on **Thu May 09 14:16:49 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:49 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). @@ -6661,7 +6661,7 @@ This report was generated on **Thu May 09 14:16:49 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:49 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). @@ -7391,7 +7391,7 @@ This report was generated on **Thu May 09 14:16:49 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:50 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). @@ -8348,7 +8348,7 @@ This report was generated on **Thu May 09 14:16:50 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:50 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). @@ -9382,4 +9382,4 @@ This report was generated on **Thu May 09 14:16:50 WEST 2024** using [Gradle-Lic The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu May 09 14:16:50 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). \ No newline at end of file