From 7b3b564f4b548ba55c53c6c00d609e31cd447852 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:03:57 +0000 Subject: [PATCH 01/29] Add repository audit report and improvement plan https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- .agents/tasks/improvement-plan.md | 88 ++++++ docs/audit-2026-06.md | 465 ++++++++++++++++++++++++++++++ 2 files changed, 553 insertions(+) create mode 100644 .agents/tasks/improvement-plan.md create mode 100644 docs/audit-2026-06.md diff --git a/.agents/tasks/improvement-plan.md b/.agents/tasks/improvement-plan.md new file mode 100644 index 0000000000..4de2017f0d --- /dev/null +++ b/.agents/tasks/improvement-plan.md @@ -0,0 +1,88 @@ +--- +slug: improvement-plan +branch: claude/loving-hypatia-tmv0w1 +owner: claude +status: draft +started: 2026-06-10 +--- + +## Goal + +Close the findings of the 2026-06 repository audit +([`docs/audit-2026-06.md`](../../docs/audit-2026-06.md)) that are owned +by this repository: tighten the public API surface before the 2.0.0 GA, +remove user-facing failure footguns, add direct tests for untested +modules, and add user-facing documentation. Finding IDs below (S2, A1, +…) refer to the audit report. + +## Context + +- The audit found no Critical issues; this plan covers Medium/Low items + with the highest leverage. +- Tasks marked `[config]` live in files vendored from the + `SpineEventEngine/config` submodule (e.g. `buildSrc/**`, + `.github/workflows/**`, `.codecov.yml`). They must be fixed in + `config` and synced; they are listed here only for tracking and must + NOT be edited in this repository. +- Open questions for a human before some tasks can start are listed in + the audit report, section 6 (PAT ownership, GA timeline, whether + `jvm → backend` exposure is intentional, perf budget). + +## Plan + +Milestone 1 — correctness and hygiene: + +- [ ] (S2) Reorder repositories in `settings.gradle.kts` so that + `mavenLocal()` is not first in `pluginManagement` and + `dependencyResolutionManagement`; align ordering with + `core-jvm-compiler`. Effort S, risk Low. +- [ ] (Q2) Replace bare `!!` at user-facing configuration points with + `checkNotNull`/`requireNotNull` and actionable messages. + Start with `gradle-plugin/.../Paths.kt:39`. Effort S, risk Low. +- [ ] (S1) `[config]` Remove the scrambled PAT from + `io/spine/gradle/repo/Repositories.kt`; blocked on audit open + question 1 (token ownership, GitHub Packages necessity). +- [ ] (Q3) `[config]` Fix or document the silent + `catch (ignored: Exception)` in + `buildSrc/.../javascript/task/Check.kt:143`. + +Milestone 2 — high-leverage (pre-GA API work): + +- [ ] (A1) Narrow `jvm/build.gradle.kts:39` from + `api(project(":backend"))` to `implementation(...)`; compile + errors enumerate the truly leaked types; promote genuine contract + types to `api` module or a small facade. Verify by building + `core-jvm-compiler` against the locally published snapshot + (`localPublish` + `tests/`). Leave `testlib`'s re-export as is + (test harness). Effort L, risk Medium — blocked on audit open + question 3. +- [ ] (T1) Add direct unit specs for `params` (parameter types, + file/directory conversions). Kotest assertions, `Spec` suffix, + stubs not mocks. Effort M, risk Low. +- [ ] (P1) Add a perf smoke signal for the engine (BuildSpeed or a + timed pipeline run) to PR workflows of this repo — blocked on + audit open question 4 (perf budget). Effort M, risk Low. + +Milestone 3 — polish: + +- [ ] (Doc1) Getting-started page: apply the Gradle plugin → generate → + inspect output; plus a "writing a compiler plugin" guide for + `api`/`gradle-api` consumers. Use the `writer` skill. Effort L. + Best done after the A1 surface settles. +- [ ] (A4) Document the process-exit contract of + `Compilation.error()`/`PluginFactory` (KDoc: production exits the + forked JVM, tests throw `Compilation.Error`), or refactor to + exception-first with the exit at the CLI boundary. Effort M, + risk Medium. +- [ ] (T2) `[config]` Write down the coverage policy + (baseline-no-regression) next to `.codecov.yml`. +- [ ] `[config]` Resolve the 2023-09-22 TODO in + `buildSrc/.../java/Linters.kt:51`. +- [ ] `[config]` Add `concurrency` groups to build/guard workflows; + SHA-pin third-party actions. + +## Log + +- 2026-06-10 — audit completed; report committed as + `docs/audit-2026-06.md`; plan drafted, awaiting human review of the + audit's open questions (section 6) before execution starts. diff --git a/docs/audit-2026-06.md b/docs/audit-2026-06.md new file mode 100644 index 0000000000..16e2b0b33c --- /dev/null +++ b/docs/audit-2026-06.md @@ -0,0 +1,465 @@ +# Technical audit: `compiler` and `core-jvm-compiler` + +*Read-only audit performed 2026-06-10 on `SpineEventEngine/compiler` +(master @ `3fe9dcb`) and `SpineEventEngine/core-jvm-compiler` +(master @ `3dce5d5`). No code was modified during the audit. +Paths below are repo-relative; findings in the sibling repository are +prefixed with `core-jvm-compiler/`.* + +The actionable follow-up lives in `.agents/tasks/improvement-plan.md` +in each repository. + +--- + +## 1. Executive summary + +**Overall health grade: B+.** These are disciplined, actively maintained +pre-GA (2.0.0-SNAPSHOT) Kotlin/Gradle toolchain repositories with clean +module DAGs, modern dependency versions (Kotlin 2.3.20, Gradle 9.5.1, +Protobuf 4.34.1), zero disabled tests, zero mock-framework usage, and CI +that runs unit + integration tests on two OSes for every push. The grade +is not an A because of a small set of structural debts that get more +expensive the closer 2.0.0 gets to GA. + +**Top 3 risks:** + +1. A scrambled GitHub PAT committed to source in both repositories, + deliberately evading GitHub secret scanning + (`buildSrc/src/main/kotlin/io/spine/gradle/repo/Repositories.kt`). +2. API-surface leaks — the `jvm` module re-exports the whole `backend` + engine, and `core-jvm-compiler`'s `base` re-exports compiler + internals, which will lock in accidental public API at GA. +3. Several build-logic findings live in files vendored from the `config` + submodule, so fixes cannot be made in these repositories directly, + and drift is already visible (a 2023 TODO survives in both copies). + +**Top 3 opportunities:** + +1. Pre-GA is the cheapest moment ever to tighten `api`/`implementation` + boundaries — afterwards it is a breaking change. +2. Collapsing the dual plugin-registration paths in `core-jvm-compiler` + into one registry removes the most likely future-bug generator. +3. User-facing documentation is nearly absent; a getting-started guide + is the highest-leverage adoption investment. + +--- + +## 2. Repo map + +### Purpose and maturity + +| | `compiler` | `core-jvm-compiler` | +|----------------|------------|---------------------| +| **What it is** | The Spine Compiler: library + CLI + `protoc` plugin + Gradle plugin turning Protobuf definitions into enriched domain models | Plugins *for* the Spine Compiler that the Core JVM library uses to generate client/server code | +| **Artifacts** | `io.spine.tools:compiler-*` | `io.spine.tools` plugins, bundled as a fat JAR | +| **Version** | `2.0.0-SNAPSHOT.046` | `2.0.0-SNAPSHOT.068` | +| **Maturity** | Pre-GA, published SDK tooling | Same stage; consumed by sibling Spine repos | +| **Size** | 506 Kotlin + 50 Java files (~50K LOC Kotlin), 72 protos, 11 modules | 403 Kotlin + 80 Java files (~38K LOC), 110 protos, 19 modules | + +### Stack + +Kotlin 2.3.20 / Java 17 (zulu), Gradle 9.5.1 wrapper (HTTPS + +`validateDistributionUrl=true`), Protobuf 4.34.1, gRPC 1.76.0, +JUnit + Kotest 6.x, KSP, KotlinPoet 2.2.0, Detekt +(`buildSrc/quality/detekt-config.yml` via the `detekt-code-analysis` +convention plugin, applied in `module.gradle.kts:50`), Kover +(`module.gradle.kts:52`), Codecov. Shared build logic is vendored from +the `SpineEventEngine/config` git submodule into each repo's `buildSrc`. + +### Architecture sketch — `compiler` + +Module DAG (all edges verified in module build files; no cycles): + +``` +api ← params ← backend(api: :api) ← jvm(api: :backend!) ← cli + +gradle-api ← gradle-plugin protoc-plugin (standalone) +testlib/test-env (test infra) api-tests (tests for :api) +``` + +Control flow: `protoc` (via the tiny `protoc-plugin`) writes +a `CodeGeneratorRequest` to disk → the Gradle plugin's +`LaunchSpineCompiler : JavaExec` task +(`gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/LaunchSpineCompiler.kt:78`) +forks a JVM running the CLI → `backend`'s `Pipeline` +(`backend/src/main/kotlin/io/spine/tools/compiler/backend/Pipeline.kt:95`) +loads parameters, builds a `TypeSystem`, then spins up a Spine +event-sourcing "Code Generation" bounded context (`Pipeline.kt:35-37` +imports `io.spine.server.delivery.Delivery`, `InMemoryStorageFactory`, +`InMemoryTransportFactory`): Protobuf-compiler events are emitted into +it, plugin `Renderer`s query entity states and rewrite the +`SourceFileSet`, which is flushed to disk. The compiler dogfoods Spine's +own event-driven architecture. + +### Architecture sketch — `core-jvm-compiler` + +`base` (settings/infra) ← feature plugins `annotation`, `entity`, +`signal`, `marker`, `message-group`, `uuid`, `comparable`, `grpc`, +`routing` (KSP-based) ← `plugins` (orchestrator + fat JAR). +`CoreJvmPlugin` (`plugins/src/main/kotlin/io/spine/tools/core/jvm/gradle/plugins/CoreJvmPlugin.kt:65-119`) +applies Protobuf, then `CompilerConfigPlugin` +(`CompilerConfigPlugin.kt:143-171`) registers each feature plugin into +the Spine Compiler. Each feature module has a paired `*-tests` module — +a documented workaround (`TESTING.md:14-40`): tests need *vanilla* +protoc output, but applying the plugin to a project would enhance its +own fixtures. + +### Surprises + +1. The compiler's backend is literally an event-sourced application — + elegant dogfooding, with real performance/complexity implications + (tracked only in `core-jvm-compiler` via BuildSpeed, not in + `compiler` itself). +2. A deliberately scrambled GitHub PAT lives in source (see S1). +3. `core-jvm-compiler/.agents/project.md` was the unfilled template at + the time of the audit (fixed alongside this report). + +--- + +## 3. Audit report + +Severity scale: Critical / High / Medium / Low. Each finding is labeled +**FACT** (verified, cited) or **JUDGMENT** (assessment). + +### 3.1 Security + +**S1 — Scrambled GitHub PAT committed to source, deliberately evading +secret scanning. MEDIUM (escalates to High if scope ever broadens).** +FACT: `buildSrc/src/main/kotlin/io/spine/gradle/repo/Repositories.kt:58-80` +(identical vendored copy in `core-jvm-compiler`) defines +`private object Pat` holding a scrambled token, de-scrambled at runtime +into credentials for `https://maven.pkg.github.com/SpineEventEngine/*`. +The KDoc states the scrambling exists "because GitHub analyzes commits +for the presence of tokens and invalidates them." +Why it matters: (a) the token is trivially extractable by anyone with +repo read access, and its claimed `read:packages`-only scope cannot be +verified from code; (b) it is a shared, org-wide credential with no +rotation story; (c) intentionally defeating GitHub secret scanning fails +third-party security review and arguably violates platform policy. +JUDGMENT: the single ugliest item in both repos; belongs on the +GA-blocker list even though practical exposure today is small. + +**S2 — `mavenLocal()` is the first resolution repository in `compiler`. +MEDIUM.** +FACT: `settings.gradle.kts:31-44` puts `mavenLocal()` first in both +`pluginManagement` and `dependencyResolutionManagement`; +`core-jvm-compiler/settings.gradle.kts:52-56` puts `gradlePluginPortal()` +first. Why it matters: any stale artifact in a developer's `~/.m2` +silently shadows remote releases; the inconsistency between sibling +repos suggests drift, not policy. (The snapshot-driven sibling-repo +workflow legitimately needs `mavenLocal()` — the issue is *position*.) + +**S3 — GitHub Actions pinned to mutable tags, not SHAs. LOW.** +FACT: `actions/checkout@v4`, `setup-java@v4`, +`mikepenz/action-junit-report@v4.0.3`, `codecov/codecov-action@v4` +(`.github/workflows/build-on-ubuntu.yml:11-34`). + +**Healthy:** No hardcoded passwords/API keys elsewhere; no +`ProcessBuilder`/`Runtime.exec`/`URLClassLoader`/unsafe deserialization +in production code; publish workflow triggers only on +`push: branches: [master]` with GPG-decrypted key files and `chmod 400` +(`publish.yml:3-5`); no `pull_request_target`; Gradle wrapper checksum +validation on; known-vulnerable transitives of +`artifactregistry-auth-common` are explicitly force-upgraded with +documentation in `buildSrc/build.gradle.kts`. + +### 3.2 Architecture and design + +**A1 — `jvm` module re-exports the entire backend engine. MEDIUM.** +FACT: `jvm/build.gradle.kts:39` — `api(project(":backend"))`, with no +`because(...)` rationale (other deps in the repo conventionally carry +one, e.g. `backend/build.gradle.kts:51`). Why it matters: every consumer +of `compiler-jvm` (including `core-jvm-compiler`) gets the whole +pipeline engine on its *compile* classpath transitively. Internal engine +refactors become breaking changes for downstream plugin authors. +JUDGMENT: at GA this freezes the engine as de-facto public API; pre-GA +is the only cheap time to narrow it. + +**A2 — `core-jvm-compiler/base` re-exports compiler internals to all +feature modules. MEDIUM.** +FACT: `core-jvm-compiler/base/build.gradle.kts:72-76` declares +`api(Compiler.api)`, `api(Compiler.jvm)`, `api(Validation.context)`, +`api(KotlinPoet.lib)`. JUDGMENT: partially legitimate (feature plugins +genuinely extend compiler types), but combined with A1 the effective +public surface is "everything down to the engine". + +**A3 — Plugin registration is duplicated across two unlinked sites. +MEDIUM.** +FACT: adding a codegen feature requires editing both +`core-jvm-compiler/plugins/.../CompilerConfigPlugin.kt:157-170` +(one `addPlugin()` per feature) *and* +`core-jvm-compiler/plugins/.../WriteCompilerPluginsSettings.kt:85-94` +(`forAnnotationPlugin` … `forStyleFormattingPlugin`, defined at lines +121-170). Nothing ties the two lists together; the file already carries +`@file:Suppress("TooManyFunctions")`. A forgotten settings-writer for a +newly registered plugin fails at build-run time in consumer projects, +not at compile time. + +**A4 — Public API terminates the JVM, with behavior switched by test +detection. LOW-MEDIUM.** +FACT: `api/src/main/kotlin/io/spine/tools/compiler/Compilation.kt:101-108` +— `error()` calls `exitProcess(ERROR_EXIT_CODE)` in production but +throws `Compilation.Error` when `io.spine.environment.Tests` is detected +(`Compilation.kt:63-64`). Mitigating FACT: the Gradle plugin always +forks (`LaunchSpineCompiler : JavaExec`), so the daemon is safe. +JUDGMENT: production code branching on "am I under test" is a +testability smell, and any third party embedding the `api` library +in-process gets its JVM killed. Same pattern in +`backend/.../PluginFactory.kt:65`. + +**A5 — Settings god-object tendency. LOW (JUDGMENT).** +`core-jvm-compiler/base/.../CoreJvmCompilerSettings.kt` (224 LOC) +centralizes settings for all plugins; every new feature grows it. +Tolerable now; watch it. + +**Healthy:** Both DAGs are acyclic with a single foundation module; +`api-tests` and the paired `*-tests` modules are well-reasoned, +documented solutions to genuine test-contamination cycles +(`core-jvm-compiler/TESTING.md:14-40`); `protoc-plugin` is kept minimal +(deps: Protobuf + Base only); plugin ordering concerns (validation +first, annotations after features) are handled explicitly +(`CompilerConfigPlugin.kt:153,164-166`); fat-JAR distribution gives +consumers a single artifact. + +### 3.3 Code quality + +**Q1 — Vendored build-logic drift (the `config` submodule problem). +MEDIUM.** +FACT: `buildSrc` files are byte-identical across the two repos +(e.g. `SpinePublishing.kt`, 492 lines; `ConfigTester.kt`, 369 lines; +`BuildExtensions.kt`, 356 lines), distributed from the `config` +submodule by design. The drift evidence: a TODO dated 2023-09-22 +referencing a logging issue survives in both copies +(`buildSrc/src/main/kotlin/io/spine/gradle/java/Linters.kt:51`), and the +two repos disagree on repository ordering (S2). Why it matters: not the +duplication itself (deliberate), but that fixes must be made in `config` +and re-synced — several findings in this audit live in files these repos +cannot durably fix alone. + +**Q2 — Non-null assertions in config-sensitive paths. LOW.** +FACT: 27 (`compiler`) + 41 (`core-jvm-compiler`) `!!` in production +code; e.g. `gradle-plugin/.../Paths.kt:39` +(`protobufExtension!!.generatedFilesBaseDir`) and +`core-jvm-compiler/plugins/.../WriteCompilerPluginsSettings.kt:80` +(`options.compiler!!.toProto()`) fail with bare NPEs instead of +actionable configuration errors. + +**Q3 — Silently swallowed exception in build logic. LOW.** +FACT: `buildSrc/src/main/kotlin/io/spine/gradle/javascript/task/Check.kt:143` +— `catch (ignored: Exception) { }` with no comment (vendored file → fix +in `config`). + +**Healthy:** No god files (largest production file is the 451-line test +harness `testlib/.../PipelineSetup.kt`); ~409 `@Suppress` annotations +across both repos are overwhelmingly narrow and justified in place; only +2 production TODOs total; deprecated JaCoCo convention scripts after the +June-2026 Kover migration carry proper deprecation warnings pointing at +replacements (`jacoco-kotlin-jvm.gradle.kts:42`); `exitProcess` is +confined to CLI/forked-process paths. + +### 3.4 Testing + +**T1 — Modules with zero direct tests. MEDIUM.** +FACT (after correcting for the documented `*-tests` pattern): truly +untested directly are `params` (8 production files, no `src/test`), +`core-jvm-compiler/base` (29 files, `src/main` + `src/testFixtures` +only), and `core-jvm-compiler/grpc` (3 files, no `grpc-tests` sibling). +JUDGMENT: `base` is the shared foundation of nine plugins; it is +exercised only transitively, so a regression there surfaces as a +confusing downstream failure. + +**T2 — Coverage gate is effectively non-binding. LOW.** +FACT: `.codecov.yml` (identical in both): `patch: off`, project target +`auto` with `threshold: 0.05%`, `only_pulls: true`; Kover instruments +(`module.gradle.kts:52`), Codecov uploads with `fail_ci_if_error: false` +(`build-on-ubuntu.yml:37`). JUDGMENT: "don't regress the baseline" is a +reasonable floor for codegen repos; just know there is no hard number. + +**Healthy (genuinely strong):** Zero `@Disabled`/`@Ignore`/commented-out +tests in either repo; zero mockito/mockk — matching the stated +stubs-not-mocks policy; sampled tests assert real behavior (byte-level +request equality in `ProtocPluginSpec.kt`, generated-comparator source +assertions in `core-jvm-compiler`'s `AddComparatorSpec.kt`, +exception-type assertions in routing specs); zero +`Thread.sleep`/timing/order-dependent tests; `@TempDir` everywhere; +integration tests are first-class — `check` depends on the separate +`tests/` build against locally-published artifacts +(`build.gradle.kts:153-166`), on Ubuntu and Windows, on every push. + +### 3.5 Performance + +**P1 — Heavyweight engine, performance tracked in only one repo. LOW.** +FACT: the pipeline runs a full event-sourced bounded context per +compilation (`Pipeline.kt:35-37`); `core-jvm-compiler` measures build +performance on every PR via the BuildSpeed submodule +(`performance-test.yml:1-3`), but `compiler` — where the engine lives — +has no perf workflow. JUDGMENT: no evidence of a problem (no +N+1/blocking-async patterns found), but engine regressions are detected +one repo downstream of where they are introduced. + +### 3.6 Dependencies + +Healthy in one sentence each: versions are current for mid-2026 +(Kotlin 2.3.20, Gradle 9.5.1, Protobuf 4.34.1 — +`buildSrc/.../lib/Protobuf.kt:36`, gRPC 1.76.0, Kotest 6.x) and +identical across the two repos (zero mismatches found); there is no +Dependabot/Renovate, which is a deliberate org choice (agent-driven +`dependency-update` skill) but means cadence depends on humans +remembering; Log4j-related pins are stale-ish but not in any exposed +path. Dependency recency judgments are based on version numbers in +`buildSrc` files, not registry lookups. + +### 3.7 DevEx and operations + +**D1 — No `concurrency` groups on the expensive workflows. LOW.** +FACT: only `check-links.yml` declares `concurrency`; +`build-on-ubuntu.yml`/`build-on-windows.yml`/`increment-guard.yml` run +on every push to any branch (`on: push`) with full integration tests and +no cancel-in-progress — rapid pushes stack redundant long builds. + +**D2 — Version-increment guard is a great, unusual control. Strength.** +FACT: `increment-guard.yml` runs `checkVersionIncrement` on every push, +preventing republishing an already-published snapshot — this protects +the cross-repo `mavenLocal` workflow. + +**Healthy:** Detekt + PMD + Kover wired through convention plugins so +every module gets them by default; `gradle-doctor`; license reports + +POM generation; JUnit XML published to PR checks; wrapper-validation +workflow; obsolete-artifact cleanup workflow. + +### 3.8 Documentation + +**Doc1 — No user-facing documentation for the compiler. MEDIUM (becomes +High at GA).** +FACT: `README.md` is 25 lines with zero usage instructions; `docs/` in +both repos contained only generated dependency reports at audit time; +there is no getting-started, no "how to write a compiler plugin" guide +anywhere in either repo, despite `api`/`gradle-api` being explicitly +designed for downstream authors. + +**Doc2 — `core-jvm-compiler/.agents/project.md` was the unfilled +template. LOW.** (Fixed alongside this report.) + +**Healthy:** `core-jvm-compiler/TESTING.md` is an exemplary explanation +of a non-obvious test architecture; KDoc density in sampled production +files is high and includes why-comments (e.g. the Dokka version-conflict +workaround documented inline at `build.gradle.kts:169-182`). + +### The ugly parts, ranked + +1. **The scrambled PAT (S1)** — secret-scanning evasion in source, in + both repos, vendored from `config`. +2. **API-boundary leaks (A1 + A2)** — cheap to fix now, breaking to fix + after GA. +3. **Dual plugin registration (A3)** — the most likely source of a + future runtime-only bug. +4. **`mavenLocal()`-first + vendored drift (S2 + Q1)** — reproducibility + and "which copy is true?" entropy. +5. **Docs gap (Doc1)** — adoption ceiling for the whole 2.0 toolchain. + +--- + +## 4. Improvement strategy + +### Theme 1: Freeze the *intended* API surface before GA + +Findings: A1, A2, A4. **Target state:** `compiler-jvm` exposes backend +types only where plugin authors genuinely need them (`implementation` + +a small exported facade); `base` re-exports only types that appear in +its own public signatures; `Compilation.error()`'s process-exit behavior +is documented as CLI contract or replaced by exception-first with exit +at the CLI boundary. **Principle:** in a published SDK, every `api(...)` +edge is a 10-year contract; pre-GA is the last cheap exit. + +### Theme 2: One source of truth for plugin wiring + +Findings: A3, A5. **Target state:** a single registry (each feature +contributes `{ pluginClass, settingsId, writeSettings(dir, options) }`) +consumed by both `CompilerConfigPlugin` and +`WriteCompilerPluginsSettings`, so adding a feature is one declaration. +**Principle:** two lists that must agree will eventually disagree. + +### Theme 3: Make the security posture defensible by inspection + +Findings: S1, S2, S3. **Target state:** no credential material in +source — anonymous-readable primary repository (the +`europe-maven.pkg.dev` registry already serves releases) with GitHub +Packages either dropped or fed by `GITHUB_TOKEN`/env var; consistent +repo ordering (`mavenLocal()` never first) across the org via one +`config` change; actions SHA-pinned. **Principle:** a reviewer should +conclude "no secrets in source" by grep, not by trusting a comment +about token scope. + +### Theme 4: Test the foundations directly, keep the gate honest + +Findings: T1, T2. **Target state:** `base`, `params`, `grpc` get direct +unit specs for their pure logic (settings serialization round-trips, +parameter validation); coverage keeps the "no regression" gate but the +policy is written down. **Principle:** shared foundations fail loudest +and are debugged farthest from the cause. + +### Theme 5: Documentation proportional to ambition + +Findings: Doc1, Doc2. **Target state:** one getting-started page and one +"writing a compiler plugin" guide; `project.md` filled in. +**Principle:** the code is ready for users the docs don't invite. + +### Explicitly NOT recommended + +- **Un-vendoring `buildSrc` / extracting a shared plugin artifact.** + The submodule+sync model is org-wide and working; replacing it is an + org-level program. Fix *content* in `config`; keep the mechanism. +- **Restructuring the `*-tests` paired modules.** Verbose but correct, + and `TESTING.md` justifies it. +- **Replacing the event-sourced backend.** It is the product's identity; + demand evidence (BuildSpeed for `compiler`, P1) before touching it. +- **Hard coverage floors (e.g., 80%).** Codegen repos measure poorly; + baseline-no-regression is the right gate at this maturity. +- **Dependabot.** The org's skill-driven update flow covers it; a second + updater creates noise. + +### "Done" signals + +- `grep -r "shade" buildSrc/` returns nothing in either repo. +- `:jvm:dependencies --configuration apiElements` no longer lists + `:backend` (or an ADR records why it must). +- Adding a feature plugin to `core-jvm-compiler` compiles after touching + exactly one registration site. +- `settings.gradle.kts` repo ordering identical in both repos; + `mavenLocal()` not first. +- `base`, `params`, `grpc` each have `src/test` with behavior + assertions; Codecov baseline unchanged or up. +- `README.md` links a working quick-start a newcomer can complete. + +--- + +## 5. Task plan + +The milestone/task breakdown, effort estimates, and implementation +sketches live in `.agents/tasks/improvement-plan.md` of each repository +(repo-scoped). Tasks touching vendored files are marked `[config]` and +must land in `SpineEventEngine/config` first, then be synced. + +Quick wins (S effort, high signal): fill `project.md` +(`core-jvm-compiler` — done with this report), CI concurrency groups +`[config]`, `mavenLocal()` reorder, silent-catch fix `[config]`, stale +2023 TODO `[config]`, SHA-pin actions `[config]`. + +--- + +## 6. Open questions + +1. **PAT (S1):** What is the actual scope of the scrambled token, who + owns it, and is dropping GitHub Packages as a resolution source + acceptable (Cloud Artifact Registry as the sole remote)? +2. **GA timeline for 2.0.0:** If GA is near, Theme 1 (API freeze) and + Doc1 jump to the front. +3. **Is `jvm`'s `api(":backend")` intentional** — are downstream plugin + authors supposed to program against `backend` types? If yes, an ADR + saying so closes A1 cheaper than refactoring. +4. **Performance budget:** Is there a target for compiler overhead per + build? Needed before a `compiler` perf workflow can assert anything. +5. **Coverage appetite:** Keep baseline-no-regression, or set a floor + for the non-generated core (`api`, `backend`)? +6. **`config` sync cadence:** Several fixes route through the `config` + repo — who owns the sync wave? From 63daa82d44cdcc196893796aa53929eb45e9aa8c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:03:57 +0000 Subject: [PATCH 02/29] Bump version -> `2.0.0-SNAPSHOT.047` https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index 89ed54db21..292a0f6479 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -30,7 +30,7 @@ * This version is also used by integration test projects. * E.g. see `tests/consumer/build.gradle.kts`. */ -val compilerVersion: String by extra("2.0.0-SNAPSHOT.046") +val compilerVersion: String by extra("2.0.0-SNAPSHOT.047") /** * The version, same as [compilerVersion], which is used for publishing From 98eeccc49b0e41c6c9041975e4c4f1e61ba44a8e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:10:21 +0000 Subject: [PATCH 03/29] Update dependency reports Self-version labels updated to match the bump. The full report regeneration could not run in this environment: the Spine artifact registries are not reachable from the sandbox (HTTP 403 via egress policy). Dependency content is unchanged from the last real run. https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- docs/dependencies/dependencies.md | 22 +++++++++++----------- docs/dependencies/pom.xml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 593ae28de3..6d073b13b9 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -1081,7 +1081,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.047` ## Runtime ## Compile, tests, and tooling @@ -1454,7 +1454,7 @@ This report was generated on **Mon Jun 01 15:24:22 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -2539,7 +2539,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -3673,7 +3673,7 @@ This report was generated on **Mon Jun 01 15:24:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -4700,7 +4700,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -5771,7 +5771,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -6873,7 +6873,7 @@ This report was generated on **Mon Jun 01 15:24:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -7946,7 +7946,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8773,7 +8773,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. @@ -9854,7 +9854,7 @@ This report was generated on **Mon Jun 01 15:24:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.046` +# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.047` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.21.3. diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index dc22888fb1..c4f7948de6 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools spine-compiler -2.0.0-SNAPSHOT.046 +2.0.0-SNAPSHOT.047 2015 From 89b7909b8299f745ea291410cf9e931bf3a0cf2a Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:15:08 +0000 Subject: [PATCH 04/29] Clarify that the repo map lists versions at audit time https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- docs/audit-2026-06.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/audit-2026-06.md b/docs/audit-2026-06.md index 16e2b0b33c..4cdd2dd2c1 100644 --- a/docs/audit-2026-06.md +++ b/docs/audit-2026-06.md @@ -52,7 +52,7 @@ expensive the closer 2.0.0 gets to GA. |----------------|------------|---------------------| | **What it is** | The Spine Compiler: library + CLI + `protoc` plugin + Gradle plugin turning Protobuf definitions into enriched domain models | Plugins *for* the Spine Compiler that the Core JVM library uses to generate client/server code | | **Artifacts** | `io.spine.tools:compiler-*` | `io.spine.tools` plugins, bundled as a fat JAR | -| **Version** | `2.0.0-SNAPSHOT.046` | `2.0.0-SNAPSHOT.068` | +| **Version at audit time** | `2.0.0-SNAPSHOT.046` | `2.0.0-SNAPSHOT.068` | | **Maturity** | Pre-GA, published SDK tooling | Same stage; consumed by sibling Spine repos | | **Size** | 506 Kotlin + 50 Java files (~50K LOC Kotlin), 72 protos, 11 modules | 403 Kotlin + 80 Java files (~38K LOC), 110 protos, 19 modules | From 50c823f8a644473d24f44df3576a12543fec37b3 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:36:58 +0000 Subject: [PATCH 05/29] Bump version -> `2.0.0-SNAPSHOT.052` https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index 2a8c87edd6..c37349bbcd 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -30,7 +30,7 @@ * This version is also used by integration test projects. * E.g. see `tests/consumer/build.gradle.kts`. */ -val compilerVersion: String by extra("2.0.0-SNAPSHOT.051") +val compilerVersion: String by extra("2.0.0-SNAPSHOT.052") /** * The version, same as [compilerVersion], which is used for publishing From 346683b769fc1af65c433fc6d30213d1e448099d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 10 Jun 2026 14:36:58 +0000 Subject: [PATCH 06/29] Update dependency reports Self-version labels updated to match the bump; content as regenerated on master by PR #66. https://claude.ai/code/session_01J8FpY1sQd1ehN3upW7HiUr --- docs/dependencies/dependencies.md | 22 +++++++++++----------- docs/dependencies/pom.xml | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index 1daae03f2f..9d677c678a 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -1134,7 +1134,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.052` ## Runtime ## Compile, tests, and tooling @@ -1507,7 +1507,7 @@ This report was generated on **Tue Jun 09 19:09:23 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -2645,7 +2645,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -3954,7 +3954,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -4974,7 +4974,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -6038,7 +6038,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -7205,7 +7205,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -8287,7 +8287,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -9107,7 +9107,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -10245,7 +10245,7 @@ This report was generated on **Tue Jun 09 19:09:24 WEST 2026** using -# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.051` +# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.052` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. diff --git a/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index a14718c5d0..540cd84ba1 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools spine-compiler -2.0.0-SNAPSHOT.051 +2.0.0-SNAPSHOT.052 2015 From 1c790a0155355ae7fb52a861ac62130caaf42827 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:01:57 +0100 Subject: [PATCH 07/29] Remove done tasks --- .../tasks/clean-output-only-when-needed.md | 153 ------------------ .agents/tasks/fix-build-cache-support.md | 82 ---------- .../tasks/fix-tests-build-script-classpath.md | 65 -------- 3 files changed, 300 deletions(-) delete mode 100644 .agents/tasks/clean-output-only-when-needed.md delete mode 100644 .agents/tasks/fix-build-cache-support.md delete mode 100644 .agents/tasks/fix-tests-build-script-classpath.md diff --git a/.agents/tasks/clean-output-only-when-needed.md b/.agents/tasks/clean-output-only-when-needed.md deleted file mode 100644 index da5d4cc78a..0000000000 --- a/.agents/tasks/clean-output-only-when-needed.md +++ /dev/null @@ -1,153 +0,0 @@ ---- -slug: clean-output-only-when-needed -branch: launch-spine-compiler-task -owner: claude -status: in-review -started: 2026-06-11 ---- - -## Goal - -`LaunchSpineCompiler` cleans its output directories only when it actually -executes, with the cleanup logic reduced to "delete *our own* output -directories". Incremental builds work without `./gradlew clean`: a no-change -build keeps the task `UP_TO_DATE`, an input change triggers clean -regeneration, and `generated/` is never left empty or stale. - -Resolves: https://github.com/SpineEventEngine/compiler/issues/21 - -## Context - -The issue was filed in June 2023 against ProtoData, when the launch task had -no declared inputs/outputs and therefore re-ran — and wiped `generated/` — -on every build. With `generateProto` `UP-TO-DATE`, the request file could be -missing, so the pipeline produced nothing into the just-cleaned target dirs, -breaking compilation. Hence the historic "always `clean build`" requirement. - -Much has changed since: - -- `LaunchSpineCompiler` is now `@CacheableTask` with declared inputs - (`sources`, `requestFile`, `settingsDirectory`, both classpaths) and - outputs (`targets`). -- The request file is a declared output of `GenerateProtoTask` - (commit `7a1949945`, 2026-06-09), fixing the build-cache restore path. -- Functional tests cover `UP_TO_DATE` on a second run and `FROM_CACHE` - after `clean` with `--build-cache`. - -What remains of the issue today: - -1. **The "gymnastics" in `CleanTargetDirs`** - (`gradle-plugin/.../LaunchSpineCompiler.kt`): the action zips `sources` - with `targets` positionally and checks `Files.isSameFile` to protect the - deprecated "overwrite protoc output in place" mode — logic dating back to - older Protobuf Gradle Plugin layouts. Per the issue comment, it should - simply clean the task's own output directories. -2. **Descriptor-only gap**: when `protoc` built-ins are off, `sources` is - absent and the action returns early — target dirs are then *never* - cleaned, so stale generated files survive re-runs. -3. **Execution-time `project` usage**: the action is an inner class calling - `project.delete(...)` at execution time — hostile to the configuration - cache; gets fixed naturally by the rewrite. -4. **No regression tests for the no-`clean` flows** that motivated the - issue (proto change → rebuild; deleted `generated/` → rebuild; stale - file removal after a message rename). -5. **Spurious re-runs in consumer repos** (the performance angle): if any - input — e.g., a settings file written by a consumer plugin — is unstable - across builds, the task re-runs (clean + full regeneration) every build - even without changes. Needs verification against a real consumer - (`core-java`-like) scenario. - -## Plan - -- [x] Add regression tests (functional, `PluginSpec`) for the no-`clean` - flows *before* changing the production code: - - [x] modify a proto file (rename a message) → rebuild without `clean` → - launch task re-runs, new code present, stale file gone, - compilation succeeds; - - [x] delete `generated/` only → rebuild → launch task re-runs and - restores the output (`generateProto` stays `UP_TO_DATE`); - - [x] non-proto change only → launch task stays `UP_TO_DATE`, - `generated/` intact. -- [x] Simplify the cleanup in `LaunchSpineCompiler`: - - [x] move the cleanup into the task action (`override fun exec()`: - clean target dirs, then `super.exec()`), dropping - `requestPreLaunchCleanup()` and the `CleanTargetDirs` inner class; - - [x] delete only the task's declared output dirs (`targets`) that - exist; keep a one-line guard skipping any target that canonically - equals a source dir (protects the deprecated overwrite mode from - data loss without the zip gymnastics); - - [x] no early return on absent `sources` — fixes the descriptor-only - gap (item 2 above); - - [x] perform deletion without touching `Task.project` at execution - time (injected `FileSystemOperations`). -- [x] Re-run the full functional test suite; confirm the existing - `UP_TO_DATE` and `FROM_CACHE` tests still pass (15 tests, 0 failures, - 1 pre-existing `@Disabled` skip). -- [x] Verify the consumer-side story (item 5): added a functional test - appending a build-script block which rewrites a settings file with - fixed content on every configuration run; the launch task must stay - `UP_TO_DATE` on the second build. Producer-side stability of the - settings content remains a consumer-repo concern. -- [x] Update KDoc of `LaunchSpineCompiler` to state the cleanup contract - (outputs wiped only on actual execution; up-to-date/cached runs - leave them intact). -- [x] `pre-pr` checklist (version gate, build, reviewers) before opening - the PR. PASS — see Log. - -## Open questions - -1. Is there a scenario **today** (compiler `2.0.0-SNAPSHOT.05x`) where - `clean build` is still required — e.g., in `core-java`? - *Answer (2026-06-11): unknown — verify first. The regression tests come - before any production-code change; whatever they expose gets fixed.* - -## Related observations (out of scope) - -- `createCleanTask` wires `clean.dependsOn(spineCompilerClean)` inside - the lazy `tasks.register {}` block; if nothing realizes the task, the - dependency may never be established. Worth a separate look. -- **Pre-existing, now fixed in this PR**: the root multi-module Dokka - aggregation (`:dokkaGeneratePublicationHtml`) failed with - `missing module-descriptor.json in consolidated Dokka module - test-env/build/dokka-module/html`. `test-env` calls - `disableDocumentationTasks()` (`test-env/build.gradle.kts:82`, unchanged - since 2025-10-29) so its module Dokka tasks are `SKIPPED`, but the root - consolidation still expected a descriptor from it. Fixed in root - `build.gradle.kts` by excluding `test-env` from the `dokka(...)` - aggregation. Carried as a separate commit in this PR. - -## Log - -- 2026-06-11 — analysed issue #21 and current code; drafted; awaiting - answer on the current-repro question and plan approval. -- 2026-06-11 — current-repro question answered: "unknown — verify first"; - plan keeps the tests-first shape. Awaiting approval. -- 2026-06-11 — approved; in progress. Three regression tests added to - `PluginSpec` (reusing the `java-kotlin-test` resource project). - Version gate: branch already carries `Bump version -> 2.0.0-SNAPSHOT.052` - (`65e484590`) vs `origin/master` — no new bump needed before - `publishToMavenLocal`. Baseline run of the new tests against the - unmodified production code started. -- 2026-06-11 — baseline: all three regression tests PASS against the - unmodified code (`BUILD SUCCESSFUL`, 1m39s). The 2023-era "always - `clean build`" chain is closed by the existing input/output - declarations; the remaining substance is the cleanup simplification. -- 2026-06-11 — production change applied: `exec()` override + - `cleanTargetDirs()` with injected `FileSystemOperations`; - `requestPreLaunchCleanup()` and `CleanTargetDirs` removed; class KDoc - documents the cleanup contract. Added the settings-stability test. - `:gradle-plugin:check` PASSED — all 15 functional tests green - (4 new + settings-stability), incl. the existing `UP_TO_DATE`/`FROM_CACHE`. -- 2026-06-11 — pre-pr: three reviewers ran. `spine-code-review` - APPROVE WITH CHANGES (Should-fix: 5× `createProject("java-kotlin-test")` - → extracted `createJavaKotlinProject()` helper). `kotlin-engineer` - APPROVE (applied nits: `!it.list().isNullOrEmpty()`; - `deleteRecursively() shouldBe true`). `review-docs` APPROVE (applied - nits: property KDoc noun phrase; "ensures that"; settings-test wording). - Re-ran `:gradle-plugin:check` + `:gradle-plugin:dokkaGenerate` after the - fixes — PASS. Full CI-parity `./gradlew build` — PASS (no FAILED tasks). - Per-module `:gradle-plugin:dokkaGenerate` validates the changed KDoc — - PASS. The repo-wide `dokkaGenerate` *aggregation* fails on a pre-existing, - unrelated `test-env` issue (see Related observations); flagged separately, - not blocking. Wrote `.git/pre-pr.ok` (status=PASS). Changes left - uncommitted per commit-authorization policy. diff --git a/.agents/tasks/fix-build-cache-support.md b/.agents/tasks/fix-build-cache-support.md deleted file mode 100644 index 6bea03ef31..0000000000 --- a/.agents/tasks/fix-build-cache-support.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -slug: fix-build-cache-support -branch: claude/sleepy-mendel-gn89dd -owner: claude -status: in-review -started: 2026-06-09 ---- - -## Goal - -Builds of projects using the Compiler Gradle plugin succeed with -`org.gradle.caching=true`: after `./gradlew clean build`, the code generated -by `LaunchSpineCompiler` is present even when `generateProto` and/or -`LaunchSpineCompiler` are restored from the Gradle build cache. - -## Context - -With the build cache on, `clean build` fails because no code is generated. - -Root cause: the Compiler `protoc` plugin writes the `CodeGeneratorRequest` -file (`build/spine/compiler/requests/.bin` plus a `.pb.json` twin) -as a *side effect* of `GenerateProtoTask`, but the file is not declared as an -output of that task. `GenerateProtoTask` is `@CacheableTask`; after `clean` -its declared outputs are restored from the cache *without executing protoc*, -so the request file is never recreated. `LaunchSpineCompiler` is configured -with `onlyIf { hasRequestFile(...) }`, so it is SKIPPED (its own cache entry -is not even consulted), and compilation then fails for the missing generated -code. With `org.gradle.caching=false`, `generateProto` always re-executes -after `clean`, recreating the request file — hence "everything works". - -A related gap: `LaunchSpineCompiler` *reads* the request file and the -settings directory but declares neither as inputs, so its up-to-date checks -and cache key do not reflect them. - -## Plan - -- [x] Diagnose the root cause (confirmed against `GenerateProtoTask` 0.10.0 - sources: `@CacheableTask`, outputs = `outputBaseDir` + descriptor set - only; plugin options are inputs). -- [x] `Plugin.kt`: declare the request file and its `.pb.json` twin as - outputs of `GenerateProtoTask` so the build cache stores/restores them. -- [x] `LaunchSpineCompiler.kt`: declare the request file and the settings - directory as inputs. -- [x] Add a functional test: `build` → `clean` → `build` with - `--build-cache` and a project-local cache directory; assert - `generateProto` is `FROM_CACHE`, the launch task is restored (not - SKIPPED), and `generated/main/{java,kotlin}` exist. -- [ ] Verify via CI (local verification impossible: the sandbox blocks - Spine artifact repositories; see Log). - -## Log - -- 2026-06-09 — Investigated; confirmed root cause from protobuf-gradle-plugin - 0.10.0, tool-base (`rootWorkingDir` = `build/spine`), and base - (`CodeGeneratorRequestWriter` writes `.bin` and `.pb.json`). -- 2026-06-09 — The remote sandbox cannot resolve `io.spine.*` artifacts - (403 from all Spine repos), so `./gradlew build` cannot run here. - Verification delegated to CI on the PR. -- 2026-06-09 — Implemented; version bumped to `2.0.0-SNAPSHOT.051`. - Dependency reports (`dependencies.md`, `pom.xml`) not regenerated for - the same reason; regenerate with the first local/CI build. -- 2026-06-09 — CI: the functional test failed because `build-cache-test` - (copied from `launch-test`) lacked the Protobuf `implementation` - dependencies needed to compile generated code; now mirrors - `java-kotlin-test`. The `:integrationTest` failure - (`tests/build.gradle.kts:49`, unresolved `Protobuf`/`Kotlin` in - `buildscript`) is pre-existing: the base tip `ab708f79` fails - identically on `update-dependencies`. -- 2026-06-09 — Per review: `--build-cache` enabled for the - `integrationTest` child build (consumes the locally-published fixed - plugin). The global `org.gradle.caching` stays off until the - `io.spine.core-jvm` plugin used by this repo's own build consumes - a Compiler with this fix. -- 2026-06-10 — The functional test still fails on CI with the *same* - 17 `compileKotlin` errors as before the Protobuf deps were added, - while `java-kotlin-test` (byte-identical build script) passes in the - same run. The settings file (with the cache block) *was* in effect. - Suspecting stale/shadowed test resources keyed by the directory name; - renamed `build-cache-test` → `cached-build-test` and added a canary - assertion that the copied build script declares `Protobuf.libs`. - If the canary passes and compilation still fails, the problem is in - the `--build-cache` + `compileKotlin` interplay, not in resources. diff --git a/.agents/tasks/fix-tests-build-script-classpath.md b/.agents/tasks/fix-tests-build-script-classpath.md deleted file mode 100644 index 563d8ce455..0000000000 --- a/.agents/tasks/fix-tests-build-script-classpath.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -slug: fix-tests-build-script-classpath -branch: claude/adoring-tesla-1cff28 -owner: claude -status: in-progress -started: 2026-06-09 ---- - -## Goal - -PR #66 CI is green again on both Ubuntu and Windows: the nested `tests` -build compiles its `build.gradle.kts` instead of failing with -`Unresolved reference 'Protobuf'` / `'Kotlin'` (Ubuntu + Windows) or -`Unresolved reference 'io'` (Windows before commit `e8fa227`). - -## Context - -- The Kotlin DSL extracts the `buildscript {}` block and compiles it as a - separate "stage 1" program **without the file-level `import` statements**. - Reproduced in isolation with Gradle 9.5.1: short names fail, fully - qualified names compile. All other `buildscript` blocks in the repo - already use fully qualified names for this reason. -- Commit `e8fa227` (copilot-swe-agent) replaced the fully qualified names in - `tests/build.gradle.kts` with imported short names, breaking script - compilation on **all** platforms. -- The original Windows-only failure (`Unresolved reference 'io'`, run - 27230621848) has a different cause: the updated Windows workflow sets - `git config --global core.symlinks false`, so the `tests/buildSrc -> - ../buildSrc` symlink is checked out as a plain text file. The nested - build launched by `integrationTest` then has no `buildSrc` at all, and - no `io.spine.dependency.*` classes on the script classpath. - (`tests/gradle.properties` degrades the same way.) - -## Plan - -- [x] Diagnose Ubuntu failure (stage-1 imports) and Windows failure - (symlink checked out as text file). -- [x] Revert `e8fa227`: restore fully qualified names in the - `buildscript {}` block of `tests/build.gradle.kts`; document why - the qualifiers must stay. -- [x] In root `build.gradle.kts`, make `integrationTest` materialize - `tests/buildSrc` and `tests/gradle.properties` as real copies when - the symlinks were checked out as placeholder text files. -- [x] Re-enable Git symlinks on Windows CI (`core.symlinks true`): - the symlinked `tests/buildSrc` layout was green on Windows for - ~3 years (symlink since 2023-02; `.agents` links since 2025-09; - last green Windows run 2026-03-12) until this branch's `config` - update introduced `core.symlinks false`. The materialization in - root `build.gradle.kts` stays as a no-op fallback for - symlink-less checkouts (and for future `config` syncs that may - reintroduce the setting; the upstream fix belongs in `config`). -- [x] Sanity-check what is verifiable locally; commit, push, draft PR - into `update-dependencies`. -- [ ] Confirm both CI jobs are green on PR #66 after the fix lands. - -## Log - -- 2026-06-09 — diagnosed both failures; synthetic repro of the stage-1 - import limitation under Gradle 9.5.1 (`/tmp/k1`): short name fails, - FQN passes. -- 2026-06-09 — `materializeTestsLink` verified in the synthetic project: - placeholder files are replaced by real copies (`build/`, `.gradle/` - excluded); healthy symlinks and already-materialized dirs are left - untouched. Full local build not possible: the sandbox network policy - blocks Spine repositories (403). From 5794ecada282334864878a5642e8879c6f06178f Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:09:02 +0100 Subject: [PATCH 08/29] Put Gradle Plugin Portal first in the loopup order --- settings.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 2d02b19e9e..8379373eb9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -28,9 +28,9 @@ rootProject.name = "spine-compiler" pluginManagement { repositories { + gradlePluginPortal() mavenLocal() mavenCentral() - gradlePluginPortal() maven("https://europe-maven.pkg.dev/spine-event-engine/releases") maven("https://europe-maven.pkg.dev/spine-event-engine/snapshots") } @@ -38,9 +38,9 @@ pluginManagement { dependencyResolutionManagement { repositories { + gradlePluginPortal() mavenLocal() mavenCentral() - gradlePluginPortal() } } From 0983949ed2340df677bc53afbd1736d5d252f059 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:09:57 +0100 Subject: [PATCH 09/29] Add diagnostics for missing Protobuf Gradle Plugin extension --- .../spine/tools/compiler/gradle/plugin/Paths.kt | 5 ++--- .../spine/tools/compiler/gradle/plugin/Plugin.kt | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Paths.kt b/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Paths.kt index 9123ff0e83..431e3a7d92 100644 --- a/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Paths.kt +++ b/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Paths.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -26,7 +26,6 @@ package io.spine.tools.compiler.gradle.plugin -import io.spine.tools.protobuf.gradle.protobufExtension import java.io.File import java.nio.file.Path import org.gradle.api.Project @@ -36,7 +35,7 @@ import org.gradle.api.Project */ internal val Project.protocOutputDir: File get() { - val path = protobufExtension!!.generatedFilesBaseDir + val path = protobufExtensionOrFail().generatedFilesBaseDir return File(path) } diff --git a/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Plugin.kt b/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Plugin.kt index c5c3fe09ac..eb264cf388 100644 --- a/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Plugin.kt +++ b/gradle-plugin/src/main/kotlin/io/spine/tools/compiler/gradle/plugin/Plugin.kt @@ -32,6 +32,7 @@ package io.spine.tools.compiler.gradle.plugin import com.google.common.collect.ImmutableList import com.google.errorprone.annotations.CanIgnoreReturnValue import com.google.protobuf.gradle.GenerateProtoTask +import com.google.protobuf.gradle.ProtobufExtension import io.spine.annotation.VisibleForTesting import io.spine.format.Format import io.spine.io.replaceExtension @@ -271,11 +272,24 @@ private fun Project.setProtocArtifact() { checkNotNull(protocArtifact) { "Unable to load `protoc` dependency of `${Plugin::class.qualifiedName}`." } - protobufExtension!!.protoc { locator -> + protobufExtensionOrFail().protoc { locator -> locator.artifact = protocArtifact.coordinates } } +/** + * Obtains the extension of the Protobuf Gradle Plugin applied to this project. + * + * @throws IllegalStateException if the Protobuf Gradle Plugin (`com.google.protobuf`) + * is not applied to the project. The Spine Compiler plugin requires it. + */ +internal fun Project.protobufExtensionOrFail(): ProtobufExtension = + checkNotNull(protobufExtension) { + "The Spine Compiler plugin requires the Protobuf Gradle Plugin" + + " (`$PROTOBUF_GRADLE_PLUGIN_ID`) to be applied to the project `$path`." + + " Please add `id(\"$PROTOBUF_GRADLE_PLUGIN_ID\")` to the `plugins` block." + } + context(_: GeneratedDirectoryContext) private fun Project.configureWithProtobufPlugin(compilerVersion: String) { val protocPlugin = ProtocPluginArtifact(compilerVersion) From 311eb5ecfb6031e979d818b97c70dcb4ce7b2e61 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:20:14 +0100 Subject: [PATCH 10/29] Update `config` --- .github/workflows/build-on-ubuntu.yml | 8 +- .../io/spine/gradle/github/pages/SshKey.kt | 4 +- .../gradle/report/pom/DependencyWriter.kt | 35 +- .../gradle/report/pom/ScopedDependency.kt | 36 ++- .../gradle/report/pom/VersionComparator.kt | 115 +++++++ .../gradle/report/pom/DependencyWriterSpec.kt | 298 ++++++++++++++++++ .../report/pom/VersionComparatorSpec.kt | 87 +++++ config | 2 +- 8 files changed, 558 insertions(+), 27 deletions(-) create mode 100644 buildSrc/src/main/kotlin/io/spine/gradle/report/pom/VersionComparator.kt create mode 100644 buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt create mode 100644 buildSrc/src/test/kotlin/io/spine/gradle/report/pom/VersionComparatorSpec.kt diff --git a/.github/workflows/build-on-ubuntu.yml b/.github/workflows/build-on-ubuntu.yml index 27d9302b9d..516f347e14 100644 --- a/.github/workflows/build-on-ubuntu.yml +++ b/.github/workflows/build-on-ubuntu.yml @@ -19,9 +19,13 @@ jobs: - uses: gradle/actions/setup-gradle@v6 - - name: Build project and run tests + # `build` does not run Dokka — its tasks are gated to the publishing + # graph — so `dokkaGenerate` is appended to surface documentation + # warnings on each push, before merge, instead of only in the post-merge + # `Publish` job. `failOnWarning` is enabled in the Dokka setup. + - name: Build project, run tests, and check documentation shell: bash - run: ./gradlew build --stacktrace + run: ./gradlew build dokkaGenerate --stacktrace # See: https://github.com/marketplace/actions/junit-report-action - name: Publish Test Report diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt b/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt index 68be42a074..653a9f950a 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/github/pages/SshKey.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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 @@ internal class SshKey( val gitHubAccessKey = gitHubKey() log { "Obtained the key file at ${gitHubAccessKey.absolutePath}." } val sshConfigFile = sshConfigFile() - log { "Located the SSH key file at ${sshConfigFile.absolutePath}." } + log { "Located the SSH config file at ${sshConfigFile.absolutePath}." } sshConfigFile.appendPublisher(gitHubAccessKey) log { "SSH config file appended." } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt index 79d00c6299..a521e88a30 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/DependencyWriter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -54,7 +54,9 @@ import org.gradle.kotlin.dsl.withGroovyBuilder * ``` * * When there are several versions of the same dependency, only the one with - * the newest version is retained. + * the newest version is retained. If the retained version is used in several + * configurations, the highest-ranking Maven scope is reported, e.g. `compile` + * wins over `test`. * * @see PomGenerator */ @@ -65,7 +67,7 @@ private constructor( internal companion object { /** - * Creates the `ProjectDependenciesAsXml` for the passed [project]. + * Creates the `DependencyWriter` for the passed [project]. */ fun of(project: Project): DependencyWriter { return DependencyWriter(project.dependencies()) @@ -75,7 +77,7 @@ private constructor( /** * Writes the dependencies in their `pom.xml` format to the passed [out] writer. * - *

Used writer will not be closed. + * The used writer will not be closed. */ fun writeXmlTo(out: Writer) { val xml = MarkupBuilder(out) @@ -170,17 +172,30 @@ private fun Dependency.isExternal(): Boolean { * But for our `pom.xml`, which has clearly representative character, a single version * of a dependency is quite enough. * + * Versions are compared by [VersionComparator] rather than as plain text, so `10.0.0` + * is recognized as newer than `9.2.0`, and `2.0.0-SNAPSHOT.100` — as newer + * than `2.0.0-SNAPSHOT.99`. + * + * When the newest version comes from several configurations, the occurrence with + * the highest-ranking Maven scope (as defined by [ScopedDependency.dependencyPriority]) + * is retained. For example, a dependency declared via `api` in one module and via + * `testImplementation` in another is reported with the `compile` scope, so a production + * dependency is not misrepresented as a test-scoped one. Likewise, an artifact coming + * from `compileOnly` or `annotationProcessor` in one module and from a test + * configuration in another is reported as `provided`. + * * The rejected duplicates are logged. */ private fun Project.deduplicate(dependencies: Set): List { - val groups = dependencies.distinctBy { it.gav } - .groupBy { it.run { "$group:$name" } } + val groups = dependencies.groupBy { it.run { "$group:$name" } } - logDuplicates(groups) + logDuplicates(groups.mapValues { (_, deps) -> deps.distinctBy { it.gav } }) - val filtered = groups.map { group -> - group.value.maxByOrNull { dep -> dep.version ?: "" } - }.filterNotNull() + val filtered = groups.values.map { sameArtifact -> + val newest = sameArtifact.maxWith(compareBy(VersionComparator) { it.version ?: "" }) + sameArtifact.filter { it.version == newest.version } + .minBy { it.scoped.dependencyPriority() } + } return filtered } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt index 7c67a32ca4..c969ce5008 100644 --- a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/ScopedDependency.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -29,6 +29,7 @@ package io.spine.gradle.report.pom import io.spine.gradle.report.pom.DependencyScope.compile import io.spine.gradle.report.pom.DependencyScope.provided import io.spine.gradle.report.pom.DependencyScope.runtime +import io.spine.gradle.report.pom.DependencyScope.system import io.spine.gradle.report.pom.DependencyScope.test import io.spine.gradle.report.pom.DependencyScope.undefined import org.gradle.api.artifacts.Configuration @@ -106,17 +107,18 @@ private constructor( configurationName.startsWith("test", ignoreCase = true) /** - * Performs comparison of {@code DependencyWithScope} instances according to these rules: + * Performs comparison of `ScopedDependency` instances according to these rules: * - * * Compares the scope of the dependency first. Dependency with lower scope priority - * number goes first. + * * Compares the scope of the dependency first. Dependency with a lower scope priority + * number goes first. * - * * For dependencies with same scope, does the lexicographical group name comparison. + * * For dependencies with the **same scope** does the lexicographical group + * name comparison. * - * * For dependencies within the same group, does the lexicographical artifact + * * For dependencies within the **same group**, does the lexicographical artifact * name comparison. * - * * For dependencies with the same artifact name, does the lexicographical artifact + * * For dependencies with the **same artifact name**, does the lexicographical artifact * version comparison. */ private val COMPARATOR: Comparator = @@ -138,7 +140,7 @@ private constructor( return dependency } - /** Obtains the scope name of this dependency .*/ + /** Obtains the scope name of this dependency. */ fun scopeName(): String { return scope.name } @@ -147,14 +149,24 @@ private constructor( * Obtains the layout priority of a scope. * * Layout priority determines what scopes come first in the generated `pom.xml` file. - * Dependencies with a lower priority number go on top. + * Dependencies with a lower priority number go on top, following the conventional + * Maven scope order: `compile`, `provided`, `runtime`, `test`, and `system`. + * Dependencies with an undefined scope go last. + * + * The same ordering also drives the scope selection when the same dependency + * comes from several configurations: the occurrence with the lowest priority + * number is reported. So, a scope required by production code wins over `test`, + * and a known scope wins over an undefined one. */ + @Suppress("MagicNumber") // Reason: the values encode the relative scope order. internal fun dependencyPriority(): Int { return when (scope) { compile -> 0 - runtime -> 1 - test -> 2 - else -> 3 + provided -> 1 + runtime -> 2 + test -> 3 + system -> 4 + undefined -> 5 } } diff --git a/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/VersionComparator.kt b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/VersionComparator.kt new file mode 100644 index 0000000000..c6984bb65c --- /dev/null +++ b/buildSrc/src/main/kotlin/io/spine/gradle/report/pom/VersionComparator.kt @@ -0,0 +1,115 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.gradle.report.pom + +/** + * Compares dependency version strings by their meaning rather than lexicographically. + * + * Numeric segments are ordered as numbers, so `10.0.0` is newer than `9.2.0`, and + * `2.0.0-SNAPSHOT.100` is newer than `2.0.0-SNAPSHOT.99`. A plain `String` comparison + * would order both pairs the other way around. + * + * The rules follow Semantic Versioning where it applies: + * + * 1. A version consists of a release part and an optional qualifier, separated by + * the first `-`: for `2.0.0-SNAPSHOT.100` these are `2.0.0` and `SNAPSHOT.100`. + * 2. Both parts are compared segment by segment, as split by `.`, and also by `-` + * within a qualifier. Two numeric segments are compared as numbers, two textual + * ones as case-insensitive text, and a numeric segment is older than a textual one. + * 3. When one version runs out of segments, it is the older one: `1.0.1` is newer + * than `1.0`, and `1.0.0-RC.1` is newer than `1.0.0-RC`. + * 4. When the release parts are equal, a version without a qualifier is newer than + * a version with one: `2.0.0` is newer than `2.0.0-SNAPSHOT.100`. + * + * Unlike full Maven semantics, qualifiers carry no special meaning: `RC`, `SNAPSHOT`, + * and the like are ordered as plain text. This keeps the comparison simple and + * predictable for the report, where only the relative recency of the versions + * of the same artifact matters. + */ +internal object VersionComparator : Comparator { + + override fun compare(left: String, right: String): Int { + val (leftRelease, leftQualifier) = left.parse() + val (rightRelease, rightQualifier) = right.parse() + val byRelease = compareSegments(leftRelease, rightRelease) + if (byRelease != 0) { + return byRelease + } + return when { + leftQualifier == null && rightQualifier == null -> 0 + leftQualifier == null -> 1 + rightQualifier == null -> -1 + else -> compareSegments(leftQualifier, rightQualifier) + } + } + + /** + * Splits this version into the segments of its release part and the segments + * of its qualifier, the latter being `null` when the version has no qualifier. + */ + private fun String.parse(): Pair, List?> { + val release = substringBefore('-') + val qualifier = if ('-' in this) substringAfter('-') else null + return release.split('.') to qualifier?.split('.', '-') + } + + private fun compareSegments(left: List, right: List): Int { + for (index in 0 until maxOf(left.size, right.size)) { + val bySegment = compareSegment( + left.getOrElse(index) { "" }, + right.getOrElse(index) { "" } + ) + if (bySegment != 0) { + return bySegment + } + } + return 0 + } + + /** + * Compares single segments, ordering an absent (empty) segment below any present + * one, a numeric segment below a textual one, numbers by their value, and text + * case-insensitively. + * + * Keeping the empty, numeric, and textual segments in distinct buckets makes + * the order transitive: comparing a numeric pair as numbers, but a mixed pair + * as text, would order `2` < `10` < `1a` < `2`. + */ + private fun compareSegment(left: String, right: String): Int { + if (left.isEmpty() || right.isEmpty()) { + return left.length.compareTo(right.length) + } + val leftNumber = left.toLongOrNull() + val rightNumber = right.toLongOrNull() + return when { + leftNumber != null && rightNumber != null -> leftNumber.compareTo(rightNumber) + leftNumber != null -> -1 + rightNumber != null -> 1 + else -> left.compareTo(right, ignoreCase = true) + } + } +} diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt new file mode 100644 index 0000000000..f8803e0291 --- /dev/null +++ b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/DependencyWriterSpec.kt @@ -0,0 +1,298 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.gradle.report.pom + +import io.kotest.matchers.ints.shouldBeGreaterThan +import io.kotest.matchers.ints.shouldBeLessThan +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldNotContain +import java.io.StringWriter +import org.gradle.api.Project +import org.gradle.testfixtures.ProjectBuilder +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +@DisplayName("`DependencyWriter` should") +internal class DependencyWriterSpec { + + private val rootProject: Project = ProjectBuilder.builder().withName("root").build() + + /** + * Creates a subproject of the [rootProject] with the given name. + * + * The names of the subprojects in the tests below are chosen so that + * a module using a dependency in a lower-ranked scope — as defined by + * [ScopedDependency.dependencyPriority] — sorts first, and is thus + * encountered first when the dependencies are collected. This way, + * the tests prove that the merged scope does not depend on the order + * in which project modules are traversed. + */ + private fun subproject(name: String): Project = + ProjectBuilder.builder().withParent(rootProject).withName(name).build() + + /** + * Declares a dependency with the given [notation] in the named [configuration], + * creating it if it does not exist. + */ + private fun Project.declare(configuration: String, notation: String) { + configurations.maybeCreate(configuration) + dependencies.add(configuration, notation) + } + + @Nested inner class + `merge an artifact duplicated across modules` { + + @Test + fun `preferring the 'compile' scope over the 'test' one`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE) + subproject("b-lib").declare("api", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.compile.name + } + + @Test + fun `preferring the 'runtime' scope over the 'test' one`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE) + subproject("b-lib").declare("runtimeOnly", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.runtime.name + } + + @Test + fun `preferring the 'compile' scope over the 'runtime' one`() { + subproject("a-run").declare("runtimeOnly", SPINE_BASE) + subproject("b-lib").declare("implementation", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.compile.name + } + + @Test + fun `preferring the 'provided' scope over the 'test' one`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE) + subproject("b-lib").declare("compileOnly", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.provided.name + } + + @Test + fun `reporting 'annotationProcessor' and 'testAnnotationProcessor' usages as 'provided'`() { + subproject("a-tests").declare("testAnnotationProcessor", SPINE_BASE) + subproject("b-codegen").declare("annotationProcessor", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.provided.name + } + + @Test + fun `preferring the 'compile' scope over the 'provided' one`() { + subproject("a-tools").declare("compileOnly", SPINE_BASE) + subproject("b-lib").declare("implementation", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.compile.name + } + + @Test + fun `preferring the 'provided' scope over the 'runtime' one`() { + subproject("a-run").declare("runtimeOnly", SPINE_BASE) + subproject("b-tools").declare("compileOnly", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.provided.name + } + + @Test + fun `retaining the newest version with the widest of its scopes`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE_NEWER) + subproject("b-lib").declare("api", SPINE_BASE_NEWER) + subproject("c-old").declare("api", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "2.0.1" + dependency.scopeName() shouldBe DependencyScope.compile.name + } + + @Test + fun `comparing versions semantically rather than as text`() { + subproject("a-lib").declare("api", "io.spine:spine-base:9.2.0") + subproject("b-lib").declare("api", "io.spine:spine-base:10.0.0") + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "10.0.0" + } + + @Test + fun `ordering pre-release increments numerically`() { + subproject("a-old").declare("api", "io.spine:spine-base:2.0.0-SNAPSHOT.99") + subproject("b-new").declare("api", "io.spine:spine-base:2.0.0-SNAPSHOT.100") + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "2.0.0-SNAPSHOT.100" + } + + @Test + fun `preferring a release over its pre-release`() { + subproject("a-snapshot").declare("api", "io.spine:spine-base:2.0.0-SNAPSHOT.100") + subproject("b-release").declare("api", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "2.0.0" + } + + /** + * The `api` usage of the older `9.2.0` must affect neither the version + * nor the scope: both come from the usages of the newest `10.0.0`, + * which would lose to `9.2.0` in a plain text comparison. + */ + @Test + fun `taking the widest scope from the usages of the numerically newest version`() { + subproject("a-lib").declare("api", "io.spine:spine-base:9.2.0") + subproject("b-tests").declare("testImplementation", "io.spine:spine-base:10.0.0") + subproject("c-run").declare("runtimeOnly", "io.spine:spine-base:10.0.0") + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "10.0.0" + dependency.scopeName() shouldBe DependencyScope.runtime.name + } + + /** + * When the newest version of an artifact occurs only in test configurations, + * the `test` scope is reported even if an older version is a production + * dependency: the report describes the retained version as it is used. + */ + @Test + fun `taking the scope only from the usages of the newest version`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE_NEWER) + subproject("b-lib").declare("api", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.dependency().version shouldBe "2.0.1" + dependency.scopeName() shouldBe DependencyScope.test.name + } + + @Test + fun `keeping the 'test' scope for an artifact used only in tests`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE) + subproject("b-tests").declare("testRuntimeOnly", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.scopeName() shouldBe DependencyScope.test.name + } + + @Test + fun `preferring a known scope over that of an unknown configuration`() { + subproject("a-tools").declare("protoData", SPINE_BASE) + subproject("b-tests").declare("testImplementation", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.hasDefinedScope() shouldBe true + dependency.scopeName() shouldBe DependencyScope.test.name + } + + @Test + fun `preferring the 'provided' scope over that of an unknown configuration`() { + subproject("a-tools").declare("protoData", SPINE_BASE) + subproject("b-lib").declare("compileOnly", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.hasDefinedScope() shouldBe true + dependency.scopeName() shouldBe DependencyScope.provided.name + } + } + + @Test + fun `omit the scope of a dependency coming only from an unknown configuration`() { + subproject("lib").declare("protoData", SPINE_BASE) + + val dependency = rootProject.dependencies().single() + + dependency.hasDefinedScope() shouldBe false + } + + @Test + fun `write a production dependency as 'compile' even when it is also used in tests`() { + subproject("a-tests").declare("testImplementation", SPINE_BASE) + subproject("b-lib").declare("api", SPINE_BASE) + + val out = StringWriter() + DependencyWriter.of(rootProject).writeXmlTo(out) + val xml = out.toString() + + xml shouldContain "spine-base" + xml shouldContain "compile" + xml shouldNotContain "test" + } + + @Test + fun `lay out dependencies in the conventional Maven scope order`() { + subproject("a-tests").declare("testImplementation", "io.spine:spine-testlib:2.0.0") + subproject("b-run").declare("runtimeOnly", "io.spine:spine-logging:2.0.0") + subproject("c-tools").declare("annotationProcessor", "io.spine:spine-validate:2.0.0") + subproject("d-lib").declare("api", SPINE_BASE) + + val out = StringWriter() + DependencyWriter.of(rootProject).writeXmlTo(out) + val xml = out.toString() + + val compileAt = xml.indexOf("compile") + val providedAt = xml.indexOf("provided") + val runtimeAt = xml.indexOf("runtime") + val testAt = xml.indexOf("test") + + compileAt shouldBeGreaterThan -1 + compileAt shouldBeLessThan providedAt + providedAt shouldBeLessThan runtimeAt + runtimeAt shouldBeLessThan testAt + } + + private companion object { + const val SPINE_BASE = "io.spine:spine-base:2.0.0" + const val SPINE_BASE_NEWER = "io.spine:spine-base:2.0.1" + } +} diff --git a/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/VersionComparatorSpec.kt b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/VersionComparatorSpec.kt new file mode 100644 index 0000000000..54b6439505 --- /dev/null +++ b/buildSrc/src/test/kotlin/io/spine/gradle/report/pom/VersionComparatorSpec.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.gradle.report.pom + +import io.kotest.matchers.ints.shouldBeGreaterThan +import io.kotest.matchers.ints.shouldBeLessThan +import io.kotest.matchers.shouldBe +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +@DisplayName("`VersionComparator` should") +internal class VersionComparatorSpec { + + /** + * Asserts that [newer] compares above [older], checking both directions. + */ + private fun assertNewer(newer: String, older: String) { + VersionComparator.compare(newer, older) shouldBeGreaterThan 0 + VersionComparator.compare(older, newer) shouldBeLessThan 0 + } + + @Test + fun `compare numeric segments as numbers`() { + assertNewer("10.0.0", "9.2.0") + assertNewer("2.10.0", "2.9.1") + assertNewer("1.0.10", "1.0.9") + } + + @Test + fun `compare numeric qualifier segments as numbers`() { + assertNewer("2.0.0-SNAPSHOT.100", "2.0.0-SNAPSHOT.99") + assertNewer("2.0.0-SNAPSHOT.100", "2.0.0-SNAPSHOT.070") + } + + @Test + fun `treat a release as newer than its pre-release`() { + assertNewer("2.0.0", "2.0.0-SNAPSHOT.100") + assertNewer("1.0.0", "1.0.0-RC.2") + } + + @Test + fun `treat a longer version as newer when the common segments are equal`() { + assertNewer("1.0.1", "1.0") + assertNewer("1.0.0-RC.1", "1.0.0-RC") + } + + @Test + fun `ignore the case of textual segments`() { + assertNewer("1.0.0-snapshot.10", "1.0.0-SNAPSHOT.2") + VersionComparator.compare("1.0.0-RC", "1.0.0-rc") shouldBe 0 + } + + @Test + fun `order a numeric segment before a textual one`() { + assertNewer("1.0.0-alpha", "1.0.0-1") + } + + @Test + fun `treat equal versions as equal`() { + VersionComparator.compare("2.0.0-SNAPSHOT.070", "2.0.0-SNAPSHOT.070") shouldBe 0 + VersionComparator.compare("31.1-jre", "31.1-jre") shouldBe 0 + } +} diff --git a/config b/config index 5a13d5b29d..da2182487e 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 5a13d5b29d04ed414e2bc1ef3a3409a51f10846a +Subproject commit da2182487ef8143bef2ca7a3fa76ddbb0ceaa1ff From 447a7e1ce74d314834c3bac86326ae806e9996de Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:27:33 +0100 Subject: [PATCH 11/29] Remove outdated ProtoData dependency --- .../io/spine/dependency/local/ProtoData.kt | 178 ------------------ 1 file changed, 178 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoData.kt diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoData.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoData.kt deleted file mode 100644 index c4f06c8fd2..0000000000 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoData.kt +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2025, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.dependency.local - -/** - * Dependencies on ProtoData modules. - * - * To use a locally published ProtoData version instead of the version from a public plugin - * registry, set the `PROTODATA_VERSION` and/or the `PROTODATA_DF_VERSION` environment variables - * and stop the Gradle daemons so that Gradle observes the env change: - * ``` - * export PROTODATA_VERSION=0.43.0-local - * export PROTODATA_DF_VERSION=0.41.0 - * - * ./gradle --stop - * ./gradle build # Conduct the intended checks. - * ``` - * - * Then, to reset the console to run the usual versions again, remove the values of - * the environment variables and stop the daemon: - * ``` - * export PROTODATA_VERSION="" - * export PROTODATA_DF_VERSION="" - * - * ./gradle --stop - * ``` - * - * See [`SpineEventEngine/ProtoData`](https://github.com/SpineEventEngine/ProtoData/). - */ -@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 ProtoData { - const val pluginGroup = Spine.group - const val group = "io.spine.protodata" - const val pluginId = "io.spine.protodata" - - /** - * Identifies ProtoData as a `classpath` dependency under `buildScript` block. - * - * The dependency is obtained from https://plugins.gradle.org/m2/. - */ - const val module = "io.spine:protodata" - - /** - * The version of ProtoData dependencies. - */ - val version: String - private const val fallbackVersion = "0.96.4" - - /** - * The distinct version of ProtoData used by other build tools. - * - * When ProtoData is used both for building the project and as a part of the Project's - * transitional dependencies, this is the version used to build the project itself. - */ - val dogfoodingVersion: String - private const val fallbackDfVersion = "0.96.4" - - /** - * The artifact for the ProtoData Gradle plugin. - */ - val pluginLib: String - - /** - * The artifact to be used during experiments when publishing locally. - * - * @see ProtoData - */ - private fun pluginLib(version: String): String = - "$group:gradle-plugin:$version" - - fun api(version: String): String = - "$group:protodata-api:$version" - - val api - get() = api(version) - - val backend - get() = "$group:protodata-backend:$version" - - val params - get() = "$group:protodata-params:$version" - - val protocPlugin - get() = "$group:protodata-protoc:$version" - - val gradleApi - get() = "$group:protodata-gradle-api:$version" - - val cliApi - get() = "$group:protodata-cli-api:$version" - - val javaModule = "$group:protodata-java" - - fun java(version: String): String = - "$javaModule:$version" - - val java - get() = java(version) - - val fatCli - get() = "$group:protodata-fat-cli:$version" - - val testlib - get() = "$group:protodata-testlib:$version" - - /** - * An env variable storing a custom [version]. - */ - private const val VERSION_ENV = "PROTODATA_VERSION" - - /** - * An env variable storing a custom [dogfoodingVersion]. - */ - private const val DF_VERSION_ENV = "PROTODATA_DF_VERSION" - - /** - * Sets up the versions and artifacts for the build to use. - * - * If either [VERSION_ENV] or [DF_VERSION_ENV] is set, those versions are used instead of - * the hardcoded ones. Also, in this mode, the [pluginLib] coordinates are changed so that - * it points at a locally published artifact. Otherwise, it points at an artifact that would be - * published to a public plugin registry. - */ - init { - val experimentVersion = System.getenv(VERSION_ENV) - val experimentDfVersion = System.getenv(DF_VERSION_ENV) - if (experimentVersion?.isNotBlank() == true || experimentDfVersion?.isNotBlank() == true) { - version = experimentVersion ?: fallbackVersion - dogfoodingVersion = experimentDfVersion ?: fallbackDfVersion - - pluginLib = pluginLib(version) - println(""" - - ❗ Running an experiment with ProtoData. ❗ - ----------------------------------------- - Regular version = v$version - Dogfooding version = v$dogfoodingVersion - - ProtoData Gradle plugin can now be loaded from Maven Local. - - To reset the versions, erase the `$$VERSION_ENV` and `$$DF_VERSION_ENV` environment variables. - - """.trimIndent()) - } else { - version = fallbackVersion - dogfoodingVersion = fallbackDfVersion - pluginLib = "$pluginGroup:protodata:$version" - } - } -} From 2c94bf1d13139e8fa02d6db1b98e90fb56d3156a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:27:48 +0100 Subject: [PATCH 12/29] Optimise imports --- .../io/spine/tools/compiler/backend/event/CompilerEvents.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backend/src/main/kotlin/io/spine/tools/compiler/backend/event/CompilerEvents.kt b/backend/src/main/kotlin/io/spine/tools/compiler/backend/event/CompilerEvents.kt index a38f8ebb22..e235cfd077 100644 --- a/backend/src/main/kotlin/io/spine/tools/compiler/backend/event/CompilerEvents.kt +++ b/backend/src/main/kotlin/io/spine/tools/compiler/backend/event/CompilerEvents.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -39,10 +39,9 @@ import io.spine.tools.compiler.ast.event.dependencyDiscovered import io.spine.tools.compiler.ast.event.fileEntered import io.spine.tools.compiler.ast.event.fileExited import io.spine.tools.compiler.ast.event.fileOptionDiscovered -import io.spine.tools.compiler.ast.file import io.spine.tools.compiler.ast.produceOptionEvents -import io.spine.tools.compiler.ast.toJava import io.spine.tools.compiler.ast.toAbsoluteFile +import io.spine.tools.compiler.ast.toJava import io.spine.tools.compiler.backend.DescriptorFilter import io.spine.tools.compiler.protobuf.file import io.spine.tools.compiler.protobuf.toHeader From 507d70088019c08f1cba2d8bf0c8e4b8d183b745 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:28:32 +0100 Subject: [PATCH 13/29] Document `api` level dependency from `:jvm` onto `:backend` --- jvm/build.gradle.kts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/jvm/build.gradle.kts b/jvm/build.gradle.kts index c45c37c5b3..167523868e 100644 --- a/jvm/build.gradle.kts +++ b/jvm/build.gradle.kts @@ -37,7 +37,12 @@ plugins { } dependencies { - api(project(":backend")) + api(project(":backend"))?.because( + """ + We use the `api` dependency here to allow users access `Pipeline` and + `CodeGenerationContext` API. + """.trimIndent() + ) api(ToolBase.psiJava) implementation(PalantirJavaFormat.lib) implementation(Time.javaExtensions) From a96a7c909e50fe647c17a0beab9e4f13d07e4820 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:35:30 +0100 Subject: [PATCH 14/29] Update the improvement plan with the progress --- .agents/tasks/improvement-plan.md | 92 +++++++++++++++++++++++-------- 1 file changed, 68 insertions(+), 24 deletions(-) diff --git a/.agents/tasks/improvement-plan.md b/.agents/tasks/improvement-plan.md index 4de2017f0d..c3a1e72e48 100644 --- a/.agents/tasks/improvement-plan.md +++ b/.agents/tasks/improvement-plan.md @@ -22,8 +22,11 @@ modules, and add user-facing documentation. Finding IDs below (S2, A1, - Tasks marked `[config]` live in files vendored from the `SpineEventEngine/config` submodule (e.g. `buildSrc/**`, `.github/workflows/**`, `.codecov.yml`). They must be fixed in - `config` and synced; they are listed here only for tracking and must - NOT be edited in this repository. + `config` and synced; they are NOT editable in this repository. They + are consolidated in + [config#691](https://github.com/SpineEventEngine/config/issues/691) + and listed under "Delegated to `config`" below, not in the milestone + checklists. - Open questions for a human before some tasks can start are listed in the audit report, section 6 (PAT ownership, GA timeline, whether `jvm → backend` exposure is intentional, perf budget). @@ -32,30 +35,24 @@ modules, and add user-facing documentation. Finding IDs below (S2, A1, Milestone 1 — correctness and hygiene: -- [ ] (S2) Reorder repositories in `settings.gradle.kts` so that +- [x] (S2) Reorder repositories in `settings.gradle.kts` so that `mavenLocal()` is not first in `pluginManagement` and `dependencyResolutionManagement`; align ordering with `core-jvm-compiler`. Effort S, risk Low. -- [ ] (Q2) Replace bare `!!` at user-facing configuration points with +- [x] (Q2) Replace bare `!!` at user-facing configuration points with `checkNotNull`/`requireNotNull` and actionable messages. Start with `gradle-plugin/.../Paths.kt:39`. Effort S, risk Low. -- [ ] (S1) `[config]` Remove the scrambled PAT from - `io/spine/gradle/repo/Repositories.kt`; blocked on audit open - question 1 (token ownership, GitHub Packages necessity). -- [ ] (Q3) `[config]` Fix or document the silent - `catch (ignored: Exception)` in - `buildSrc/.../javascript/task/Check.kt:143`. Milestone 2 — high-leverage (pre-GA API work): -- [ ] (A1) Narrow `jvm/build.gradle.kts:39` from - `api(project(":backend"))` to `implementation(...)`; compile - errors enumerate the truly leaked types; promote genuine contract - types to `api` module or a small facade. Verify by building - `core-jvm-compiler` against the locally published snapshot - (`localPublish` + `tests/`). Leave `testlib`'s re-export as is - (test harness). Effort L, risk Medium — blocked on audit open - question 3. +- [x] (A1) `jvm/build.gradle.kts:40` — narrowing + `api(project(":backend"))` to `implementation(...)` is not viable: + the `api` edge is intentional so downstream consumers can reach + the engine's `Pipeline` and `CodeGenerationContext` API. Resolved + via the audit's "or an ADR records why it must" done-signal by + documenting the edge in place with a `because(...)` rationale (it + previously carried none). Answers audit open question 3 — the + `jvm → backend` exposure is intentional. - [ ] (T1) Add direct unit specs for `params` (parameter types, file/directory conversions). Kotest assertions, `Spec` suffix, stubs not mocks. Effort M, risk Low. @@ -74,15 +71,62 @@ Milestone 3 — polish: forked JVM, tests throw `Compilation.Error`), or refactor to exception-first with the exit at the CLI boundary. Effort M, risk Medium. -- [ ] (T2) `[config]` Write down the coverage policy - (baseline-no-regression) next to `.codecov.yml`. -- [ ] `[config]` Resolve the 2023-09-22 TODO in - `buildSrc/.../java/Linters.kt:51`. -- [ ] `[config]` Add `concurrency` groups to build/guard workflows; - SHA-pin third-party actions. + +## Delegated to `config` + +These audit findings touch files vendored from the +`SpineEventEngine/config` submodule (`buildSrc/**`, `.codecov.yml`, and +the workflow templates under `.github-workflows/`). They must be fixed in +`config` and synced, and are intentionally **not** actionable in this +repository. All five are consolidated in +[config#691](https://github.com/SpineEventEngine/config/issues/691): + +- (S1) Remove the scrambled GitHub PAT from + `buildSrc/.../repo/Repositories.kt` — blocked on audit open question 1 + (token ownership, GitHub Packages necessity). +- (Q3) Document or fix the silent `catch (ignored: Exception)` in + `buildSrc/.../javascript/task/Check.kt:143`. +- (Q1 drift) Resolve the 2023-09-22 TODO in + `buildSrc/.../java/Linters.kt:51`. +- (T2) Write down the baseline-no-regression coverage policy next to + `.codecov.yml`. +- (D1 + S3) Add `concurrency` groups to the build/guard workflow + templates and SHA-pin third-party actions. ## Log - 2026-06-10 — audit completed; report committed as `docs/audit-2026-06.md`; plan drafted, awaiting human review of the audit's open questions (section 6) before execution starts. +- 2026-06-15 — (S2) done. Reordered `settings.gradle.kts` to + `gradlePluginPortal()` → `mavenLocal()` → `mavenCentral()` in both + `pluginManagement` and `dependencyResolutionManagement`, matching + `core-jvm-compiler`. Verified with `:params:dependencies` — build + configures and Spine `-SNAPSHOT` artifacts still resolve from + `mavenLocal`, so the sibling-repo snapshot workflow is intact. +- 2026-06-15 — (Q2) done. Both bare `protobufExtension!!` sites in + `gradle-plugin` (`Paths.kt` `protocOutputDir`, `Plugin.kt` + `setProtocArtifact`) now go through a shared + `Project.protobufExtensionOrFail()` helper that uses `checkNotNull` + with an actionable message naming the missing `com.google.protobuf` + plugin and the project path. Verified: `:gradle-plugin` compiles, + tests 5/5 pass, `dokkaGenerate` and `detekt` clean. +- 2026-06-15 — `[config]` items moved out of the milestone checklists + into a new "Delegated to `config`" section and consolidated into a + single tracking issue, + [config#691](https://github.com/SpineEventEngine/config/issues/691): + S1 (scrambled PAT), Q3 (silent npm-audit catch), Q1 drift + (2023-09-22 `Linters.kt` TODO), T2 (coverage policy), and D1+S3 + (workflow `concurrency` groups + SHA-pinned actions). They are fixed + in `config` and synced, not in this repo. Before filing, confirmed the + three `buildSrc` files are byte-identical between `config` and this + repo, and verified every cited path/line against the `config` working + copy (workflow templates live in `config`'s `.github-workflows/`). +- 2026-06-15 — (A1) resolved by documentation, not narrowing. Concluded + `jvm`'s `api(project(":backend"))` cannot be reduced to + `implementation(...)`: the engine's `Pipeline` and + `CodeGenerationContext` are part of the contract downstream consumers + program against, so the `api` edge is intentional. Added a + `because(...)` rationale at `jvm/build.gradle.kts:40-45` stating this + — closing A1 through the audit's sanctioned "ADR records why it must" + path and answering audit open question 3 (yes, intentional). From b6c78a906b368350533529fdf6c7d0b6df83ffe3 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:41:42 +0100 Subject: [PATCH 15/29] Bump version -> `2.0.0-SNAPSHOT.053` --- version.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.gradle.kts b/version.gradle.kts index c37349bbcd..a08865d7d7 100644 --- a/version.gradle.kts +++ b/version.gradle.kts @@ -30,7 +30,7 @@ * This version is also used by integration test projects. * E.g. see `tests/consumer/build.gradle.kts`. */ -val compilerVersion: String by extra("2.0.0-SNAPSHOT.052") +val compilerVersion: String by extra("2.0.0-SNAPSHOT.053") /** * The version, same as [compilerVersion], which is used for publishing From 711066ee5529b6ddf81cfaf301d855a29c9848c7 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:45:34 +0100 Subject: [PATCH 16/29] Bump local dependencies --- .../src/main/kotlin/io/spine/dependency/local/Compiler.kt | 4 ++-- buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt | 2 +- .../main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt | 4 ++-- .../src/main/kotlin/io/spine/dependency/local/ProtoTap.kt | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt index 7b1160d3b4..0584eb23c6 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/Compiler.kt @@ -72,7 +72,7 @@ object Compiler : Dependency() { * The version of the Compiler dependencies. */ override val version: String - private const val fallbackVersion = "2.0.0-SNAPSHOT.051" + private const val fallbackVersion = "2.0.0-SNAPSHOT.052" /** * The distinct version of the Compiler used by other build tools. @@ -81,7 +81,7 @@ object Compiler : Dependency() { * transitive dependencies, this is the version used to build the project itself. */ val dogfoodingVersion: String - private const val fallbackDfVersion = "2.0.0-SNAPSHOT.051" + private const val fallbackDfVersion = "2.0.0-SNAPSHOT.052" /** * The artifact for the Compiler Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt index 1f95edc473..8937b0ef02 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvm.kt @@ -39,7 +39,7 @@ typealias CoreJava = CoreJvm @Suppress("ConstPropertyName", "unused") object CoreJvm { const val group = Spine.group - const val version = "2.0.0-SNAPSHOT.373" + const val version = "2.0.0-SNAPSHOT.375" const val coreArtifact = "spine-core" const val clientArtifact = "spine-client" diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt index 6b1eb85fa3..5a0ab49b14 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/CoreJvmCompiler.kt @@ -46,12 +46,12 @@ object CoreJvmCompiler { /** * The version used in the build classpath. */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.070" + const val dogfoodingVersion = "2.0.0-SNAPSHOT.073" /** * The version to be used for integration tests. */ - const val version = "2.0.0-SNAPSHOT.070" + const val version = "2.0.0-SNAPSHOT.073" /** * The ID of the Gradle plugin. diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt index 21a6031052..0110a32f75 100644 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt +++ b/buildSrc/src/main/kotlin/io/spine/dependency/local/ProtoTap.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -38,7 +38,7 @@ package io.spine.dependency.local ) object ProtoTap { const val group = Spine.toolsGroup - const val version = "0.14.0" + const val version = "0.15.0" const val gradlePluginId = "io.spine.prototap" const val api = "$group:prototap-api:$version" const val gradlePlugin = "$group:prototap-gradle-plugin:$version" From 1676ada0e9ea8dd03d32d6199ca301dd9e92140a Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:47:42 +0100 Subject: [PATCH 17/29] Remove outdated test --- .../backend/CodeGenerationContextSpec.kt | 71 ------------------- 1 file changed, 71 deletions(-) diff --git a/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt b/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt index d5ab4e0861..f7768f0229 100644 --- a/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt +++ b/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt @@ -228,75 +228,4 @@ class CodeGenerationContextSpec { option.value.unpack(StringValue::class.java).value shouldContain "please" } } - - @Nested - @Disabled("Because we don't seem to need this at all.") - inner class `construct views` { - - private val thirdPartyFiles = dependencies.filter { it.name !in filesToGenerate } - - private lateinit var dependencyFiles: List - private lateinit var protoSourceFiles: List - private lateinit var pipelineId: String - - @BeforeEach - fun buildViews() { - pipelineId = Pipeline.generateId() - - // First context - createCodegenBlackBox(pipelineId).run { - val (context, blackbox) = this - context.use { - emitCompilerEvents(pipelineId) - dependencyFiles = thirdPartyFiles.map { - blackbox.assertEntity( - it.toFile() - ).run { - exists() - actual()!!.state() - } - }.map { state -> (state as ProtobufDependency).source } - } - } - - // Second context - createCodegenBlackBox(pipelineId).run { - val (context, blackbox) = this - context.use { - emitCompilerEventsForDependencyFiles(pipelineId) - - protoSourceFiles = thirdPartyFiles.map { - blackbox.assertEntity( - it.toFile() - ).run { - exists() - actual()!!.state() as ProtobufSourceFile - } - } - } - } - } - - private fun emitCompilerEventsForDependencyFiles(pipelineId: String) { - val set = codeGeneratorRequest { - protoFile.addAll(dependencies) - fileToGenerate.addAll(dependencies.map { it.name }) - } - val events = CompilerEvents.parse(set, typeSystem, { true }) - - val eventList = events.toList() - eventList.distinct() shouldContainExactly eventList - - ProtobufCompilerContext(pipelineId).use { - it.emitted(events) - } - } - - @Test - fun `exactly the same way for dependencies and for files to generate`() { - assertThat(dependencyFiles) - .ignoringRepeatedFieldOrder() - .containsExactlyElementsIn(protoSourceFiles) - } - } } From 49d12931c72673982411624d1e4344f4a2637128 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:47:53 +0100 Subject: [PATCH 18/29] Update dependency reports --- docs/dependencies/dependencies.md | 680 +++++++++++------------------- docs/dependencies/pom.xml | 139 +++--- 2 files changed, 321 insertions(+), 498 deletions(-) diff --git a/docs/dependencies/dependencies.md b/docs/dependencies/dependencies.md index e1faf27f37..acd94d0f09 100644 --- a/docs/dependencies/dependencies.md +++ b/docs/dependencies/dependencies.md @@ -1,6 +1,6 @@ -# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-api:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -55,7 +55,7 @@ * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -63,7 +63,7 @@ * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -102,39 +102,39 @@ * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -146,9 +146,9 @@ * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.jetbrains. **Name** : annotations. **Version** : 23.0.0. * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) @@ -282,10 +282,6 @@ * **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.59.2. - * **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.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -314,10 +310,6 @@ * **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.11.0. - * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) - * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -354,6 +346,10 @@ * **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.48.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_annotations. **Version** : 2.49.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) @@ -598,70 +594,38 @@ * **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.76.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-api. **Version** : 1.81.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-bom. **Version** : 1.76.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-bom. **Version** : 1.81.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.76.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.81.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.76.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.81.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.76.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.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.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.81.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.76.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.81.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.76.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.81.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) @@ -735,10 +699,6 @@ * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. - * **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.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [MIT license](https://spdx.org/licenses/MIT.txt) @@ -1107,14 +1067,14 @@ The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-api-tests:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-api-tests:2.0.0-SNAPSHOT.053` ## Runtime ## Compile, tests, and tooling @@ -1170,7 +1130,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -1186,7 +1146,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1198,6 +1158,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -1268,39 +1232,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using 1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.16. * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -1361,9 +1325,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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) @@ -1480,14 +1444,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:30 WEST 2026** 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.tools:compiler-backend:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-backend:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -1542,7 +1506,7 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -1554,7 +1518,7 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1593,39 +1557,39 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -1637,9 +1601,9 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.jetbrains. **Name** : annotations. **Version** : 23.0.0. * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) @@ -1773,10 +1737,6 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.59.2. - * **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.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -1805,10 +1765,6 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.11.0. - * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) - * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1845,6 +1801,10 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -2089,70 +2049,38 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **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.76.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-api. **Version** : 1.81.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-bom. **Version** : 1.76.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-bom. **Version** : 1.81.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.76.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.81.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.76.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.81.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.76.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.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.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.81.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.76.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.81.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.76.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.81.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) @@ -2226,10 +2154,6 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. - * **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.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [MIT license](https://spdx.org/licenses/MIT.txt) @@ -2598,14 +2522,14 @@ This report was generated on **Thu Jun 11 16:58:03 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-cli:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-cli:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -2729,7 +2653,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -2741,7 +2665,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2788,39 +2712,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -2837,9 +2761,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [LGPL-2.1-or-later](https://www.gnu.org/licenses/old-licenses/lgpl-2.1) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.functionaljava. **Name** : functionaljava. **Version** : 5.0. * **Project URL:** [http://functionaljava.org/](http://functionaljava.org/) @@ -3041,10 +2965,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. - * **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.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -3077,10 +2997,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. - * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) - * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3117,6 +3033,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -3361,70 +3281,38 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.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-api. **Version** : 1.81.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-bom. **Version** : 1.76.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-bom. **Version** : 1.81.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.76.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.81.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.76.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.81.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.76.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.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.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.81.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.76.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.81.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.76.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.81.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) @@ -3503,10 +3391,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. - * **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.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [MIT license](https://spdx.org/licenses/MIT.txt) @@ -3875,14 +3759,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-gradle-api:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-gradle-api:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -3937,7 +3821,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -3945,7 +3829,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -3984,39 +3868,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -4028,9 +3912,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.jetbrains. **Name** : annotations. **Version** : 23.0.0. * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) @@ -4159,7 +4043,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -4183,7 +4067,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -4203,6 +4087,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -4418,39 +4306,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -4511,9 +4399,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.3.0. * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) @@ -4895,14 +4783,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-gradle-plugin:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -4957,7 +4845,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -4965,7 +4853,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -5004,39 +4892,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -5048,9 +4936,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.jetbrains. **Name** : annotations. **Version** : 23.0.0. * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) @@ -5179,7 +5067,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -5203,7 +5091,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -5223,6 +5111,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -5442,39 +5334,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -5539,9 +5431,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.3.0. * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) @@ -5959,14 +5851,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-jvm:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-jvm:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -6026,7 +5918,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -6038,7 +5930,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6085,39 +5977,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -6129,9 +6021,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.functionaljava. **Name** : functionaljava. **Version** : 5.0. * **Project URL:** [http://functionaljava.org/](http://functionaljava.org/) @@ -6269,10 +6161,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. - * **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.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -6301,10 +6189,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. - * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) - * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -6341,6 +6225,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -6585,70 +6473,38 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.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-api. **Version** : 1.81.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-bom. **Version** : 1.76.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-bom. **Version** : 1.81.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.76.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.81.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.76.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.81.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.76.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.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.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.81.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.76.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.81.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.76.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.81.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) @@ -6722,10 +6578,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. - * **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.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [MIT license](https://spdx.org/licenses/MIT.txt) @@ -7094,14 +6946,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-params:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-params:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -7156,7 +7008,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -7164,7 +7016,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7203,39 +7055,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://www.github.com/sksamuel/aedile](https://www.github.com/sksamuel/aedile) * **License:** [The Apache 2.0 License](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -7247,9 +7099,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.jetbrains. **Name** : annotations. **Version** : 23.0.0. * **Project URL:** [https://github.com/JetBrains/java-annotations](https://github.com/JetBrains/java-annotations) @@ -7383,7 +7235,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -7411,7 +7263,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -7447,6 +7299,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -7691,39 +7547,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -7788,9 +7644,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.3.0. * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) @@ -8156,14 +8012,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-protoc-plugin:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.google.code.findbugs. **Name** : jsr305. **Version** : 3.0.2. @@ -8292,7 +8148,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -8316,7 +8172,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -8336,6 +8192,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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.36.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) @@ -8539,39 +8399,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -8632,9 +8492,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.3.0. * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) @@ -8992,14 +8852,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-test-env:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-test-env:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -9125,7 +8985,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) @@ -9285,10 +9145,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. - * **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.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -9321,10 +9177,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. - * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) - * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - 1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -9609,70 +9461,38 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.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-api. **Version** : 1.81.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-bom. **Version** : 1.76.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-bom. **Version** : 1.81.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.76.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.81.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.76.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.81.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.76.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.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.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.81.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.76.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.81.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.76.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.81.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) @@ -9738,10 +9558,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. - * **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.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **License:** [MIT license](https://spdx.org/licenses/MIT.txt) @@ -10110,14 +9926,14 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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.tools:compiler-testlib:2.0.0-SNAPSHOT.052` +# Dependencies of `io.spine.tools:compiler-testlib:2.0.0-SNAPSHOT.053` ## Runtime 1. **Group** : com.fasterxml.jackson. **Name** : jackson-bom. **Version** : 2.22.0. @@ -10172,7 +9988,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -10188,7 +10004,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10253,39 +10069,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using 1. **Group** : io.github.java-diff-utils. **Name** : java-diff-utils. **Version** : 4.16. * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -10338,9 +10154,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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) @@ -10506,7 +10322,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.59.2. +1. **Group** : com.google.api.grpc. **Name** : proto-google-common-protos. **Version** : 2.64.1. * **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) @@ -10534,7 +10350,7 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.11.0. +1. **Group** : com.google.code.gson. **Name** : gson. **Version** : 2.13.2. * **Project URL:** [https://github.com/google/gson](https://github.com/google/gson) * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) @@ -10570,6 +10386,10 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.48.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_annotations. **Version** : 2.49.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) @@ -10814,39 +10634,39 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **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.76.0. +1. **Group** : io.grpc. **Name** : grpc-api. **Version** : 1.81.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-bom. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-bom. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-context. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-core. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-inprocess. **Version** : 1.81.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-kotlin-stub. **Version** : 1.4.1. +1. **Group** : io.grpc. **Name** : grpc-kotlin-stub. **Version** : 1.5.0. * **Project URL:** [https://github.com/grpc/grpc-kotlin](https://github.com/grpc/grpc-kotlin) * **License:** [Apache 2.0](https://opensource.org/licenses/Apache-2.0) -1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-protobuf-lite. **Version** : 1.81.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.76.0. +1. **Group** : io.grpc. **Name** : grpc-stub. **Version** : 1.81.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) @@ -10919,9 +10739,9 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using * **Project URL:** [https://checkerframework.org/](https://checkerframework.org/) * **License:** [The MIT License](https://opensource.org/licenses/MIT) -1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.24. +1. **Group** : org.codehaus.mojo. **Name** : animal-sniffer-annotations. **Version** : 1.27. + * **License:** [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * **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.3.0. * **Project URL:** [http://github.com/FasterXML/stax2-api](http://github.com/FasterXML/stax2-api) @@ -11287,6 +11107,6 @@ This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using The dependencies distributed under several licenses, are used according their commercial-use-friendly license. -This report was generated on **Thu Jun 11 16:58:04 WEST 2026** using +This report was generated on **Mon Jun 15 17:45:31 WEST 2026** 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/docs/dependencies/pom.xml b/docs/dependencies/pom.xml index 73f632d298..6d5a50d346 100644 --- a/docs/dependencies/pom.xml +++ b/docs/dependencies/pom.xml @@ -10,7 +10,7 @@ all modules and does not describe the project structure per-subproject. --> io.spine.tools spine-compiler -2.0.0-SNAPSHOT.052 +2.0.0-SNAPSHOT.053 2015 @@ -47,6 +47,12 @@ all modules and does not describe the project structure per-subproject. 5.1.0 compile + + com.google.auto.service + auto-service-annotations + 1.1.1 + compile + com.google.protobuf protobuf-java @@ -134,7 +140,7 @@ all modules and does not describe the project structure per-subproject. io.spine spine-server - 2.0.0-SNAPSHOT.373 + 2.0.0-SNAPSHOT.375 compile @@ -143,12 +149,24 @@ all modules and does not describe the project structure per-subproject. 2.0.0-SNAPSHOT.242 compile + + io.spine + spine-time-java + 2.0.0-SNAPSHOT.242 + compile + io.spine spine-validation-jvm-runtime 2.0.0-SNAPSHOT.446 compile + + io.spine.tools + base-testlib + 2.0.0-SNAPSHOT.213 + compile + io.spine.tools gradle-plugin-api @@ -161,6 +179,12 @@ all modules and does not describe the project structure per-subproject. 2.0.0-SNAPSHOT.400 compile + + io.spine.tools + logging-testlib + 2.0.0-SNAPSHOT.417 + compile + io.spine.tools plugin-base @@ -176,7 +200,7 @@ all modules and does not describe the project structure per-subproject. io.spine.tools prototap-api - 0.14.0 + 0.15.0 compile @@ -185,6 +209,12 @@ all modules and does not describe the project structure per-subproject. 2.0.0-SNAPSHOT.400 compile + + io.spine.tools + server-testlib + 2.0.0-SNAPSHOT.375 + compile + io.spine.tools tool-base @@ -215,18 +245,30 @@ all modules and does not describe the project structure per-subproject. 1.10.2 compile + + com.google.auto.service + auto-service + 1.1.1 + provided + + + com.google.protobuf + protobuf-gradle-plugin + 0.10.0 + provided + + + org.jetbrains.kotlin + kotlin-gradle-plugin-api + 2.3.21 + provided + com.fasterxml.jackson.module jackson-module-kotlin 2.22.0 runtime - - com.google.auto.service - auto-service - 1.1.1 - test - com.google.guava guava-testlib @@ -239,36 +281,12 @@ all modules and does not describe the project structure per-subproject. 6.1.11 test - - io.spine - spine-time-java - 2.0.0-SNAPSHOT.242 - test - - - io.spine.tools - base-testlib - 2.0.0-SNAPSHOT.213 - test - - - io.spine.tools - logging-testlib - 2.0.0-SNAPSHOT.417 - test - io.spine.tools plugin-testlib 2.0.0-SNAPSHOT.400 test - - io.spine.tools - server-testlib - 2.0.0-SNAPSHOT.373 - test - io.spine.tools time-testlib @@ -281,6 +299,12 @@ all modules and does not describe the project structure per-subproject. 4.2.0 test + + org.jetbrains.kotlin + kotlin-gradle-plugin + 2.3.21 + test + org.jetbrains.kotlin kotlin-test-junit5 @@ -299,6 +323,12 @@ all modules and does not describe the project structure per-subproject. 2.3.0 test + + org.junit.jupiter + junit-jupiter + 6.1.0 + test + org.junit.jupiter junit-jupiter-api @@ -318,10 +348,10 @@ all modules and does not describe the project structure per-subproject. test - com.google.auto.service - auto-service-annotations - 1.1.1 - provided + org.junit.platform + junit-platform-launcher + null + test com.google.devtools.ksp @@ -333,12 +363,6 @@ all modules and does not describe the project structure per-subproject. error_prone_core 2.36.0 - - com.google.protobuf - protobuf-gradle-plugin - 0.10.0 - provided - com.google.protobuf protoc @@ -357,22 +381,22 @@ all modules and does not describe the project structure per-subproject. io.spine.tools compiler-cli-all - 2.0.0-SNAPSHOT.051 + 2.0.0-SNAPSHOT.052 io.spine.tools compiler-protoc-plugin - 2.0.0-SNAPSHOT.051 + 2.0.0-SNAPSHOT.052 io.spine.tools core-jvm-plugins - 2.0.0-SNAPSHOT.070 + 2.0.0-SNAPSHOT.073 io.spine.tools prototap-protoc-plugin - 0.14.0 + 0.15.0 io.spine.tools @@ -439,32 +463,11 @@ all modules and does not describe the project structure per-subproject. kotlin-build-tools-impl 2.3.21 - - org.jetbrains.kotlin - kotlin-gradle-plugin - 2.3.21 - - - org.jetbrains.kotlin - kotlin-gradle-plugin-api - 2.3.21 - provided - org.jetbrains.kotlin kotlin-scripting-compiler-embeddable 2.3.21 - - org.junit.jupiter - junit-jupiter - 6.1.0 - - - org.junit.platform - junit-platform-launcher - null - \ No newline at end of file From e568e00f61dec1e072e239523aba086e1fc55b1f Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:49:21 +0100 Subject: [PATCH 19/29] Optimise imports --- .../tools/compiler/backend/CodeGenerationContextSpec.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt b/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt index f7768f0229..1f224198f0 100644 --- a/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt +++ b/backend/src/test/kotlin/io/spine/tools/compiler/backend/CodeGenerationContextSpec.kt @@ -26,7 +26,6 @@ package io.spine.tools.compiler.backend -import com.google.common.truth.extensions.proto.ProtoTruth.assertThat import com.google.protobuf.AnyProto import com.google.protobuf.BoolValue import com.google.protobuf.DescriptorProtos @@ -36,7 +35,6 @@ import com.google.protobuf.TimestampProto import com.google.protobuf.WrappersProto import com.google.protobuf.compiler.codeGeneratorRequest import io.kotest.matchers.collections.containExactly -import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.maps.shouldContainKey import io.kotest.matchers.should @@ -50,7 +48,6 @@ import io.spine.testing.server.blackbox.BlackBox import io.spine.testing.server.blackbox.assertEntity import io.spine.time.TimeProto import io.spine.tools.compiler.ast.PrimitiveType.TYPE_BOOL -import io.spine.tools.compiler.ast.ProtobufDependency import io.spine.tools.compiler.ast.ProtobufSourceFile import io.spine.tools.compiler.ast.doc import io.spine.tools.compiler.ast.option @@ -60,7 +57,6 @@ import io.spine.tools.compiler.ast.toType import io.spine.tools.compiler.backend.event.CompilerEvents import io.spine.tools.compiler.context.CodegenContext import io.spine.tools.compiler.protobuf.file -import io.spine.tools.compiler.protobuf.toFile import io.spine.tools.compiler.test.DoctorProto import io.spine.tools.compiler.test.PhDProto import io.spine.tools.compiler.test.XtraOptsProto @@ -68,7 +64,6 @@ import io.spine.tools.compiler.type.findAbsolute import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test From cc5834e6452863e0a1e0b0d95e18c802aa0744b2 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 17:50:24 +0100 Subject: [PATCH 20/29] Simplify dependency docs --- jvm/build.gradle.kts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/jvm/build.gradle.kts b/jvm/build.gradle.kts index 167523868e..5dfb272293 100644 --- a/jvm/build.gradle.kts +++ b/jvm/build.gradle.kts @@ -38,10 +38,8 @@ plugins { dependencies { api(project(":backend"))?.because( - """ - We use the `api` dependency here to allow users access `Pipeline` and - `CodeGenerationContext` API. - """.trimIndent() + "We use the `api` dependency here to allow users access `Pipeline` and" + + " `CodeGenerationContext` APIs." ) api(ToolBase.psiJava) implementation(PalantirJavaFormat.lib) From e506e37f98a803899d405a5e5bd7f920e7f919a0 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 18:31:08 +0100 Subject: [PATCH 21/29] Add performance test --- .github/workflows/performance-test.yml | 40 ++++++ backend/build.gradle.kts | 29 ++++- .../backend/perf/PipelineSmokeSpec.kt | 121 ++++++++++++++++++ 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/performance-test.yml create mode 100644 backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml new file mode 100644 index 0000000000..9bc1e9368b --- /dev/null +++ b/.github/workflows/performance-test.yml @@ -0,0 +1,40 @@ +name: Engine performance smoke test + +on: pull_request + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + performance: + name: Engine performance smoke test + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v6 + with: + submodules: 'true' + + - uses: actions/setup-java@v5 + with: + java-version: 17 + distribution: zulu + + - uses: gradle/actions/setup-gradle@v6 + + # A timed `Pipeline` run over the `test-env` fixtures. This is a smoke + # signal, not a performance gate: the task fails only if the run exceeds a + # coarse hang ceiling (a deadlock/pathology guard), never on normal + # performance variance. The elapsed time is printed to the build log. + - name: Run the engine performance smoke test + shell: bash + run: ./gradlew :backend:performanceTest --stacktrace + + # See: https://github.com/marketplace/actions/junit-report-action + - name: Publish performance test report + uses: mikepenz/action-junit-report@v4.0.3 + if: always() # always run even if the previous step fails + with: + report_paths: 'backend/build/test-results/performanceTest/TEST-*.xml' + require_tests: true # fail the workflow if no perf test report is found diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index 4a5313349d..8cd26b2729 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2024, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -68,3 +68,30 @@ apply() tasks.withType { repository = PublishingRepos.cloudArtifactRegistry } + +// The performance smoke signal (`perf/PipelineSmokeSpec.kt`) is tagged +// `performance` so it stays out of the regular (fast) `test` gate and runs only +// via the dedicated `performanceTest` task below. +tasks.test { + useJUnitPlatform { + excludeTags("performance") + } +} + +// Times a single cold `Pipeline` run and fails only on a deadlock/pathology +// (a coarse hang ceiling, not a performance budget). Intentionally NOT wired +// into `check`/`build`; the `Engine performance smoke test` workflow runs it on +// pull requests. +val performanceTest by tasks.registering(Test::class) { + description = "Runs the engine performance smoke signal (timed `Pipeline` run, hang ceiling)." + group = "verification" + testClassesDirs = sourceSets.test.get().output.classesDirs + classpath = sourceSets.test.get().runtimeClasspath + useJUnitPlatform { + includeTags("performance") + } + shouldRunAfter(tasks.test) + testLogging { + showStandardStreams = true + } +} diff --git a/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt new file mode 100644 index 0000000000..8934b96568 --- /dev/null +++ b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt @@ -0,0 +1,121 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.backend.perf + +import com.google.protobuf.compiler.codeGeneratorRequest +import io.kotest.matchers.comparables.shouldBeLessThan +import io.spine.string.simply +import io.spine.testing.compiler.RenderingTestbed +import io.spine.testing.compiler.pipelineParams +import io.spine.testing.compiler.withRequestFile +import io.spine.testing.compiler.withRoots +import io.spine.tools.compiler.ast.toAbsoluteFile +import io.spine.tools.compiler.backend.Pipeline +import io.spine.tools.compiler.backend.createTypeSystem +import io.spine.tools.compiler.test.DoctorProto +import io.spine.tools.compiler.test.Journey +import io.spine.tools.compiler.test.TestPlugin +import io.spine.tools.compiler.test.UnderscorePrefixRenderer +import java.nio.file.Path +import kotlin.io.path.writeBytes +import kotlin.io.path.writeText +import kotlin.time.Duration.Companion.seconds +import kotlin.time.measureTime +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Tag +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir + +/** + * A performance smoke signal for the compiler engine. + * + * The engine builds a full event-sourced [`Code Generation` context][io.spine.tools.compiler.context.CodegenContext] + * on every [Pipeline] run, so a regression in that bootstrap or in the rendering + * path inflates the compilation time of every downstream build. This test times a + * single cold pipeline run over the `test-env` fixtures, logs the elapsed time as a + * signal, and fails only if the run exceeds a deliberately generous [HANG_CEILING]. + * + * This is **not** a performance gate: the ceiling is a deadlock/pathology guard, + * not a budget (see audit `docs/audit-2026-06.md`, open question 4). The test is + * tagged [`performance`][Tag] so it is excluded from the regular `test` task and + * runs only via the `:backend:performanceTest` task wired into the + * `Engine performance smoke test` workflow. + */ +@Tag("performance") +@DisplayName("The compiler engine performance smoke test should") +internal class PipelineSmokeSpec { + + @Test + fun `finish a pipeline run within the hang ceiling`(@TempDir sandbox: Path) { + val srcRoot = sandbox.resolve("src").also { it.toFile().mkdirs() } + val targetRoot = sandbox.resolve("target").also { it.toFile().mkdirs() } + val codegenRequestFile = sandbox.resolve("code-gen-request.bin") + + // The correctness of the rendered code is irrelevant here; we only need the + // render path to execute over a real source file. + srcRoot.resolve("SourceCode.java").writeText("${simply()} worth taking") + + val descriptor = DoctorProto.getDescriptor() + val request = codeGeneratorRequest { + protoFile += descriptor.toProto() + fileToGenerate += descriptor.name + } + codegenRequestFile.writeBytes(request.toByteArray()) + + val typeSystem = createTypeSystem(request) + val params = pipelineParams { + addAllCompiledProto(typeSystem.compiledProtoFiles.files.map { it.toAbsoluteFile() }) + withRequestFile(codegenRequestFile) + withRoots(srcRoot, targetRoot) + } + val renderer = UnderscorePrefixRenderer() + + val elapsed = measureTime { + Pipeline( + params = params, + additionalPlugins = listOf(TestPlugin(), RenderingTestbed(renderer)), + )() + } + + // The signal: surfaced in the build log via `testLogging.showStandardStreams`. + println("[perf] engine pipeline run over `doctor.proto`: $elapsed") + + // The deadlock guard — NOT a performance budget. + elapsed shouldBeLessThan HANG_CEILING + } + + private companion object { + + /** + * Deliberately generous. A single small pipeline run takes a few seconds at + * most on a CI runner; this trips only on a deadlock or pathological slowdown, + * never on normal performance variance. It is intentionally **not** a + * performance budget (audit open question 4). + */ + private val HANG_CEILING = 60.seconds + } +} From 5faf39e9946c29b933aad86aa2521eacc8b96ffc Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 18:50:29 +0100 Subject: [PATCH 22/29] Refine `PipelineSmokeSpec` per code review Apply reviewer feedback to the engine performance smoke test: - use `kotlin.io.path.createDirectories()` instead of `.also { it.toFile().mkdirs() }`, which discarded a `Boolean`; - wrap the over-long KDoc link line within the 100-column limit; - backtick the `@DisplayName` subject, matching `PipelineSpec`. No behavior change; `:backend:performanceTest` and `:backend:build` remain green. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../compiler/backend/perf/PipelineSmokeSpec.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt index 8934b96568..5fb7a37b06 100644 --- a/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt +++ b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt @@ -41,6 +41,7 @@ import io.spine.tools.compiler.test.Journey import io.spine.tools.compiler.test.TestPlugin import io.spine.tools.compiler.test.UnderscorePrefixRenderer import java.nio.file.Path +import kotlin.io.path.createDirectories import kotlin.io.path.writeBytes import kotlin.io.path.writeText import kotlin.time.Duration.Companion.seconds @@ -53,9 +54,10 @@ import org.junit.jupiter.api.io.TempDir /** * A performance smoke signal for the compiler engine. * - * The engine builds a full event-sourced [`Code Generation` context][io.spine.tools.compiler.context.CodegenContext] - * on every [Pipeline] run, so a regression in that bootstrap or in the rendering - * path inflates the compilation time of every downstream build. This test times a + * The engine builds a full event-sourced `Code Generation` context + * ([CodegenContext][io.spine.tools.compiler.context.CodegenContext]) on every + * [Pipeline] run, so a regression in that bootstrap or in the rendering path + * inflates the compilation time of every downstream build. This test times a * single cold pipeline run over the `test-env` fixtures, logs the elapsed time as a * signal, and fails only if the run exceeds a deliberately generous [HANG_CEILING]. * @@ -66,13 +68,13 @@ import org.junit.jupiter.api.io.TempDir * `Engine performance smoke test` workflow. */ @Tag("performance") -@DisplayName("The compiler engine performance smoke test should") +@DisplayName("`Pipeline` performance smoke test should") internal class PipelineSmokeSpec { @Test fun `finish a pipeline run within the hang ceiling`(@TempDir sandbox: Path) { - val srcRoot = sandbox.resolve("src").also { it.toFile().mkdirs() } - val targetRoot = sandbox.resolve("target").also { it.toFile().mkdirs() } + val srcRoot = sandbox.resolve("src").createDirectories() + val targetRoot = sandbox.resolve("target").createDirectories() val codegenRequestFile = sandbox.resolve("code-gen-request.bin") // The correctness of the rendered code is irrelevant here; we only need the From 8f81a7f10a6e7aed5d1bdf7730fe2af81a528897 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 18:51:35 +0100 Subject: [PATCH 23/29] Add tests in `:params` --- .../params/CodeGeneratorRequestFileSpec.kt | 47 ++++++++++ .../params/ParametersDirectorySpec.kt | 88 +++++++++++++++++++ .../compiler/params/RequestDirectorySpec.kt | 51 +++++++++++ .../compiler/params/WorkingDirectorySpec.kt | 81 +++++++++++++++++ 4 files changed, 267 insertions(+) create mode 100644 params/src/test/kotlin/io/spine/tools/compiler/params/CodeGeneratorRequestFileSpec.kt create mode 100644 params/src/test/kotlin/io/spine/tools/compiler/params/ParametersDirectorySpec.kt create mode 100644 params/src/test/kotlin/io/spine/tools/compiler/params/RequestDirectorySpec.kt create mode 100644 params/src/test/kotlin/io/spine/tools/compiler/params/WorkingDirectorySpec.kt diff --git a/params/src/test/kotlin/io/spine/tools/compiler/params/CodeGeneratorRequestFileSpec.kt b/params/src/test/kotlin/io/spine/tools/compiler/params/CodeGeneratorRequestFileSpec.kt new file mode 100644 index 0000000000..33c6e35376 --- /dev/null +++ b/params/src/test/kotlin/io/spine/tools/compiler/params/CodeGeneratorRequestFileSpec.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.params + +import io.kotest.matchers.shouldBe +import io.spine.tools.code.SourceSetName +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +@DisplayName("`CodeGeneratorRequestFile` should") +internal class CodeGeneratorRequestFileSpec { + + @Test + fun `build the file name from the source set name`() { + CodeGeneratorRequestFile.name(SourceSetName("main")) shouldBe "main.bin" + CodeGeneratorRequestFile.name(SourceSetName("testFixtures")) shouldBe "testFixtures.bin" + } + + @Test + fun `expose the default directory name`() { + CodeGeneratorRequestFile.defaultDirectory shouldBe "compiler/requests" + } +} diff --git a/params/src/test/kotlin/io/spine/tools/compiler/params/ParametersDirectorySpec.kt b/params/src/test/kotlin/io/spine/tools/compiler/params/ParametersDirectorySpec.kt new file mode 100644 index 0000000000..885ad92ef2 --- /dev/null +++ b/params/src/test/kotlin/io/spine/tools/compiler/params/ParametersDirectorySpec.kt @@ -0,0 +1,88 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.params + +import io.kotest.matchers.shouldBe +import io.spine.format.Format +import io.spine.tools.code.SourceSetName +import io.spine.tools.compiler.ast.toAbsoluteDirectory +import io.spine.tools.compiler.ast.toAbsoluteFile +import io.spine.type.toJson +import java.nio.file.Path +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir + +@DisplayName("`ParametersDirectory` should") +internal class ParametersDirectorySpec { + + @Test + fun `expose its path`(@TempDir dir: Path) { + ParametersDirectory(dir).path shouldBe dir + } + + @Test + fun `compose the file name from the source set and default format`(@TempDir dir: Path) { + val file = ParametersDirectory(dir).file(SourceSetName("main")) + + file.name shouldBe "main.pb.json" + file.parentFile shouldBe dir.toFile() + } + + @Test + fun `use 'ProtoJson' as the default format`(@TempDir dir: Path) { + val directory = ParametersDirectory(dir) + val sourceSet = SourceSetName("main") + + directory.file(sourceSet) shouldBe directory.file(sourceSet, Format.ProtoJson) + } + + @Test + fun `compose the file name using the given format`(@TempDir dir: Path) { + val file = ParametersDirectory(dir).file(SourceSetName("main"), Format.ProtoJson) + + file.name shouldBe "main.pb.json" + } + + @Test + fun `write the parameters to a file and return it`(@TempDir dir: Path) { + val directory = ParametersDirectory(dir) + val sourceSet = SourceSetName("main") + val parameters = pipelineParameters { + compiledProto.add(dir.resolve("compiled.proto").toAbsoluteFile()) + settings = dir.resolve("settings").toAbsoluteDirectory() + request = dir.resolve("request.bin").toAbsoluteFile() + targetRoot.add(dir.resolve("generated").toAbsoluteDirectory()) + } + + val written = directory.write(sourceSet, parameters) + + written shouldBe directory.file(sourceSet) + written.exists() shouldBe true + written.readText() shouldBe parameters.toJson() + } +} diff --git a/params/src/test/kotlin/io/spine/tools/compiler/params/RequestDirectorySpec.kt b/params/src/test/kotlin/io/spine/tools/compiler/params/RequestDirectorySpec.kt new file mode 100644 index 0000000000..57c90b6257 --- /dev/null +++ b/params/src/test/kotlin/io/spine/tools/compiler/params/RequestDirectorySpec.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.params + +import io.kotest.matchers.shouldBe +import io.spine.tools.code.SourceSetName +import java.nio.file.Path +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir + +@DisplayName("`RequestDirectory` should") +internal class RequestDirectorySpec { + + @Test + fun `compose the request file name for a source set`(@TempDir dir: Path) { + val file = RequestDirectory(dir).file(SourceSetName("main")) + + file.name shouldBe "main.bin" + file.parentFile shouldBe dir.toFile() + } + + @Test + fun `expose its path`(@TempDir dir: Path) { + RequestDirectory(dir).path shouldBe dir + } +} diff --git a/params/src/test/kotlin/io/spine/tools/compiler/params/WorkingDirectorySpec.kt b/params/src/test/kotlin/io/spine/tools/compiler/params/WorkingDirectorySpec.kt new file mode 100644 index 0000000000..6e172b90a4 --- /dev/null +++ b/params/src/test/kotlin/io/spine/tools/compiler/params/WorkingDirectorySpec.kt @@ -0,0 +1,81 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.params + +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.matchers.shouldBe +import java.nio.file.Path +import kotlin.io.path.exists +import kotlin.io.path.isDirectory +import kotlin.io.path.writeText +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.io.TempDir + +@DisplayName("`WorkingDirectory` should") +internal class WorkingDirectorySpec { + + @Test + fun `create the directory if it does not exist`(@TempDir parent: Path) { + val path = parent.resolve("working") + path.exists() shouldBe false + + WorkingDirectory(path) + + path.isDirectory() shouldBe true + } + + @Test + fun `reject a path which is an existing file`(@TempDir parent: Path) { + val file = parent.resolve("not-a-directory") + file.writeText("I am a file, not a directory.") + + shouldThrow { + WorkingDirectory(file) + } + } + + @Test + fun `provide the directory for parameter files`(@TempDir dir: Path) { + WorkingDirectory(dir).parametersDirectory.path shouldBe dir.resolve("parameters") + } + + @Test + fun `provide the directory for settings files`(@TempDir dir: Path) { + WorkingDirectory(dir).settingsDirectory.path shouldBe dir.resolve("settings") + } + + @Test + fun `provide the directory for request files`(@TempDir dir: Path) { + WorkingDirectory(dir).requestDirectory.path shouldBe dir.resolve("requests") + } + + @Test + fun `expose its path`(@TempDir dir: Path) { + WorkingDirectory(dir).path shouldBe dir + } +} From 7b485b8d6940c55cba37fbcca5622f6f57cf5f03 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 18:53:42 +0100 Subject: [PATCH 24/29] Update the improvement plan with P1 progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mark (P1) done: the engine performance smoke signal landed as a non-gating timed `Pipeline` run guarded by a hang ceiling (commits e506e37f9, 5faf39e99), which sidesteps the audit's perf-budget open question instead of waiting on it. The same file also carries the concurrent (T1) plan-doc updates already present in the working tree — the T1 checkbox, bullet, and Log entries, including the `Parameter.equals()` dead-code-removal note. The T1 source changes belong to a separate, in-flight commit. Co-Authored-By: Claude Opus 4.8 (1M context) --- .agents/tasks/improvement-plan.md | 59 +++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/.agents/tasks/improvement-plan.md b/.agents/tasks/improvement-plan.md index c3a1e72e48..a5857c2f96 100644 --- a/.agents/tasks/improvement-plan.md +++ b/.agents/tasks/improvement-plan.md @@ -53,12 +53,19 @@ Milestone 2 — high-leverage (pre-GA API work): documenting the edge in place with a `because(...)` rationale (it previously carried none). Answers audit open question 3 — the `jvm → backend` exposure is intentional. -- [ ] (T1) Add direct unit specs for `params` (parameter types, - file/directory conversions). Kotest assertions, `Spec` suffix, - stubs not mocks. Effort M, risk Low. -- [ ] (P1) Add a perf smoke signal for the engine (BuildSpeed or a - timed pipeline run) to PR workflows of this repo — blocked on - audit open question 4 (perf budget). Effort M, risk Low. +- [x] (T1) Added direct unit specs for `params` (parameter types, + file/directory conversions) — 5 `Spec` files, 19 cases, Kotest + assertions, stubs not mocks. Line coverage 0% → 94.5%; the only + uncovered lines were the unreachable field comparisons in + `Parameter.equals()` (68–70), since removed (see changelog). + Effort M, risk Low. +- [x] (P1) Added a perf **smoke signal** (not a gate) for the engine: a + timed cold `Pipeline` run (`PipelineSmokeSpec`, tagged `performance`) + run by a dedicated `:backend:performanceTest` task from a new + repo-specific `performance-test.yml` PR workflow. It fails only on a + coarse hang ceiling (a deadlock/pathology guard), so it asserts no + perf budget — sidestepping audit open question 4 instead of waiting + on it. BuildSpeed is deliberately avoided. Effort M, risk Low. Milestone 3 — polish: @@ -130,3 +137,43 @@ repository. All five are consolidated in `because(...)` rationale at `jvm/build.gradle.kts:40-45` stating this — closing A1 through the audit's sanctioned "ADR records why it must" path and answering audit open question 3 (yes, intentional). +- 2026-06-15 — (T1) done via the `raise-coverage` skill on `:params`. + Added 5 Kotlin `Spec` files (19 cases) under + `params/src/test/kotlin/io/spine/tools/compiler/params/`: + `ParameterSpec` (covers `Parameter` + the three `CommandLineInterface` + param objects via Guava `EqualsTester`), `ParametersDirectorySpec`, + `WorkingDirectorySpec`, `RequestDirectorySpec`, and + `CodeGeneratorRequestFileSpec`. Kover line coverage for `:params` went + 0% → 94.5% (52/55 lines); all 19 tests pass. Remaining uncovered code + is non-actionable: the unreachable field comparisons in + `Parameter.equals()` (68–70, dead because the `super.equals` identity + check short-circuits) and two trivial unused constant getters + (`ParametersDirectory.DEFAULT_FORMAT`, `Parameter.ps`). Branch is + already version-bumped (`2.0.0-SNAPSHOT.053`). +- 2026-06-15 — (P1) done as a **smoke signal, not a gate** — the chosen + shape avoids running BuildSpeed as a perf gate on PRs. Added + `backend/.../backend/perf/PipelineSmokeSpec.kt`: a `@Tag("performance")` + test that times one cold `Pipeline` run over the `test-env` `doctor.proto` + fixture (reusing the `PipelineSpec` construction), logs the elapsed time, + and asserts only that it stays under a deliberately generous 60s hang + ceiling. Because it asserts no perf budget, audit open question 4 does + **not** block it (Q4 only gates a workflow that *asserts* a budget). Wired + via a dedicated `:backend:performanceTest` task in `backend/build.gradle.kts` + (the `performance` tag is excluded from the normal `test`); the task is not + in `check`/`build`. Runs on PRs through a new **repo-specific** + `.github/workflows/performance-test.yml` — confirmed `performance-test.yml` + is not a `config` template (it is git-tracked directly in + `core-jvm-compiler`), so it is introduced here, not delegated to `config`. + BuildSpeed stays the downstream end-to-end measure; this is the upstream + early-warning signal where the engine lives. +- 2026-06-15 — Removed the dead `Parameter.equals()`/`hashCode()` overrides + that the T1 entry flagged as the only non-actionable uncovered lines. + `Parameter` is `sealed` with three `object` subtypes, so identity equality + (default `Any`) is the sole achievable behavior; the custom `equals()` was + unreachable past its `super.equals` identity short-circuit (former lines + 68–70). Dropped both overrides — kept `toString()` returning the long name + for readable logs — removed the now-invalid `hashCode` spec case (19 → 18 + `:params` cases), and `ParameterSpec`'s `EqualsTester` now asserts default + identity semantics. Bumped `Parameter.kt`'s copyright to 2026. Verified with + `./gradlew :params:test :params:detekt`: 18 tests pass, detekt clean. Branch + stays version-bumped (`2.0.0-SNAPSHOT.053`); no re-bump needed. From c437fa21bde59a4b8febf65b774f65eb96867a7c Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 18:56:59 +0100 Subject: [PATCH 25/29] Simplify equality and document the design choice --- .../spine/tools/compiler/params/Parameter.kt | 26 +++---- .../tools/compiler/params/ParameterSpec.kt | 75 +++++++++++++++++++ 2 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 params/src/test/kotlin/io/spine/tools/compiler/params/ParameterSpec.kt diff --git a/params/src/main/kotlin/io/spine/tools/compiler/params/Parameter.kt b/params/src/main/kotlin/io/spine/tools/compiler/params/Parameter.kt index 26947974e5..89edc02f38 100644 --- a/params/src/main/kotlin/io/spine/tools/compiler/params/Parameter.kt +++ b/params/src/main/kotlin/io/spine/tools/compiler/params/Parameter.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -30,6 +30,18 @@ import java.io.File.pathSeparator /** * A parameter passed to the Compiler command-line application. + * + * ## Equality + * + * This class intentionally does not override `equals()` or `hashCode()`, + * relying on the identity-based semantics inherited from [Any]. + * + * Every subtype is a Kotlin `object` — a singleton — so each parameter has + * exactly one instance (see [ParametersFileParam], [InfoLoggingParam], and + * [DebugLoggingParam]). Two distinct instances of the same parameter cannot + * exist; identity equality is therefore both correct and the only achievable + * behavior. A value-based `equals()` would add no distinguishing power, so it + * is deliberately omitted rather than maintained as effectively dead code. */ public sealed class Parameter( @@ -56,20 +68,8 @@ public sealed class Parameter( */ public val help: String = help.trimIndent() - final override fun hashCode(): Int = name.hashCode() - final override fun toString(): String = name - final override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is Parameter) return false - if (!super.equals(other)) return false - - if (name != other.name) return false - if (shortName != other.shortName) return false - return help == other.help - } - internal companion object { /** diff --git a/params/src/test/kotlin/io/spine/tools/compiler/params/ParameterSpec.kt b/params/src/test/kotlin/io/spine/tools/compiler/params/ParameterSpec.kt new file mode 100644 index 0000000000..eeba9185ee --- /dev/null +++ b/params/src/test/kotlin/io/spine/tools/compiler/params/ParameterSpec.kt @@ -0,0 +1,75 @@ +/* + * Copyright 2026, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.spine.tools.compiler.params + +import com.google.common.testing.EqualsTester +import io.kotest.matchers.shouldBe +import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldStartWith +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Test + +@DisplayName("`Parameter` should") +internal class ParameterSpec { + + @Test + fun `expose the long and short names of the parameters`() { + ParametersFileParam.name shouldBe "--params" + ParametersFileParam.shortName shouldBe "-P" + + InfoLoggingParam.name shouldBe "--info" + InfoLoggingParam.shortName shouldBe "-I" + + DebugLoggingParam.name shouldBe "--debug" + DebugLoggingParam.shortName shouldBe "-D" + } + + @Test + fun `trim the indentation of the help text`() { + // The `help` property must not retain the indentation of the source code. + ParametersFileParam.help shouldStartWith "The path to the file" + ParametersFileParam.help shouldContain "pb.json" + InfoLoggingParam.help shouldStartWith "Set log level to `INFO`." + DebugLoggingParam.help shouldStartWith "Set log level to `DEBUG`." + } + + @Test + fun `provide 'toString' returning the long name`() { + ParametersFileParam.toString() shouldBe "--params" + InfoLoggingParam.toString() shouldBe "--info" + DebugLoggingParam.toString() shouldBe "--debug" + } + + @Test + fun `compare parameters by instance identity`() { + EqualsTester() + .addEqualityGroup(ParametersFileParam) + .addEqualityGroup(InfoLoggingParam) + .addEqualityGroup(DebugLoggingParam) + .testEquals() + } +} From 0ed8bc5b3c03f0f624b156f6f8d449cda04ce13f Mon Sep 17 00:00:00 2001 From: Alexander Yevsyukov Date: Mon, 15 Jun 2026 21:09:40 +0300 Subject: [PATCH 26/29] Fix doc grammar Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- jvm/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jvm/build.gradle.kts b/jvm/build.gradle.kts index 5dfb272293..63b8f3314f 100644 --- a/jvm/build.gradle.kts +++ b/jvm/build.gradle.kts @@ -38,8 +38,8 @@ plugins { dependencies { api(project(":backend"))?.because( - "We use the `api` dependency here to allow users access `Pipeline` and" + - " `CodeGenerationContext` APIs." + "We use the `api` dependency here to allow users to access `Pipeline` and" + + " `CodeGenerationContext` APIs." ) api(ToolBase.psiJava) implementation(PalantirJavaFormat.lib) From 4e3e5001fa6ac9f01728b91f4826eb1d0e72605e Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 19:41:31 +0100 Subject: [PATCH 27/29] Fix typo in docs --- jvm/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jvm/build.gradle.kts b/jvm/build.gradle.kts index 5dfb272293..81b9145fe0 100644 --- a/jvm/build.gradle.kts +++ b/jvm/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright 2024, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -38,7 +38,7 @@ plugins { dependencies { api(project(":backend"))?.because( - "We use the `api` dependency here to allow users access `Pipeline` and" + + "We use the `api` dependency here to allow users to access `Pipeline` and" + " `CodeGenerationContext` APIs." ) api(ToolBase.psiJava) From 0ebea580e1988a6ff76f6f313f1f6604a2551522 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 19:42:22 +0100 Subject: [PATCH 28/29] Use JUnit's `@Timeout` to guard pipeline --- .../backend/perf/PipelineSmokeSpec.kt | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt index 5fb7a37b06..64fa0e7c74 100644 --- a/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt +++ b/backend/src/test/kotlin/io/spine/tools/compiler/backend/perf/PipelineSmokeSpec.kt @@ -27,7 +27,6 @@ package io.spine.tools.compiler.backend.perf import com.google.protobuf.compiler.codeGeneratorRequest -import io.kotest.matchers.comparables.shouldBeLessThan import io.spine.string.simply import io.spine.testing.compiler.RenderingTestbed import io.spine.testing.compiler.pipelineParams @@ -41,14 +40,16 @@ import io.spine.tools.compiler.test.Journey import io.spine.tools.compiler.test.TestPlugin import io.spine.tools.compiler.test.UnderscorePrefixRenderer import java.nio.file.Path +import java.util.concurrent.TimeUnit.SECONDS import kotlin.io.path.createDirectories import kotlin.io.path.writeBytes import kotlin.io.path.writeText -import kotlin.time.Duration.Companion.seconds import kotlin.time.measureTime import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Tag import org.junit.jupiter.api.Test +import org.junit.jupiter.api.Timeout +import org.junit.jupiter.api.Timeout.ThreadMode.SEPARATE_THREAD import org.junit.jupiter.api.io.TempDir /** @@ -58,13 +59,17 @@ import org.junit.jupiter.api.io.TempDir * ([CodegenContext][io.spine.tools.compiler.context.CodegenContext]) on every * [Pipeline] run, so a regression in that bootstrap or in the rendering path * inflates the compilation time of every downstream build. This test times a - * single cold pipeline run over the `test-env` fixtures, logs the elapsed time as a - * signal, and fails only if the run exceeds a deliberately generous [HANG_CEILING]. + * single cold pipeline run over the `test-env` fixtures and logs the elapsed time + * as a signal. * - * This is **not** a performance gate: the ceiling is a deadlock/pathology guard, - * not a budget (see audit `docs/audit-2026-06.md`, open question 4). The test is - * tagged [`performance`][Tag] so it is excluded from the regular `test` task and - * runs only via the `:backend:performanceTest` task wired into the + * This is **not** a performance gate or budget. The run is bounded by a preemptive + * [Timeout] on a separate thread: a deadlock or pathological slowdown aborts the + * test at the ceiling instead of hanging until the CI job times out. The ceiling is + * deliberately generous — a single small pipeline run takes a few seconds at most on + * a CI runner — so it never trips on normal performance variance. + * + * The test is tagged [`performance`][Tag] so it is excluded from the regular `test` + * task and runs only via the `:backend:performanceTest` task wired into the * `Engine performance smoke test` workflow. */ @Tag("performance") @@ -72,6 +77,7 @@ import org.junit.jupiter.api.io.TempDir internal class PipelineSmokeSpec { @Test + @Timeout(value = 60, unit = SECONDS, threadMode = SEPARATE_THREAD) fun `finish a pipeline run within the hang ceiling`(@TempDir sandbox: Path) { val srcRoot = sandbox.resolve("src").createDirectories() val targetRoot = sandbox.resolve("target").createDirectories() @@ -104,20 +110,9 @@ internal class PipelineSmokeSpec { } // The signal: surfaced in the build log via `testLogging.showStandardStreams`. + // A deadlock or hang is caught preemptively by `@Timeout` (which abandons the + // run on a separate thread), not by a post-hoc assertion that a hung run would + // never reach. println("[perf] engine pipeline run over `doctor.proto`: $elapsed") - - // The deadlock guard — NOT a performance budget. - elapsed shouldBeLessThan HANG_CEILING - } - - private companion object { - - /** - * Deliberately generous. A single small pipeline run takes a few seconds at - * most on a CI runner; this trips only on a deadlock or pathological slowdown, - * never on normal performance variance. It is intentionally **not** a - * performance budget (audit open question 4). - */ - private val HANG_CEILING = 60.seconds } } From 79d7cf26037937ba7c214de8680d6b571146e087 Mon Sep 17 00:00:00 2001 From: alexander-yevsyukov Date: Mon, 15 Jun 2026 19:46:27 +0100 Subject: [PATCH 29/29] Update `config` --- buildSrc/src/main/kotlin/BuildExtensions.kt | 17 ++-- .../io/spine/dependency/local/McJava.kt | 79 ------------------- config | 2 +- 3 files changed, 6 insertions(+), 92 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt diff --git a/buildSrc/src/main/kotlin/BuildExtensions.kt b/buildSrc/src/main/kotlin/BuildExtensions.kt index f7a11e3e04..3b8dcbfd62 100644 --- a/buildSrc/src/main/kotlin/BuildExtensions.kt +++ b/buildSrc/src/main/kotlin/BuildExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2025, TeamDev. All rights reserved. + * Copyright 2026, 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. @@ -33,7 +33,6 @@ import io.spine.dependency.build.PluginPublishPlugin import io.spine.dependency.lib.Protobuf import io.spine.dependency.local.Compiler import io.spine.dependency.local.CoreJvmCompiler -import io.spine.dependency.local.McJava import io.spine.dependency.local.ProtoTap import io.spine.dependency.test.Kotest import io.spine.dependency.test.Kover @@ -88,12 +87,6 @@ val ScriptHandlerScope.protobuf: Protobuf val ScriptHandlerScope.coreJvmCompiler: CoreJvmCompiler get() = CoreJvmCompiler -/** - * Shortcut to [McJava] dependency object for using under `buildScript`. - */ -val ScriptHandlerScope.mcJava: McJava - get() = McJava - /** * Shortcut to [CoreJvmCompiler] dependency object. * @@ -112,10 +105,10 @@ val ScriptHandlerScope.spineCompiler: Compiler /** * Shortcut to [Compiler] dependency object. * - * This plugin is published at Gradle Plugin Portal. - * But when used in a pair with [mcJava], it cannot be applied directly to a project. - * It is so, because [mcJava] uses [spineCompiler] as its dependency. - * And the buildscript's classpath ends up with both of them. + * This plugin is published at Gradle Plugin Portal. But when another plugin that + * depends on the Compiler is also on the buildscript's classpath, the Compiler + * cannot be applied directly to a project. In such a case, declare it here so that + * it is added to the classpath, then apply it by ID. */ val PluginDependenciesSpec.spineCompiler: Compiler get() = Compiler diff --git a/buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt b/buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt deleted file mode 100644 index 6ab0a95656..0000000000 --- a/buildSrc/src/main/kotlin/io/spine/dependency/local/McJava.kt +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2025, TeamDev. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Redistribution and use in source and/or binary forms, with or without - * modification, must retain the above copyright notice and the following - * disclaimer. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package io.spine.dependency.local - -/** - * Dependencies on Spine Model Compiler for Java. - * - * See [mc-java](https://github.com/SpineEventEngine/mc-java). - */ -@Suppress( - "MemberVisibilityCanBePrivate" /* `pluginLib()` is used by subprojects. */, - "ConstPropertyName", - "unused" -) -object McJava { - const val group = Spine.toolsGroup - - /** - * The version used to in the build classpath. - */ - const val dogfoodingVersion = "2.0.0-SNAPSHOT.320" - - /** - * The version to be used for integration tests. - */ - const val version = "2.0.0-SNAPSHOT.320" - - /** - * The ID of the Gradle plugin. - */ - const val pluginId = "io.spine.mc-java" - - /** - * The library with the [dogfoodingVersion]. - */ - val pluginLib = pluginLib(dogfoodingVersion) - - /** - * The library with the given [version]. - */ - fun pluginLib(version: String): String = "$group:spine-mc-java-plugins:$version:all" - - /** The artifact reference for forcing in configurations. */ - const val pluginsArtifact: String = "$group:spine-mc-java-plugins:$version" - - /** - * The `mc-java-base` artifact with the [version]. - */ - val base = base(version) - - /** - * The `mc-java-base` artifact with the given [version]. - */ - fun base(version: String): String = "$group:spine-mc-java-base:$version" -} diff --git a/config b/config index da2182487e..3f1143fca1 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit da2182487ef8143bef2ca7a3fa76ddbb0ceaa1ff +Subproject commit 3f1143fca1c8ae4b7e124b760d9c493e07d96552