From 3f382fbda5150bca173735a0a3bc594697da92da Mon Sep 17 00:00:00 2001 From: redcatbear Date: Tue, 9 Jun 2026 20:18:33 +0200 Subject: [PATCH 1/2] #40: Version update and gradle lock. --- README.md | 13 ++ build.gradle.kts | 55 ++++-- doc/changes/changes_0.8.0.md | 4 + .../45-gradle-lock-and-version-check.md | 174 ++++++++++++++++++ doc/design/architecture_decisions.md | 58 ++++++ doc/design/quality_requirements.md | 6 +- gradle.lockfile | 86 +++++++++ gradle.properties | 18 -- 8 files changed, 379 insertions(+), 35 deletions(-) create mode 100644 doc/changesets/45-gradle-lock-and-version-check.md create mode 100644 gradle.lockfile diff --git a/README.md b/README.md index 639f1ab..b17fa12 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,19 @@ To run the automated checks for the trace action and the project trace itself: ./gradlew check verifyPlugin ``` +To check for newer dependency, Gradle plugin, and Gradle wrapper versions: + +```sh +./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release +``` + +After intentionally changing dependency or Gradle plugin versions, refresh the +committed Gradle lock file: + +```sh +./gradlew --write-locks dependencies +``` + Example OFT files for manual testing are available under `examples/` in this project. For a guided live demonstration, use the script in [doc/demo/plugin-demo.md](doc/demo/plugin-demo.md) with the isolated example project in [doc/demo/example](doc/demo/example). diff --git a/build.gradle.kts b/build.gradle.kts index 600fa48..3561078 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,4 @@ +import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.api.tasks.bundling.Zip @@ -5,18 +6,27 @@ import org.gradle.jvm.toolchain.JavaLanguageVersion import org.gradle.testing.jacoco.plugins.JacocoTaskExtension import org.jetbrains.intellij.platform.gradle.TestFrameworkType +fun isNonStableVersion(version: String): Boolean { + val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase().contains(it) } + val stableVersion = "^[0-9,.v-]+(-r)?$".toRegex().matches(version) + return !stableKeyword && !stableVersion +} + // [bld->dsn~plugin-build-uses-intellij-platform-gradle-plugin~1] plugins { id("java") id("jacoco") + id("com.github.ben-manes.versions") version "0.54.0" id("com.diffplug.spotless") version "8.4.0" id("org.itsallcode.openfasttrace") version "3.1.1" id("org.jetbrains.intellij.platform") version "2.15.0" id("org.sonarqube") version "7.2.3.7755" } -group = providers.gradleProperty("group").get() -version = providers.gradleProperty("version").get() +val pluginVersion = providers.gradleProperty("version") + +group = "org.itsallcode.openfasttrace" +version = pluginVersion.get() java { toolchain { @@ -28,6 +38,11 @@ jacoco { toolVersion = "0.8.13" } +// [bld->dsn~gradle-dependency-maintenance-uses-locks-and-versions-plugin~1] +dependencyLocking { + lockAllConfigurations() +} + sonar { properties { property("sonar.organization", "itsallcode") @@ -59,22 +74,22 @@ repositories { } dependencies { - implementation("org.itsallcode.openfasttrace:openfasttrace:${providers.gradleProperty("openfasttraceVersion").get()}") + implementation("org.itsallcode.openfasttrace:openfasttrace:4.4.0") intellijPlatform { - intellijIdea(providers.gradleProperty("platformVersion")) + intellijIdea("2026.1") bundledPlugin("com.intellij.java") testFramework(TestFrameworkType.Platform) pluginVerifier() zipSigner() } - testImplementation(platform("org.junit:junit-bom:${providers.gradleProperty("junitBomVersion").get()}")) - testImplementation("junit:junit:${providers.gradleProperty("junit4Version").get()}") + testImplementation(platform("org.junit:junit-bom:5.14.1")) + testImplementation("junit:junit:4.13.2") testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.junit.platform:junit-platform-launcher") - testImplementation("org.hamcrest:hamcrest:${providers.gradleProperty("hamcrestVersion").get()}") - testImplementation("org.opentest4j:opentest4j:${providers.gradleProperty("opentest4jVersion").get()}") + testImplementation("org.hamcrest:hamcrest:3.0") + testImplementation("org.opentest4j:opentest4j:1.3.0") testRuntimeOnly("org.junit.vintage:junit-vintage-engine") } @@ -82,18 +97,18 @@ intellijPlatform { buildSearchableOptions = false pluginConfiguration { - id = providers.gradleProperty("pluginId") - name = providers.gradleProperty("pluginName") - version = providers.gradleProperty("version") + id = "org.itsallcode.openfasttrace-intellij-plugin" + name = "OpenFastTrace" + version = pluginVersion vendor { - name = providers.gradleProperty("pluginVendor") - email = providers.gradleProperty("pluginVendorEmail") - url = providers.gradleProperty("pluginVendorUrl") + name = "Itsallcode.org" + email = "opensource@itsallcode.org" + url = "https://itsallcode.org/" } ideaVersion { - sinceBuild = providers.gradleProperty("platformSinceBuild") + sinceBuild = "261" } } @@ -124,7 +139,15 @@ tasks { } named("buildPlugin") { - archiveBaseName.set(providers.gradleProperty("pluginName")) + archiveBaseName.set("OpenFastTrace") + } + + withType().configureEach { + revision = "release" + gradleReleaseChannel = "current" + rejectVersionIf { + isNonStableVersion(candidate.version) && !isNonStableVersion(currentVersion) + } } test { diff --git a/doc/changes/changes_0.8.0.md b/doc/changes/changes_0.8.0.md index 73a1f65..c46424f 100644 --- a/doc/changes/changes_0.8.0.md +++ b/doc/changes/changes_0.8.0.md @@ -21,3 +21,7 @@ The global `Tools | OpenFastTrace | Trace Project` action and new or previously ## Documentation #43: Add a use-case-centric plugin user guide + +## Build Maintenance + +#45: Add Gradle dependency locks and dependency version checks diff --git a/doc/changesets/45-gradle-lock-and-version-check.md b/doc/changesets/45-gradle-lock-and-version-check.md new file mode 100644 index 0000000..d1c6f85 --- /dev/null +++ b/doc/changesets/45-gradle-lock-and-version-check.md @@ -0,0 +1,174 @@ +# GH-45 Gradle lock and version check + +## Goal + +Make the Gradle build deterministic enough for SonarCloud by using committed +dependency locks, and add an on-demand Gradle version check that reports newer +dependency and plugin versions. + +This is repository build maintenance only. It must not change IntelliJ plugin +runtime behavior, user-facing requirements, or Java production code. + +## Scope + +In scope: + +* configure Gradle dependency locking for the project build +* generate and commit the Gradle lock files required by the chosen locking setup +* add `com.github.ben-manes.versions` as the minimal-effort Gradle plugin for + checking available dependency, plugin, and Gradle wrapper updates +* keep version declarations centralized and avoid dynamic dependency versions +* update developer documentation for lock maintenance and version checks +* keep CI build, tracing, packaging, and plugin verification compatible with the + new Gradle metadata + +Out of scope: + +* changing IntelliJ plugin runtime behavior or end-user IDE workflows +* changing `doc/system_requirements.md` +* broader dependency-management redesign beyond adding the Gradle Versions Plugin +* automatically upgrading dependencies or Gradle plugins +* adding Java production or test code +* changing SonarCloud quality profiles, quality gates, or project permissions + +## Design References + +* [System Requirements](../system_requirements.md) +* [Design Decisions](../design/architecture_decisions.md) +* [Quality Requirements](../design/quality_requirements.md) +* [Changeset Guidelines](README.md) + +## Strategy + +Treat GH-45 as a build configuration change. Prefer Gradle's built-in +dependency locking for deterministic dependency resolution, then commit only the +lock metadata that normal builds need. + +Use the Gradle Versions Plugin +(`com.github.ben-manes.versions`) for the version check instead of custom Gradle +logic. The plugin provides the `dependencyUpdates` task for dependency updates +and also checks for newer Gradle releases. As of 2026-06-09, the Gradle Plugin +Portal lists `0.54.0` as the latest version. + +Keep `dependencyUpdates` as an on-demand developer task, not part of the normal +`check` lifecycle, because available update results change over time and should +not make ordinary builds unstable. Configure it for the current release channel +and stable-version candidates if the default report is too noisy. Run it with +`--no-configuration-cache --no-parallel` on Gradle 9 because the plugin +documents that Gradle 9 parallel execution is incompatible with this task, and +the task is not clean with the project's default configuration-cache setting. + +The user explicitly approved using the Gradle Versions Plugin as the +minimal-effort dependency-update solution. Because this still adds a third-party +build plugin, document the decision if the dependency policy requires an +architecture decision for build plugins as well as runtime libraries. + +## Task List + +- [x] Create and checkout a new Git branch `refactoring/45-gradle-lock-and-version-check` + +### Requirements And Design + +- [x] Confirm that GH-45 does not require changes to `doc/system_requirements.md` + because it affects repository build maintenance, not plugin behavior +- [x] Confirm that the existing build-tool design decision + `dsn~plugin-build-uses-intellij-platform-gradle-plugin~1` still covers the + Gradle build setup after dependency locking is enabled +- [x] Record that the user approved `com.github.ben-manes.versions` as the + minimal-effort version-check plugin for GH-45 +- [x] Add the narrow build-tool decision + `dsn~gradle-dependency-maintenance-uses-locks-and-versions-plugin~1` to + `doc/design/architecture_decisions.md` +- [x] Update `doc/design/quality_requirements.md` so it documents dependency + locking and approved build-plugin scope +- [x] Proceed after the user requested plan execution without an additional + documentation-review stop + +### Build Integration + +- [x] Configure Gradle dependency locking in `build.gradle.kts` or + `settings.gradle.kts` for all relevant resolvable project configurations +- [x] Generate lock files with the Gradle-supported `--write-locks` flow and + include the resulting lock metadata in the changeset +- [x] Verify that normal Gradle invocations use the committed locks and report + lock drift instead of silently accepting changed dependency resolution +- [x] Add the Gradle Versions Plugin to `build.gradle.kts` with plugin ID + `com.github.ben-manes.versions` and the current approved plugin version + from the Gradle Plugin Portal +- [x] Configure the `dependencyUpdates` task so it reports stable available + updates for project dependencies, test dependencies, Gradle plugins, and + Gradle itself +- [x] Keep the `dependencyUpdates` task outside `check` and CI build gates unless + the user later requests update checks as a scheduled/reporting workflow +- [x] Inline build-only constants in `build.gradle.kts`, keep only the release + version in `gradle.properties`, and avoid dynamic versions +- [x] Keep generated version-report output under `build/` or another ignored + location so only source metadata and lock files are committed +- [x] Keep `.github/workflows/build.yml` and `.github/workflows/release.yml` + compatible with dependency locking and the standard build lifecycle + +### Update Developer Documentation + +- [x] Update the README development section with the command that checks latest + dependency and plugin versions: + `./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release` +- [x] Update the README development section with the command for refreshing + Gradle lock files after an intentional dependency or plugin version change + +### Verification + +- [x] Run the chosen Gradle lock generation command and confirm no unexpected + files outside Gradle lock metadata are produced +- [x] Run `./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release` + and confirm it reports dependency, plugin, and Gradle update information + without failing the normal build +- [x] Run `./gradlew --warning-mode=all traceRequirements` +- [x] Run `./gradlew --warning-mode=all check buildPlugin` +- [x] Run `./gradlew --warning-mode=all verifyPlugin` and record any remaining + pre-existing verifier findings if it is not green +- [x] Run `./gradlew --no-configuration-cache sonar -Dsonar.skip=true` locally + to verify Sonar task wiring, and rely on CI for a real SonarCloud upload + when no `SONAR_TOKEN` is available +- [x] Confirm no third-party runtime dependencies were added and that the only + added third-party artifact is the approved build plugin +- [x] Keep the OpenFastTrace trace clean for the requirement and design artifact + types in scope + +`./gradlew --write-locks dependencies` generated only `gradle.lockfile` as new +source-controlled lock metadata. + +`./gradlew dependencyInsight --dependency org.itsallcode.openfasttrace:openfasttrace --configuration runtimeClasspath` +shows Gradle selecting `4.4.0` with the reason `Dependency version enforced by +Dependency Locking`. + +`./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release` +passes and reports dependency updates, Gradle plugin updates, and the Gradle +`9.5.0` to `9.5.1` update. The task cannot determine latest versions for the +IntelliJ Platform pseudo-dependencies `bundledModule:intellij-platform-test-runtime`, +`bundledPlugin:com.intellij.java`, and `idea:idea`. + +`./gradlew --warning-mode=all traceRequirements` passes. + +`./gradlew --warning-mode=all check buildPlugin` passes. + +`./gradlew --warning-mode=all verifyPlugin` passes. The verifier reports the +existing experimental `BackgroundUpdateHighlightersUtil` class and method usage +in `OftHighlightingPass` for the checked IDEs, but reports the plugin as +compatible. + +`./gradlew --no-configuration-cache sonar -Dsonar.skip=true` passes and confirms +Sonar task wiring without requiring a `SONAR_TOKEN`. + +## Version And Changelog Update + +- [x] Check the current version mentioned in `gradle.properties` against the + latest GitHub release before making a version decision +- [x] Keep the plugin version unchanged unless the project release policy + requires a patch release for build-maintenance changes +- [x] If a changelog entry is needed, add GH-45 to the active release changelog + as a build/refactoring entry and update the release date to the + implementation date + +Current `gradle.properties` version is `0.8.0`; latest GitHub release is +`0.7.0` as of 2026-06-09. The version remains `0.8.0`, and GH-45 is added to +the active `0.8.0` changelog as build maintenance. diff --git a/doc/design/architecture_decisions.md b/doc/design/architecture_decisions.md index baa039d..b9b9a64 100644 --- a/doc/design/architecture_decisions.md +++ b/doc/design/architecture_decisions.md @@ -51,6 +51,64 @@ Needs: bld Tags: Build, Gradle +### How Does the Project Keep Gradle Dependency Metadata Predictable? + +The project needs predictable Gradle dependency resolution for static analysis +and reproducible local and CI builds. It also needs a lightweight way to check +whether newer dependency, build-plugin, or Gradle versions are available without +making ordinary builds fail when an update exists. + +This decision is architecture-relevant because it impacts: + +* build reproducibility +* dependency maintenance effort +* SonarCloud analysis compatibility +* the project's dependency-policy boundary for build plugins + +We considered the following alternatives: + +1. Use Gradle dependency verification metadata only. + + This would verify artifact integrity, but it would require reviewing and + maintaining checksums for each resolved artifact. The project explicitly does + not want that review burden at this stage. + +1. Use Gradle dependency locking and a custom version-check task. + + This would keep the dependency set predictable, but a custom version-check + task would add project-specific Gradle logic for behavior that already has a + maintained plugin solution. + +1. Use Gradle dependency locking and the Gradle Versions Plugin. + + This keeps normal dependency resolution locked through Gradle's built-in + mechanism and delegates update discovery to a maintained build plugin that + can be run on demand by maintainers. + +#### Gradle Dependency Maintenance Uses Locks And Versions Plugin +`dsn~gradle-dependency-maintenance-uses-locks-and-versions-plugin~1` + +The Gradle build uses dependency locking for predictable dependency resolution +and the Gradle Versions Plugin for on-demand dependency, build-plugin, and +Gradle wrapper update reports. + +Rationale: + +Gradle dependency locking satisfies the need for stable resolved dependency +versions without enabling full dependency verification metadata. The Gradle +Versions Plugin is an approved build-only dependency for GH-45 and avoids +custom version-check logic in the build script. + +Comment: + +The version-check task is informational and stays outside the standard `check` +lifecycle. Available updates change over time, so update discovery must not +make normal local or CI builds unstable. + +Needs: bld + +Tags: Build, Gradle, Dependencies, SonarCloud + ### How Does the Project Monitor Dependency Vulnerabilities? The project needs vulnerability monitoring for Gradle dependencies without making local and CI builds depend on an external vulnerability-audit service during every run. diff --git a/doc/design/quality_requirements.md b/doc/design/quality_requirements.md index 8b42286..f3ff460 100644 --- a/doc/design/quality_requirements.md +++ b/doc/design/quality_requirements.md @@ -55,7 +55,11 @@ The plugin uses the minimum set of dependencies required for: Additional libraries are not allowed by default. Any new third-party dependency requires an explicit design decision and approval before it is added to the build. -The Gradle dependency verification is disabled. Otherwise, we would have to review each dependency. Instead, we only use dependencies from the Central Repository. +The Gradle dependency verification is disabled. Otherwise, we would have to review each dependency. Runtime and test dependencies come from the Central Repository, while approved Gradle build plugins are resolved through the Gradle Plugin Portal. + +Gradle dependency locking is enabled for predictable dependency resolution in local and CI builds. Dependency locking is not a replacement for dependency verification; it only fixes the resolved dependency versions until maintainers intentionally refresh the lock metadata. + +Third-party build plugins follow the same approval rule as runtime libraries. Approved build plugins must stay limited to build maintenance concerns and must not add plugin runtime dependencies. ## Static Analysis And Security Gates diff --git a/gradle.lockfile b/gradle.lockfile new file mode 100644 index 0000000..80e2ba4 --- /dev/null +++ b/gradle.lockfile @@ -0,0 +1,86 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +bundledModule:intellij-platform-test-runtime:IU-261.22158.277=intellijPlatformTestRuntimeFixClasspath,intellijPlatformTestRuntimeFixClasspath_manualTestIde +bundledPlugin:com.intellij.java:IU-261.22158.277=compileClasspath,intellijPlatformBundledPlugins,intellijPlatformDependencies,intellijPlatformTestBundledPlugins,intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.fasterxml.jackson.core:jackson-annotations:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.fasterxml.jackson.core:jackson-core:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.fasterxml.jackson.core:jackson-databind:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.fasterxml.jackson.module:jackson-module-kotlin:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.fasterxml.jackson:jackson-bom:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.java:java-compiler-ant-tasks:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-compiler-instrumentation-util-java8:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-compiler-instrumentation-util:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-gui-forms-compiler:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-gui-forms-rt:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.platform:core-nio-fs:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:test-framework-common:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:test-framework-core:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:test-framework-team-city:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:test-framework:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:todo:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:util-jdom:261.22158.277=intellijPlatformJavaCompiler +com.jetbrains.intellij.tools:tests-bootstrap:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jgoodies:forms:1.1-preview=intellijPlatformJavaCompiler +idea:idea:2026.1=compileClasspath,intellijPlatformClasspath,intellijPlatformClasspath_manualTestIde,intellijPlatformDependency,intellijPlatformDependencyArchive,intellijPlatformDependencyArchive_manualTestIde,intellijPlatformDependency_manualTestIde,intellijPlatformTestClasspath,intellijPlatformTestClasspath_manualTestIde,testCompileClasspath +idea:idea:2026.1.3=intellijPluginVerifierIdes,intellijPluginVerifierIdesDependency +jaxen:jaxen:1.2.0=intellijPlatformJavaCompiler +junit:junit:4.13.2=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +one.util:streamex:0.8.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.apache.httpcomponents:httpclient:4.5.14=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +org.apache.httpcomponents:httpcore:4.4.16=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +org.apache.httpcomponents:httpmime:4.5.14=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath +org.assertj:assertj-core:4.0.0-M1=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.hamcrest:hamcrest-core:1.3=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.hamcrest:hamcrest:2.2=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.hamcrest:hamcrest:3.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-api:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-core:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-exporter-common:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-exporter-specobject:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-lightweightmarkup:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-markdown:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-restructuredtext:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-specobject:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-tag:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-xmlparser:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-zip:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-aspec:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-html:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-plaintext:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.jacoco:org.jacoco.agent:0.8.13=jacocoAgent,jacocoAnt +org.jacoco:org.jacoco.ant:0.8.13=jacocoAnt +org.jacoco:org.jacoco.core:0.8.13=jacocoAnt +org.jacoco:org.jacoco.report:0.8.13=jacocoAnt +org.jetbrains.compose.hot-reload:hot-reload-agent:1.1.0-alpha03=composeHotReloadAgent +org.jetbrains.intellij.deps:asm-all:9.6.1=intellijPlatformJavaCompiler +org.jetbrains.intellij.plugins:verifier-cli:1.405=intellijPluginVerifier +org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.4.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.9.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.jetbrains.runtime:jbr-api:1.9.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +org.jetbrains:annotations:26.0.2=intellijPlatformJavaCompiler,intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.jetbrains:marketplace-zip-signer:0.1.43=marketplaceZipSigner +org.junit.jupiter:junit-jupiter-api:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.jupiter:junit-jupiter-api:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.jupiter:junit-jupiter-engine:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.platform:junit-platform-commons:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.platform:junit-platform-engine:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-launcher:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.platform:junit-platform-launcher:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.vintage:junit-vintage-engine:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit.vintage:junit-vintage-engine:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath +org.junit:junit-bom:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.junit:junit-bom:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.opentest4j:opentest4j:1.3.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.ow2.asm:asm-analysis:9.8=intellijPlatformTestClasspath,intellijPlatformTestDependencies +org.ow2.asm:asm-commons:9.8=jacocoAnt +org.ow2.asm:asm-tree:9.8=intellijPlatformTestClasspath,intellijPlatformTestDependencies,jacocoAnt +org.ow2.asm:asm:9.8=intellijPlatformTestClasspath,intellijPlatformTestDependencies,jacocoAnt +empty=annotationProcessor,intellijPlatformBundledModules,intellijPlatformLocal,intellijPlatformLocal_manualTestIde,intellijPlatformPlugin,intellijPlatformPluginComposedModule,intellijPlatformPluginDependency,intellijPlatformPluginLocal,intellijPlatformPluginModule,intellijPlatformTestBundledModules,intellijPlatformTestBundledModules_manualTestIde,intellijPlatformTestBundledPlugins_manualTestIde,intellijPlatformTestDependencies_manualTestIde,intellijPlatformTestPlugin,intellijPlatformTestPluginDependency,intellijPlatformTestPluginDependency_manualTestIde,intellijPlatformTestPluginLocal,intellijPlatformTestPluginLocal_manualTestIde,intellijPlatformTestPlugin_manualTestIde,intellijPluginVerifierIdesLocalInstance,jetbrainsRuntime,jetbrainsRuntimeDependency,jetbrainsRuntimeLocalInstance,jetbrainsRuntime_manualTestIde,testAnnotationProcessor diff --git a/gradle.properties b/gradle.properties index 43eefca..c9bd9c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,22 +1,4 @@ -group=org.itsallcode.openfasttrace version=0.8.0 -platformType=IC -platformVersion=2026.1 -platformSinceBuild=261 -openfasttraceVersion=4.4.0 -junitBomVersion=5.14.1 -junit4Version=4.13.2 -hamcrestVersion=3.0 -opentest4jVersion=1.3.0 - -pluginId=org.itsallcode.openfasttrace-intellij-plugin -pluginName=OpenFastTrace -pluginVendor=Itsallcode.org -pluginVendorEmail=opensource@itsallcode.org -pluginVendorUrl=https://itsallcode.org/ - -userGuideUrl=https://github.com/itsallcode/openfasttrace/blob/main/doc/user_guide.md - org.gradle.configuration-cache=true org.gradle.jvmargs=-Xmx2g -Dfile.encoding=UTF-8 From 0474162298e6a975bccaea9ba68acca119482021 Mon Sep 17 00:00:00 2001 From: redcatbear Date: Tue, 9 Jun 2026 20:36:27 +0200 Subject: [PATCH 2/2] #45: Updated to OFT 4.5.0. --- build.gradle.kts | 14 +-- doc/changes/changes_0.8.0.md | 2 +- .../45-gradle-lock-and-version-check.md | 64 +++++++++++--- gradle.lockfile | 82 +++++++++--------- gradle/wrapper/gradle-wrapper.jar | Bin 48966 -> 48462 bytes gradle/wrapper/gradle-wrapper.properties | 7 +- gradlew | 2 +- gradlew.bat | 31 +++---- .../intellijplugin/OftSupportedFiles.java | 1 + src/main/resources/META-INF/plugin.xml | 3 + .../intellijplugin/OftSupportedFilesTest.java | 3 +- .../OftCoverageTagCompletionTest.java | 9 ++ 12 files changed, 134 insertions(+), 84 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3561078..694606c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,10 +17,10 @@ plugins { id("java") id("jacoco") id("com.github.ben-manes.versions") version "0.54.0" - id("com.diffplug.spotless") version "8.4.0" - id("org.itsallcode.openfasttrace") version "3.1.1" - id("org.jetbrains.intellij.platform") version "2.15.0" - id("org.sonarqube") version "7.2.3.7755" + id("com.diffplug.spotless") version "8.6.0" + id("org.itsallcode.openfasttrace") version "3.1.2" + id("org.jetbrains.intellij.platform") version "2.16.0" + id("org.sonarqube") version "7.3.1.8318" } val pluginVersion = providers.gradleProperty("version") @@ -74,17 +74,17 @@ repositories { } dependencies { - implementation("org.itsallcode.openfasttrace:openfasttrace:4.4.0") + implementation("org.itsallcode.openfasttrace:openfasttrace:4.5.0") intellijPlatform { - intellijIdea("2026.1") + intellijIdea("2026.1.3") bundledPlugin("com.intellij.java") testFramework(TestFrameworkType.Platform) pluginVerifier() zipSigner() } - testImplementation(platform("org.junit:junit-bom:5.14.1")) + testImplementation(platform("org.junit:junit-bom:6.1.0")) testImplementation("junit:junit:4.13.2") testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.junit.platform:junit-platform-launcher") diff --git a/doc/changes/changes_0.8.0.md b/doc/changes/changes_0.8.0.md index c46424f..fcd76d3 100644 --- a/doc/changes/changes_0.8.0.md +++ b/doc/changes/changes_0.8.0.md @@ -24,4 +24,4 @@ The global `Tools | OpenFastTrace | Trace Project` action and new or previously ## Build Maintenance -#45: Add Gradle dependency locks and dependency version checks +#45: Add Gradle dependency locks, dependency version checks, and dependency updates diff --git a/doc/changesets/45-gradle-lock-and-version-check.md b/doc/changesets/45-gradle-lock-and-version-check.md index d1c6f85..59075a5 100644 --- a/doc/changesets/45-gradle-lock-and-version-check.md +++ b/doc/changesets/45-gradle-lock-and-version-check.md @@ -4,10 +4,14 @@ Make the Gradle build deterministic enough for SonarCloud by using committed dependency locks, and add an on-demand Gradle version check that reports newer -dependency and plugin versions. +dependency and plugin versions. After adding the update check, refresh the +project's dependencies, Gradle plugins, IntelliJ Platform target, and Gradle +wrapper to the latest resolvable stable releases. This is repository build maintenance only. It must not change IntelliJ plugin -runtime behavior, user-facing requirements, or Java production code. +runtime behavior or user-facing requirements except where a dependency update +requires keeping plugin support aligned with the upstream OpenFastTrace +contract. ## Scope @@ -17,6 +21,9 @@ In scope: * generate and commit the Gradle lock files required by the chosen locking setup * add `com.github.ben-manes.versions` as the minimal-effort Gradle plugin for checking available dependency, plugin, and Gradle wrapper updates +* update all project dependencies, Gradle plugins, the IntelliJ Platform target, + and the Gradle wrapper to the latest resolvable stable releases +* refresh the committed lock metadata after intentional version changes * keep version declarations centralized and avoid dynamic dependency versions * update developer documentation for lock maintenance and version checks * keep CI build, tracing, packaging, and plugin verification compatible with the @@ -27,8 +34,6 @@ Out of scope: * changing IntelliJ plugin runtime behavior or end-user IDE workflows * changing `doc/system_requirements.md` * broader dependency-management redesign beyond adding the Gradle Versions Plugin -* automatically upgrading dependencies or Gradle plugins -* adding Java production or test code * changing SonarCloud quality profiles, quality gates, or project permissions ## Design References @@ -63,6 +68,13 @@ minimal-effort dependency-update solution. Because this still adds a third-party build plugin, document the decision if the dependency policy requires an architecture decision for build plugins as well as runtime libraries. +The user later requested updating all dependencies to the latest releases. Use +the `dependencyUpdates` report as the source for version candidates, update only +stable releases, and keep locked dependency resolution deterministic. If a +reported version is not reachable through the project's Gradle coordinates, +record that as an explicit unresolved update instead of forcing an invalid +coordinate. + ## Task List - [x] Create and checkout a new Git branch `refactoring/45-gradle-lock-and-version-check` @@ -102,6 +114,14 @@ architecture decision for build plugins as well as runtime libraries. the user later requests update checks as a scheduled/reporting workflow - [x] Inline build-only constants in `build.gradle.kts`, keep only the release version in `gradle.properties`, and avoid dynamic versions +- [x] Update project dependencies, Gradle plugins, and the Gradle wrapper to the + latest stable versions reported by `dependencyUpdates` when the + corresponding Gradle coordinates are resolvable +- [x] Update the IntelliJ Platform target to the latest resolvable IDEA release + available through the IntelliJ Platform Gradle Plugin repositories +- [x] Keep coverage-tag file-extension support aligned with the default + extensions of the updated OpenFastTrace Tag Importer, including completion + registration for newly supported XML coverage-tag files - [x] Keep generated version-report output under `build/` or another ignored location so only source metadata and lock files are committed - [x] Keep `.github/workflows/build.yml` and `.github/workflows/release.yml` @@ -133,20 +153,44 @@ architecture decision for build plugins as well as runtime libraries. added third-party artifact is the approved build plugin - [x] Keep the OpenFastTrace trace clean for the requirement and design artifact types in scope - -`./gradlew --write-locks dependencies` generated only `gradle.lockfile` as new -source-controlled lock metadata. +- [x] After the dependency refresh, rerun `./gradlew --write-locks dependencies` + and confirm the lock file matches the updated dependency graph +- [x] After the dependency refresh, rerun `./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release` + and record any remaining unavailable or unresolved update candidates +- [x] After the dependency refresh, rerun `./gradlew --warning-mode=all check buildPlugin` +- [x] After the dependency refresh, rerun `./gradlew --warning-mode=all verifyPlugin` +- [x] After the dependency refresh, rerun `./gradlew --no-configuration-cache sonar -Dsonar.skip=true` + +`./gradlew --write-locks dependencies` generated and refreshed `gradle.lockfile` +as source-controlled lock metadata. After the dependency refresh, the lock file +records OpenFastTrace `4.5.0`, IntelliJ IDEA `2026.1.3` / `IU-261.25134.95`, +JUnit `6.1.0`, and the updated Gradle plugin dependency graph. + +`./gradlew wrapper --gradle-version 9.5.1` updated the Gradle wrapper +distribution URL, wrapper jar, and wrapper scripts. `./gradlew dependencyInsight --dependency org.itsallcode.openfasttrace:openfasttrace --configuration runtimeClasspath` -shows Gradle selecting `4.4.0` with the reason `Dependency version enforced by +shows Gradle selecting `4.5.0` with the reason `Dependency version enforced by Dependency Locking`. `./gradlew --no-configuration-cache --no-parallel dependencyUpdates -Drevision=release` -passes and reports dependency updates, Gradle plugin updates, and the Gradle -`9.5.0` to `9.5.1` update. The task cannot determine latest versions for the +passes after the refresh. It reports the declared project dependencies, Gradle +plugins, and Gradle `9.5.1` wrapper as up to date, except for the IntelliJ +Platform `test-framework` artifact where it reports `261.25134.95` to +`262.7132.36`. Attempting to move the project target to `intellijIdea("2026.2")` +failed because `idea:idea:2026.2` is not resolvable from the configured +IntelliJ Platform repositories, so the build remains on the latest resolvable +IDEA product coordinate `2026.1.3`. The task still cannot determine latest +versions for the IntelliJ Platform pseudo-dependencies `bundledModule:intellij-platform-test-runtime`, `bundledPlugin:com.intellij.java`, and `idea:idea`. +Updating OpenFastTrace to `4.5.0` added `xml` and `fxml` to the upstream Tag +Importer's default extensions. The plugin's supported coverage-tag file +extension list and its upstream-extension alignment test now include those +extensions. XML coverage-tag completion is also registered in `plugin.xml` and +covered by `OftCoverageTagCompletionTest`. + `./gradlew --warning-mode=all traceRequirements` passes. `./gradlew --warning-mode=all check buildPlugin` passes. diff --git a/gradle.lockfile b/gradle.lockfile index 80e2ba4..605d7b6 100644 --- a/gradle.lockfile +++ b/gradle.lockfile @@ -1,29 +1,28 @@ # This is a Gradle generated file for dependency locking. # Manual edits can break the build and are not advised. # This file is expected to be part of source control. -bundledModule:intellij-platform-test-runtime:IU-261.22158.277=intellijPlatformTestRuntimeFixClasspath,intellijPlatformTestRuntimeFixClasspath_manualTestIde -bundledPlugin:com.intellij.java:IU-261.22158.277=compileClasspath,intellijPlatformBundledPlugins,intellijPlatformDependencies,intellijPlatformTestBundledPlugins,intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +bundledModule:intellij-platform-test-runtime:IU-261.25134.95=intellijPlatformTestRuntimeFixClasspath,intellijPlatformTestRuntimeFixClasspath_manualTestIde +bundledPlugin:com.intellij.java:IU-261.25134.95=compileClasspath,intellijPlatformBundledPlugins,intellijPlatformDependencies,intellijPlatformTestBundledPlugins,intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath com.fasterxml.jackson.core:jackson-annotations:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath com.fasterxml.jackson.core:jackson-core:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath com.fasterxml.jackson.core:jackson-databind:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath com.fasterxml.jackson.module:jackson-module-kotlin:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath com.fasterxml.jackson:jackson-bom:2.19.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath -com.jetbrains.intellij.java:java-compiler-ant-tasks:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.java:java-compiler-instrumentation-util-java8:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.java:java-compiler-instrumentation-util:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.java:java-gui-forms-compiler:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.java:java-gui-forms-rt:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.platform:core-nio-fs:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies -com.jetbrains.intellij.platform:test-framework-common:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath -com.jetbrains.intellij.platform:test-framework-core:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath -com.jetbrains.intellij.platform:test-framework-team-city:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies -com.jetbrains.intellij.platform:test-framework:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath -com.jetbrains.intellij.platform:todo:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies -com.jetbrains.intellij.platform:util-jdom:261.22158.277=intellijPlatformJavaCompiler -com.jetbrains.intellij.tools:tests-bootstrap:261.22158.277=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.java:java-compiler-ant-tasks:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-compiler-instrumentation-util-java8:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-compiler-instrumentation-util:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-gui-forms-compiler:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.java:java-gui-forms-rt:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.platform:core-nio-fs:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:test-framework-common:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:test-framework-core:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:test-framework-team-city:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:test-framework:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath +com.jetbrains.intellij.platform:todo:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies +com.jetbrains.intellij.platform:util-jdom:261.25134.95=intellijPlatformJavaCompiler +com.jetbrains.intellij.tools:tests-bootstrap:261.25134.95=intellijPlatformTestClasspath,intellijPlatformTestDependencies com.jgoodies:forms:1.1-preview=intellijPlatformJavaCompiler -idea:idea:2026.1=compileClasspath,intellijPlatformClasspath,intellijPlatformClasspath_manualTestIde,intellijPlatformDependency,intellijPlatformDependencyArchive,intellijPlatformDependencyArchive_manualTestIde,intellijPlatformDependency_manualTestIde,intellijPlatformTestClasspath,intellijPlatformTestClasspath_manualTestIde,testCompileClasspath -idea:idea:2026.1.3=intellijPluginVerifierIdes,intellijPluginVerifierIdesDependency +idea:idea:2026.1.3=compileClasspath,intellijPlatformClasspath,intellijPlatformClasspath_manualTestIde,intellijPlatformDependency,intellijPlatformDependencyArchive,intellijPlatformDependencyArchive_manualTestIde,intellijPlatformDependency_manualTestIde,intellijPlatformTestClasspath,intellijPlatformTestClasspath_manualTestIde,intellijPluginVerifierIdes,intellijPluginVerifierIdesDependency,testCompileClasspath jaxen:jaxen:1.2.0=intellijPlatformJavaCompiler junit:junit:4.13.2=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath one.util:streamex:0.8.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies @@ -35,21 +34,21 @@ org.assertj:assertj-core:4.0.0-M1=intellijPlatformTestClasspath,intellijPlatform org.hamcrest:hamcrest-core:1.3=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.hamcrest:hamcrest:2.2=intellijPlatformTestClasspath,intellijPlatformTestDependencies org.hamcrest:hamcrest:3.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-api:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-core:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-exporter-common:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-exporter-specobject:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-lightweightmarkup:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-markdown:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-restructuredtext:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-specobject:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-tag:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-xmlparser:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-importer-zip:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-reporter-aspec:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-reporter-html:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace-reporter-plaintext:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.itsallcode.openfasttrace:openfasttrace:4.4.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-api:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-core:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-exporter-common:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-exporter-specobject:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-lightweightmarkup:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-markdown:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-restructuredtext:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-specobject:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-tag:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-xmlparser:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-importer-zip:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-aspec:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-html:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace-reporter-plaintext:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath +org.itsallcode.openfasttrace:openfasttrace:4.5.0=compileClasspath,intellijPlatformComposedJar,intellijPlatformRuntimeClasspath,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.jacoco:org.jacoco.agent:0.8.13=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.13=jacocoAnt org.jacoco:org.jacoco.core:0.8.13=jacocoAnt @@ -62,22 +61,23 @@ org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.9.0=intellijPlatformTestC org.jetbrains.runtime:jbr-api:1.9.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,testCompileClasspath org.jetbrains:annotations:26.0.2=intellijPlatformJavaCompiler,intellijPlatformTestClasspath,intellijPlatformTestDependencies org.jetbrains:marketplace-zip-signer:0.1.43=marketplaceZipSigner +org.jspecify:jspecify:1.0.0=testCompileClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.jupiter:junit-jupiter-api:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.jupiter:junit-jupiter-engine:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath -org.junit.jupiter:junit-jupiter-params:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath -org.junit.jupiter:junit-jupiter:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.platform:junit-platform-commons:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-commons:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.platform:junit-platform-engine:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.platform:junit-platform-launcher:1.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-launcher:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.junit.vintage:junit-vintage-engine:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit.vintage:junit-vintage-engine:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath +org.junit.vintage:junit-vintage-engine:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testRuntimeClasspath org.junit:junit-bom:5.13.4=intellijPlatformTestClasspath,intellijPlatformTestDependencies -org.junit:junit-bom:5.14.1=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath +org.junit:junit-bom:6.1.0=intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=intellijPlatformTestClasspath,intellijPlatformTestDependencies,intellijPlatformTestRuntimeClasspath,intellijPlatformTestRuntimeClasspath_manualTestIde,testCompileClasspath,testRuntimeClasspath org.ow2.asm:asm-analysis:9.8=intellijPlatformTestClasspath,intellijPlatformTestDependencies org.ow2.asm:asm-commons:9.8=jacocoAnt diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d997cfc60f4cff0e7451d19d49a82fa986695d07..b1b8ef56b44f16b14dc800fa8103a6d89abb526f 100644 GIT binary patch delta 39760 zcmXVX<6|9e({vi+geNu|+iq;Lv2FW=CpH_~Zfx7O8#Gqq^zH9{-Y?fbaLvr_?9PsS zLe9KG);pnsnwo2xi7~sprey3}qgMu0B@znDa&>Nqe=c%xjWdlqpbrT}IPS~b>_I&% zA287HK|$@#zWWDsgCP2NFW9`+?JUNDy*MsmOutN-aJpvAEnMxz3)pei86*w_@iD*1 z=tZH8Q%z{l*zX;Nv3z+G&`QMeF0R6huq-N&9y?D4?S4vF1JI3W3l}F2QamCI_$4mz z{qyyQs6+NiBUSb8Pqg!J!+Xh*NXmmPdRL$trm+cBH#T2jQ(0-(f|f>yj$a@?K$R>QdLJo90QU}F(J zzWCPDO4K7t%Frz{75JB{KyoPgIM(049+s=sh_wSYs1( zeNPcVCM!L$@cL2j(4Nz~+{l3FQH;33g{>mX|0P%T5bFDwc|#AN^PJWcTl@Td{#B)j%DojhmcFSQk57S&@3V8y=r3UM3#7}g`5)7Js2J=0%)v7G5TbOQ~| zOXx^|cQTbWd#19gg5aeSg%CebRPLlL@3cvctTY~y6kynrE(@iFVNbKmHc>jz$=PVw+vi_x9E4M|G-+~9h@7R8~`*2 zEh=LMFcGA46bK14e%$P`$i>&@T9NRqMXsE=Dw`|55 zFQJCE-o*By?hZTgWDCwEXcMU@msdzws*D@V%uI}F3c42rB;ozI4>kEE47Xd4&>?s< zWk)m)zJ+Gq4%Un}{!EvM=05!zG)osYj2JdQ@sLnCDe~o3p1;&&i#>J|*Lo|aKv#6E9N9E=B zB!J}h3F6%os(87wCahsW-SKO-80b5aEeBLR)MM{R9Nh&OuTs{B`1rR*gGn%8XB^24 zIT=ux-qO?koB6SNOi`}PU49>gm}5%H4e7m*W!dfX3_8QJctu!o3L&H4k&3FLEBl3n z7v>g_vrsekC|f0a8xlnzNsqTRaEa+)0yZv$`xerlu-D@60Krw|I}l|B!Im+c9oN|= z1=TFs8e`0X-7tSwCE9(Up=6W|mM!X>87so0V3z5LV$hVd()C^xNUFJQmivSS*b=rQx)o>P?i z3=gD?qst_L+(f<7ps}2GJ#qr8)n}cY{877wriZC+@a_52BA1#@BXPN9oG_E zjuF6R+`6Nq%_1Y%c*EJYJ#(_EbnL7&QP+(jdUM(Q&Mm7m*C`xlDDx0w^YL93^m9Qc zJ;5j=vblR1{$a+^r8O+Y?+OWl2tX9DeFFv=DW@N9VMhAT*CYRB8+>f=dJT|-*YdoL zI())(E385?{H8*B7z#k3#_J%;B6s_saR4tj{Ce{XIgxi*b)gcLw!bB1BPLL#NAGm` zmf2*gBhe{+YAH>`oa-A@%4`k*?O}?sIS?QivOe(a8|)0^B?7@gW6q1*Q(G8Mzv;VF z)NeR@&IU+(%uo628TR?Xe==|IBt7ALs$2|Dg-XsKiuVYU*k(*l$9Reaq@QyO4@%GM zK27R2XG)3oiJ^2gSc2zC8!-p%>`b24uFs~N!N6CkPqItz`YcSdgv&w@$^!0?F;>(g z+U~bbUFu3lMM-?O0JglA98X&XxwX$_VYhkNeN3_IPc~_uS(c>z}@7=DOUnJc)L!vozIW}~&Y}`D3f$J|r?RJx>{yP^0{qdQ$)Bo+o zqL1$bdRxiq>l@~8dO*6C0Yx54K|}cIu1JTx67a|F;%0_lSBQll@2xOXier;)$>)y; zcD;=eC1%fhw8pe%JFu4)N%*{enJ?|zEtQ35D%e&X&_o^hpy9b%h_rdRzZ~dusp%)@ZzDuj{Y%m4*iVa6J~h{^ebF^8V}a=@WjB2OF!) z=jHB4%SlL)kDqEWM*klpKL!vk%1Djb28;V@y=r1{Dq8X80A>e;7f%6y;&W((65o$v zpdHDgf>db8*{!syk`$mqETRaNaB*|YwiWAWl&w@In7u$MPC9L=EfHgYOZBi=5n;1{ zabZ&@uDMA9!-Vcx6blpPQ-t1hbl4P3iz#5XepqwZlFK4tyTzg7TMaT(RiY|fa?@!g zGA21y_`X;X)C8Sd1nB6XSAWJN)YobY)hmIVz8edv9jeUd^hx(|fh0ntb4A32{u^$k z2;Snn#WF!apA|2ZP9VpMgRaUq_qURmkug*2_<kc z!J;(Y6#|SF0r%;j*IH2R_4>$`HNNJat-vxzbpgueyK;km{|ZJx#acyv7whQSo|K@6 zbsJpsa(N#yvPOAY=Nref3WetvWPGl1edR$5yTneYYI*u)^LWc7@?UhP4pS0yOKOKT zFK8V097I8nCZ&amkL4#dDAUD19yZ7a1xv4Zi10l2j)E=a(CMik@X_`hf=4m)oeD$r?87dr=FI>0MDT$R#PSvu9gemd5OcvUV zFXya&|p~1?a9;=ns9pFY$xu-o#bOVi%<^)MQiQM*D41Zc-o)^)S7nz<@zUk20 zcEl!$s6NO`>;H5&F5r)7X_gC%CD7(z@Cq0uYtchj)ddCc9*6 zHG`wK;0LIhoXQeEr#``e-+pDv5UVAau^pa&n;k}7H~I>()V@$j378Ts&q*lnOj^UM z=^Uvs%0SPfZevqTW$lGB`^FkFt7;~g9k%ZE!nMh(5EnJuFkt7*YPwdqEBknlSGbR) z`gU?FL0n?LUq9m_o85ecjEHbD`5fhTU3F39_YK71r@xSSQy8p3Pj04l+sKe8UN~tM zhmRkP`A54{M*Z$JS@2oGuL^dzua!5M=#aNyAB)%Q{C3+$uRnL-;SZ%N&MGQq_UU9s zZGT0_7P+F4&e}ok=vutCDVW}FyE$W*C=CC;I(uUA?6&H;A@mME%lNWADvu4r4}Rjd za35sJqZYDy>-w5VZtVVxiTW|UjqYVfSy|9Q_s0V~zvf`G9wDf?)U8YVb0fZ$DvE9; z-m{lgqScyN&!@NF@xu$V*Yv_Zv8fby#`8%3fotcH?pqQDRM?TZD?(24NmrGhpkE1F zVz$z)Oxi_)5FJUju9^R%Wm3_=ADZ%CVa1@kOTB&~62z_L3CrNtyTrX3KXNbnJWOJ0 ziin!`ouge9SuH0)%%~h;!=6B*=<@hSCL>QPlqarPV@EHPH*(jt-My^AeoqLcMKZ#f z$zJI*w%QZX?-!HgcT90TL5I`#R#_7EG-)MC-fnSIhlvEyr*Vn4j&;|lUL4qrsK}rd z!4*HC5>x)Q64eYWqUDkSSodAC@M0JKYQ%SIwOPEv`{s$n3*pR>z1yAq#+r_u z*rR?(-TP~!q(*S9zxZv_s|&tbveIYQfg)%xFfc9c@lzZ0yceI_nGuL#sKyGn||%zP!^ z-X-~Zja=v*Deu2exVT_Qu^-&wL1HZD2ommm@EpiXe}kd>OOQ&UH+}gB0+0F?-%it#F!fdbTOCF#I~k0I3c-V-g+W=etAMi@!~jv3hnMHrK#`0 zk5~TA|MQiHcJN{v!J}*(v2E;X>YL)Zg4d7ix_W-g^{l!E@*VQ1^NVSQmi@f7I8^O$ z5)*16Nx}0*k@ea1{_nGz?I+4FpfCRw;cq@8y#{a)5PYZ*5Xy2;(3r{a5?IOaWU`=S zd!>JtYxHk=e@7}gi^LFhQ?LiBIbt~yZY+j^JX#DpuD9pvj(h4K4{Lr5)1#1QJimg- znIW722;r35CO24Q1ktRAt=!Mq>+D?Lt69Tc5QH{({KnYvTH-Kg=U^o+p{1u#*S@<{ zH)z*gkhn95k zQO_FT_#_Zds1lyliV^9iM=O3R8{XAP9z%okLVzTPguIB|`T7Ql8?piLDWJ-2%Qb2P zhAM6&v|mPc{Azz}?t5x)T8(_j4o`$X$!%8=ADebieI1;$9udGs1moFAjexGQ7|3T6 zP*o8J?_Lud-VjjHG-*F`>9?PS2K5gq1Mjd0>u;O7N<_j+Mf)?rkWmsbM%l&#Cyu(o z#l~GfmU+#qd-prLuAI-7vYZz-m+!bjOavk(jzyaT7crme#QQO2{D>EGCGksDRGqO; za7Q3ta01@Y-pLS@R;q^&r9iZ8()Z}nNgjgei+)=ipA>KXUHD9#kGfD;6*>QBN<~EuC$iK?WmH zl`-ec^w@NwYMxywt;Eho@@p=cN!*3@FQl)pZ8|lN&X;N<*@J#xv;MWT;+mI(xY85l z?}?Nb@}k9BZ>bHK!l7G^|6$FBtVT}mpT|o7KabT(sRt6#-6+v3(F;`%21Cn1i3fwm z-1zNqJX*~>qR}W&57?i@kkiG1Bz@s*x%MKHRA&y2>~A^OekW{}0e@d^k@_gH@r3fS ztILEcd26qcsOx4bUu!d!9}E4Bbhg-|<1BFQgPmv@`t?OdAU!#|Ngw=M%{qTyFtzF> zDx(6Xk3n#mXSVRHLY)0-L#Y+?f47s&(f6?1xQ^8b2i-ywN=?yxXo}?;;FV(KV~U%) zc+`bCgIGhkqNpmOS4*jIOQRR0@smy%6PFm-+tr)wua2~2XeUePkM=f#@?2k`($mMl zqk;wbxnwGfFPTylVn09g2J&ln&}bI#HP~DMu^@wfH#n(lqg}+4pC<~V57@Xn;jE+@A2QAcOeC-^rji$Un0& zFd!)YV!!qj_XaEhMUVF{FQ4&rpm3~|vJ37B-l>C`+zi=Bk~N8HWV^ag2vK|I(lm{O zdSaVi9iihR)X6MmmZ(ut9PheE$%fkH6&%n?~gB*dZXhhtGRQ8K^Dm;&k z2MPHO*cb_#jH1D^5wa?}=u1$o<5y;fE9d&_JLRepAo#z*Y9++aU*5~3oZ)R8;Yr>{ zuBQcNr|LGd@*r;Ta}k~c+#h*+0ADk*lNCd{Nq@k0il`oysGph@40cIJdW%KPVMMbx z8M74~ZE3b6gZ`A3GhD)&V;^gS7ktr>cL1!%dceOmd784U#+JA}ceH%TnPbv9to+ob zFU-e>pYX56AJSYGD+>RQh` zv@SZntx^5R>-!^=L06!Hql@}4Ae*66VZ`eE9_xp7@QvDi_jFx&OmM^P0scyWm;dDC zxtw>nGm|;3qu2Mo#S*yDi;W-!ZHBBI0iobgB)aq)OhSgiS7L#sayk>N{eHU<#@wl(b0)X*Ow8ZQ2AiqSbsY<`h~RDzk~r!1rSv zWMkO8(z3uYi23+$Aii8&68ZHL0+iz8S#S$AMVZWQc_sKX^W*JfG~E&6s%YkB|M^+s zzGh{AB+;pJqs8K(DbvC$&T(C!NkGf9tCrLNQTOKCoOvEx2WTE=M1{o((!O)_^4k)} z?h?_}xn?ohP&b@zmrO&WckV918W*}q-nnNH+G>*?S@EyTA(SvcIri=Jt7dnF=diMG zI;`nfQ&$kj5O5M3&_O*7ruAOMMjmXz@60`PYVDMgooxq%>g_%i7@6+6-D2?kr{J)_R{+kN0r;WMaVylPq55VgBF}yc!LI zD(w+jSS{z+f`{vm!yt3dFm#L2aEbBT{FlhkbfppV}RxRCxys(W-+mtVm_xtu&Pqm{TO%K8Ys{8#ZctXj5kL zbMkqZ26E6RNK`WCmW9uhoX_wtzfaYCh$o_{jalY=iz*(aM-Qh8_+JzCrGo&UEIEk5 z1T?Eiz=}398cNBLfRW!9IawKAJkfZN*A!d{hn7kw5hy(zw0Uu5W_q)c=m|v7_$A^M zolE!F2X&*2b%>^uK;E$6Gji|$xlSzn{^5!W(OJ*5clGCw!27-gu3@rbmp}8Bw>>l0 z`Zqd;;`smzjDrp;i40)0|I|mD(yhDD6v)M~H=M4lgqpE zz+KxYhh+w?AGfYZAWtwknt1`yi|m~FoO00WH!j{!+>tz=Lsm)xJLc>B($)ObG(C2@ zW`H-tB`DBS1pX!u_nP60aSvS2oQ=j0NRthUZ9u7aJ4kH(eX|S+vtHBU2wk0H&GtIT z0r$93ja)`&Ov1^$fWdd>GVbgyUY0~|o*DV0j%1i>1>9`*M?r>x=l+bN1GefIeUi^h zWs=z!l0{y|TOOzqssFgY@+l`-^^f~A|8c*S$pi$CPmc?vWW^`=w^N9SY~Su?Kzf_s z+AbU!3wZ{7&J`OSp#Im5%rHveQ(8a&WcRd~`N8h`^!a&zj}zFLVgB6M`?v93rq0Dy z3%aEzUsu;hrB$@|*hj!)uE#*Aobca}1~ z8R%#l0n0am1#r%57djl-3U(^)lLWlt|YBB6J{WVXo|nKsz!V+0qlBQA_pfQDKk z^Y!0t+@-W{O#;-!zOdsRsT5CYmwFDdH z)cO%BD*!TvX_{nr18uGxi9hm&Aj7XEQ7_L$Xt-i+Rx6AWdW&xTq*^}(;lq;FN6RwQ6w?YBnk>bjWMC9 z95nicqa-knC3I$S**_R6i+lR)s5%sP5M5&}lWOUr<6a`1-+hz+N)h_HKrp6=2U`U9 zO>Y7P{AXxe&TzX%aO$^Y_p6nSX-Z~K`UT3qKe$ETEa~P;$Wa**3{5KTw%hosMZK?9 zB*p1axN-J3Eod^1&KWmQvOrH8z!InyyXG4C6V(+hZ}_AlKLlYm>$^dZ zCA&aE!s|e~ZGa{95NyoHrlqltqkHwcsng71a!b3F=4x&({fLv%ympl?yD`{CGZCu; zMT;hiYq@wU_4l2@qP{W0~3w_ug*fKbacUYSwSrHY`QZ{v^7fNOa}kgUw4T^np)u13-LmbXlQ{^8d-;{K4fZ)_-=HU zwi|g{{2%{0mQgg0u|6l7`R@A}bamr4o@5=(8pV3~5XgXk`wnHnz+Wpo)@W1no)N~v z?qcR~I_JfkvlU?-Dif;rcURs~Fy^Q){88Jj7AA*`)xNhQPf0}mEnqgilP;?r5V z?wLeS$KNcbPfX%$d9WKB zn)6^mj7&;-h$<_IzAP&YD(Y!|X>Bi4hB;w*yWJ!XB>`k8V&6T(|I`ng2g>UV8UkVg z9wHf1g5Y2N1ehGxik=MMMhEGu0WC2D3^3N}p*d7An^SNlNJ)wV7skS|X|Soj*j97M z3a1?@Xs=zAb`nUIsg*5)RQ?9G@`#CKS)Xe#^L;>dU(B9LWaWA$8!eb^9GmR^w45Dv z-MP1)O~3`Kv83Qc9ENfii8%!vD4(I?qf zuYt#ZOS9U_BFoaFMztSt<_L58Akm1Ggpp>roX*5a$lG2vGPwq??(IZ2QxefuH&PKE zC|LJ9JF7C6`jVKNaYEwt`FY7pAoG`Rf1SX;wd(}U54-@mWgf9UmivaT3NudPNh_O+ zS`!_CPBTozs9XhQ0R)f(IGKMU7h@4qkVJQPV;@gf6lV~jh-RVzJFnO-F?C;kfR$mr z5?fcL`m$Ix+x(P1bL*g^+kn%NQ_fj8<42d##qCAIcM_0Y)>0W(ZhKF#VPGE|N(-j{ zE0Nf7$%(gk-~#$309ri%EQLH5yd{r2XPcgs2ewxVB(X?wV#%qC`ZYBNYbtEAIqsEO zo%#ZHm}SA!I1d*@V#|1631k}U&Cy5M{v;JxA4z3o6>5AzAD;PCYt>e5W++qaVmAG* zehD(&Z?cvvT7Suhqc036N(_YajHr-pkd_M~Hjfd&qH1^W z?hsIio(X#8P*%Xg#cPp->@bFF6p(^wJS0AXZr{xJ#GY;e{1Xc2NDodi$BEKjC>{1E z80Nhq2k8gU{@2JAWEr6b?TX+q}pdO*Vh2+4pt=jNC*w>$W2Vv{t$N})!` zgkyo#v`N5-e_)X7)fgEzSFTn7NCX#`!w02bqo0ruK3!Z621HJ3oH>NZD0q90eNol_ z7d+uS{{xWPkZmA1!1%O9zhxmUX_N7lN&Gi0aF#Uuy((OLH{axg1d)t^SYw{^sq4=6 z6of`{Nn+YgS^vD3R6j+?f(77n#5m4*5@z|fYt3ZiWpT!~?KVQw{{`02#Pks&{Y;wB zC?d{m6*XZY%eGc|f=JO_QuWjAfl6rI6Y+ju%}*1lNi>M>ln`m26MbyTwqt%dZys-h zIizfxe5#T@`|d>S2o#!=7bo%*tg%P!hy!^>GYsS2_sIR9P}Tl084dm?RI2d*o9B%2 z^Me%R2EU>C+b%EZ2>%{k7DFj4VYR{vjv@`lLBfJ57`10pXx*kX=cbKVBRS~3Aq@@| z?jxa6MB3>BIPUn~TX^<>gnA$dP388?+1inEw`u|5DUw$e1b?=`1Qz4c)<3Ek9+Mcz zkCCmD(zGw+&cpl>!&{`QeK(RfR0oNM4M5~lxtSJdL^&MheFnhy=_kaRANBrcM2d{o z)vDx03mNOIc$1wOs3@6mK{)ek{!C)<>Q_GpLfvXO5H2jf{xPMXPzWeb1<}WroYKi* z{E%dvv5hZP@?c@E7fLWav;8p=(8-_A;#p5q&y&_cN?*U7c_vZY1hS6tv!l(*YcSr| zE1~N}qq)2kR#)kFfkCN+%=-IGRIOPLw!t!IU^M>18T3N`$!xR5<7e6*(Ts<&$WfcM zb(uc|zgF(K({LBrJTuL|a_+e11!HlAvC5nBfBw0A$rNAhp9`!0zeHjl5H967=8 zUeWlGYsC#!S-qp&_T9s$kE^GN*}nl#P=VWR(=6_XBWItsi7K`62vul!5vRk_0)?BY zmBuc!^)=$dOz=tk1DIP_#SE_81?gcz$15N@2ebS!1+5{9W!1ugDg-eT_y*TmrX8gg z#lP9028&Eer%8bZu}p2ML5u;`Y7CjtutQabq$g@msy84ED{*^mFe|jH$MpO#!XPF9 z;a`s}i^7~iZmyl{#NbdGRVl;xw9@5x8)80@NrUsr!xDt~Hx-3vr2+ePsXl(i zgPh;FCu11ABkhd5+UAq)o5)Fl6io7Bl z<9_r*^_H-^|FP|`eGsf=p}if&;thJ-^FC`%?2=TsdQje-s#jwxLL>+1*Ot44`?gS+ zCK>aE;?y@o>DI^Q9z;}*yHAW~TJdd@!;y*4)0+64D!DVyUm25Ns&vp$*?`z z{cu3wN3ub$c+tVQh+ZSJ_hhSnc;uXAQIjGJSF%7(pJ>Y>d#^4E?tU0cx&fJyEqYAf zy_1`Xo{oMhUJOEr`Eo2$y0SzF@`y{Yl&71)V$a=)&-P!tW*{!(lk$rdbBOAUz#F`WUZ!3JKdIX{Zzk=q`y1r23efs#r*xP} z=o-uKvyO{{kH?>!d1<9#LpWUsE{M?{s3g(QuYHUO*@$f2o9X zclF>YCz@4hU2{+ctFzud;Qw$FR8jdhS(Lo-oMNgKcBlY$Le3HC3h_Lt{(zm@;7fP) z3!(E*^Z3rwsV$|xGYEPkYKugLpa1#uPpH#E(|Dd;d)Nx&?j5>Nn&V5Twi2#pf3A~; zpX_u_>9QhHsE!y3!O=3ipSr`@ukRZdV$BofPJRgX`&7!OsNu%ldVvqil9p&WlrPys ztqqu8l0J#5OouT)+u~C_(W1h%RvQ8kdxr-Iey?$a<(ceHe~yBR@a)ESM*qAQTqSmD zW1lNNF3od$q0;+wsChcmuLvF>z24ng7yn*Mot-gK3aGy(vocpYyb&WbA6t0D0`qH= zl+~@`1q}6s^NcG?IXoL2I(Nmf-*fRF%Xi#`?7O-jmDL+A*uCSS8YZlcTz`&ks;&9e z-P&H9&Rop$reNz@qx@|t%(=b zuhx#O^C*Bl4&DF>s@JfIn+!KP8(haUSp0P~NX@W1p+3sTx99pe-Tm2erd^X?+<}Hm zfwO`)B>$DCcHCY_QWyvb&HpP;@M8KPQDabZg2L?kC*dJPl)*2Z+nZ6kDCu-9Emm}9{5BO zHrSUEm1A=DW+g}jC&MYYo@UZMCN50=)yKuyJv07p9LXb#2I>~hOq1H&#NzRwT*9%G zW~L8a;i_2UzFG74`ouMPUGg&fk<+B?6N8wtH@G)zffDlvXJk<$C(R|rc{zLOy*8)s zNxZzADOS3PKNl$3OEJ{SVRWgOnNlmd4O(DkQ^~KDN>cIKA@qZ$k=j!t6RZ6M+etNG zw6V1PD{E?V5!^gHX2Z3`K!Fe-s2~-ly02~~h)Rw&3aRZFYdhY{nWyB|2)wLrUA{91 zfA=6fp?xZ4!q>z>Le`{kGa1(?Iv84a_O-^Hy##>pIWe#&%)I;QrE3JYWDORAMkEx5^C(mE^>j9JqP z9rf$TS;%X~d&|8dejZ-?1$+s?F(^vzBcM@gqEVl#uOBEVFI`Vtt~1x!yZ=I@B!55e z2m*iB;}Q${dAUCXG?kaPwyQ+NNi4f?pleLqC@f;>vd5Y&GdL&d>Yd1H=Pd3wsw!1Z z>UHZos-Mp{G#0LUlj~GbR>?9}AdqC|33*E5QR&;dE%t29xnnG)rykK3n5c7vxXQ89 zQFc$(@EIrixgAZ7Sv3w_OOkl?lyxYfz9)Bg@_vn%N{zK?1-<%j&D){N9o!Fi+m^YqPNW13jp0 z*ZUeUe!~f?W%sNDvCVTD9xC?5YyZAK#0cVZg>K4etVNT_^)1R=b?p!0-~d6pqfGYJ zB(fM53`lmm2?qzv{|mT9pX?MW(&(k2rGD@rZD&&%VhrK9UryrB({eWOWjeF6&=r9i zcT3B){e=<3Gdt;W(`z(5`PA~XWxCoso=&WLkOgIwQ8LTqS!9Xig3jqT-!D&3^_^QKzQpW{atjUc{Ho3bSFZWm z8D_DsEAE;0e^8rEUUQt%T^4u%Jrk3voqT1reivh`rxsIC8s?ek=mq0}=RD#V;oQW8 zL7T2s8@c?(Ff5U?AJPc%&Nsuj1~T1|o$)uopv5ejk9vshlY zTG4e>6hw~3STeuX9BXw~I%{y<#pOoLOb2o|L8~$qxegUiM(f$Wh~lw?IzaF{{)KC- zO`>ibG+Cw>hM;4Il|)g3CK)UI*)9}58vIwl~kadow~}Jn-D_LU-C8XZ;WS_m+(D?7>qZqKo|I5lmJ>PlLuHP0X#9>Gr=(^ zs7v@BE@hw)8h*C7Q0kUS$hLIK4c`(J9ZFiDR47MzkTaxC;1_gvTKKo&nQtaJWYTzc zA)e<3w~-J8qx6SX)cI9N>W}XOXhI3SK!0dm=4#Zb^IzJ;j_hR*o@8G0#039Bo?LpPR5Gnx(u_@x*49E?0B=a==b*Viav=_$Onyoi@ zr{W2QN1b5)Hmhh7GbPB7oS=JQabSY(_swt7VY#Ap%o%+_IC!)GIh05-{1nPgxyu0| zcO^FiyO2^3>+ zZ)psQJPli*M6>vcVnWfG862d+r(8jmEKAhI&Ne$PpcTeh$xZ{e%jv@|*UqL(s1A+& zbfgTcQ|f$E`BN$peK&C2uc0=AX zPEuRx9y^*z0UiHv5T@Xq3^43Mwt77Ru;gzy`A76RyZx`>Pb9TpgG)@8HarO^^!Nsr z(H)4nP)0B81DL+~S!S??yQbKD-v^Wi{L6;H!8_fV`zOcBTY)%7zGWvs*CN63-}zuc zF3^eaLPx5hVWjbpGUYh?3eH?z*jU)1MEJq)Cde_7I{&+~qYgcy>MRa8O(6K%}~=kqZV!ZN0d9grVy&c>E`3*%46C-2dvN zBp#Jo-HUk0Jr|UsPF*@~6!88K$Tr_`(F$T?MkISrN&1j9aW(ys)6iazAUuo-cCZhpEa&(szLj>azv|aQ8Uxi4( zuA{7zFukZ{$-Y81&@nKR#Hq1irbCxycPnm1TP@7K5(+X6OEvhb0B65tLm?`KSj@R9 zvTuC-;P`j`ERVQouIsq`ucq;n&scGOd#XmeS=*BX55?-hh_I=?F1a0@I2BByPuS(o zUs3+H@Jp_i`l9+*J&!1+6*Hc&th;n>XmcIj>&Y7Wa_H4RJ$rw!>Wi=TuIld6#(Nx{@ov4oc`*p|Lph)FJ2{($Mb3yo@ zHFi~Cp=O~VR^;E}zamO=+>>=ph2@&I?BLg46^>tZ<_ z9N=f!umL~qr*KPmFL{~bL4>>Xp8j&m0%)~+1^L4$sFM~_83e{#$gyEuo?@(~4;L=! zPZMzhViAj$Ctj)bB9E7!9v2;$@cdnVvZ4Z;x1sQav!zys&}7akU3~o9x{SJoj(+U$ zBl(;kJS@W+qgVh=;d*+HK1MBdE~uUJ$b6Ue-3PrqT`A^huK4X!(B-?u-ewT|AQ&h) z01S%a5c9}+@*e(`tN-0V7ssO5B+$6;(OwrCkQ|GO#*s9PKbSAUSnn+!srQU_^VdRD z>hc<<@cP;L8HJ);n%Tt2ed46+kazwB5ROD5Q{Fa_K!>U24xp$K87_|#F=JC^DHR)} zUYI~Kb4S4fatv!V+{mkJDmc-K+;eK7jWf`J@F#d=D8q*1^A+Wm2nV%; zo!({rUncz39*#nkozwRB-fHL@aCr3_Y(EGGhpx69+#x~iyl>4qdDi77K~1?tL*7Ji zPRbNP($^2<-B@6nF>sAN?z|G)f;jCq^t|# z3UW!SF6o~jfd$MjBeFI8N)1m#*dy!Me@a?dZYdM})W6=szEi`V!u3pB5`P5xmgF^D z^XhzOv{ewC5`GwEZNJt3eT5Q3ByY+26Xc12wsa= zXXAFwPu&FE4>FP5@FWYWN5|hV0zxZy0v#`w42e7w*M^moM4##2b$Ek?9LZGGz zdnLf>uwGYRv@`t}*-)x&h=7Fl555RP#&s^dE`fMM6jH?*m(YZ?WQy~S1mb0KUpm$d z>EWLy`XD@5Q)Qg3B#z-?b0lymz3X`P(RW=+Zc1kCFnPr`g1E~&yWMQJJjb}y_bw;D z$)g^6tR;3g!C&VBXYj(`4{gmNyg*sG%!rsWKm6pp0QQTW&q0g_8g>ijM04qOu~BG~h!d>PwPgA?}#XIPl-uq}ZD0 zQy)GPj66Wk!m1)EELbE71oJ3rT3yZGd8eKcpt0?r47P3Ck$<{{ovuzx4bB48_;R46 zV8B*{6njJ$oCve2I)#5d?>rMoH&wk;0Q*q9^3)gu4(Y%Nr81wU0`ZH!9X(Yhn92AX z^XPE87c<&IO&{JAdbGPo%idOAd^9df^uYv*Jj*w#H|0dguPeyoBTGJj*P#6Ec zK^FV*pn<{v9W{*M)F8q6SVBtNwicj3{oo<@egmcXGPw0+SV zIj(*57*d&r!NCR==yfz0{1csy7MP@3musxOrUIpn((zZsVq}GdF0PGQT~XM^$ju}V z+OrOe>*mc3`|ZP3!A=ML&Jw(eC*j>xyO%H1d^bwFo-HWby$@LAIrH-cV{F>%g)&WzrI^gVF|I9l_2Op3stxl3>ai*<>4mYNTe96afQlV#OvNtN zN6gAVVEJWtr=zx6Foh*+`R2T zJY6g=SdbWA@tP1I?kIQmqo8H`{{e15k-r0njJTsw1ye=J92zn#&`0KA5K)VpL7cVB zA7-LKpxH`1sT`WP~tZezqxYh-U5-2|B(GwO(c&gAQ2 z!FL_4_mM^$uovX}^iL?-DOv|q(j_YMReYAtR{N$r5IknqQ z3uvLtb}=o3#}6ila+U$^$40j1oMCueGOn_apLUCjmeU@%fvpc3eO6MPsBVb>YU|tE zRn%7zWb&878uc<&!ctLWuQW`xPwdx6fBV4_*qx^B_$lV%?sjo|Ow08)$b69AAuIP3 zR&;0BPxrdJb=L##%o!G3DDEN?OjST`xAdVjF5;&_7Y~2RHq3UXw}R>V<;Yy!C*|-% zNP?w0iH>9({n)l+aU&~g)+ohv-4uhpIanZVl&ohEMB8;_<3!LggIV3OjUf1Ve<{n< zboFcX4qN6?eIR8N1hRZ&5)zs>QSd6J8)g{Pg_35QQdC^ zPiypHrfW;(oWA-I$+9!AFIs!pM-S1jFx5@1mQogWeauG>(#NL0?(s4n0cFyTr!oAG(5_*c#iA4PI19U zWAqY&Kr(X%;kFDnoVB^Y3&#HveOV~J0-FQ}O$%`zkw|!%DKys^SLO6I;q==xDCa11 zvnjtWl$YdZgOBnee_)QBqR}^zJ|?XYHPO!&O5W%u?S;t8D>2D;5eUJXOoaA3M z5sY8VrBO$Ba(3r1e^?nxraSHsC-?#VgOuQZEH-*GvWG_hjJ-!Kv}-7HxJQ=?fq$hR z`siQi-;i~R9YFA?ZU>W7(zJT%-c5<9_-tamSz1f8)G(%Cr#? zKa&c7j^2=?-Vl4E9jz&z2d4-QT4oyl_jAO3a8T8taL{p0e;jP^qHm^oX}i(OW#T6& zEDMGai>+DdCM2hLxqMo4D!njkAR3aM_Qqe}n8p5!E7@1YUamq=3xB)xfcZ?VS8JnY zb~b2ic_FS-+R{s>rs9=rd|b`7r5SJr=^{iXa#Eo=LuoI`$J4e7Ltety_;@j2JMB^6 zUdz__I_S$ne=1E{Mvs~4!E4RW%h>1RrF?xg`xaKRe}su7Lfh9)UJg<$$t=?MioPz;-ioq7g3wO2+=^KdSE^~Pr!Ved%R z_~jPeBd<=|ID55IPo<&=Avnt_zR|}kdG*2y#xtcHf9{aNC0l3Ny96H0WmMg0+g_M} zO%pfQBE0c}S(re}Z6ybCveIXzyxjT=UlVf}YSNpR@ftDlP44qoRZuwTkz_*Lc^w*v zf)DrNVi_;vtClk+s7pDbRiYhxYdhDw*p& z#+x|of8%!EEVb@AncY(CcIW1z@ojLw!Uf#`-U7c!@Sv_4#k-h=?)LL;-s7Xq zd?$+E{;hj^x_Wj5`)tXHs#*1NRQ04V5t7MVf2!%@eU(rMo;v;x1I@A(EEqHf!VVGH z%Lka!!Rakt(3H+t&mhy=2FjJR!^OTv`u}3J34$oNL-|Co)InQ=d(>AWA+yD&g1Jel zqpedRg~FflBf?l%(VY)+km~WmaH~o7ZcMca;yC-j^a<-B)e4qOu>=<$6i_PRSbqGBevOON!M8(EN23Qbo`ZTsYX5F^*-y53jEHRMrUE zXkHAs#|N(v5bE#``}hPui13p2)+1gX%=iR9DUN|xkVjq(h!(hJ{4fmID^`=QiOG!7lS>aEL%W#j z4%2kR&RMre*;Ipfm4*h9fl#s|%@?SV=`q@bNr>rXYKz5oU7)p$#_Q&u3$%&pRYGPvL-Sh{1oW<^ zP)nX}+ka-_m8KWKmiZa{wvuOpYN<@4fJUo`-lQgt+BDic0a-jQ77+f3e_jU)jVryq zAmAFRPy()OiXA*SN?V)HQ)kP0+BQx*V%^Q7bVt*9id=u5dh&GVS=A#~${W5weF~7M z<+gF^iwTE3-PO&JJRR7Tr~X^>G!XXW$q1L{X*gWb)ZB7?ou{t6u40r9ztBBSW~}zU zrcrV(DkfF5j?&O#jT&odf3X^uP@Ni=(sDHh>1}FUMQhdQs=!Y?0T3F|fUBV#9dSjR z_chl}{6I4__pUs>dw=bFdpPXjaQPU$KTjWug)7GC!B|)ur-x!Kqx8{H`b3^S1!FX| z;D1c$K9i>>YoF@R)32QqO?*N9{>E47`NwES%ggk9o?eV?siAK?e?=8%Xu~+=W8*Xy zTiPEQrSUvnto>@9Ua70d)2n&<#wh*H#YmkN_MD;D3gfAkSf2hcTwc>aU-CkGe{xG@ zN99IuU3qh!{vvj>uk5oF8>8>%>F-X{_9fmGi+v{!cIX?uEA)dMi|Fsul_#H|swLiK zCr+NGMNKP!GCIyte`MK-CEh&!Q=Qg4Z?P{=KLX`OZ^xO5FNlD({~?0ZX?5jI=cu#x zKlAi@p8h9Km(NDd(E3R64x{vD?L<-f05hgd>h>1{JP!aa)I7?bizRF>5hMq%I*-g? z|I5u6X@wY&L-d*&8)2yx)S_S+1#Y1>Itf_DhXJppJ_XAtfAC$@uV5JkK1BB^SVn;@ z{0c0iz>m|@3YJmeXX$eamQmo((-##iqrflXwIr~N0$-%BD_BN>zeC?uu#5u#h<>bK z83q0cmnm3Azk7)ED(FAlN3#8J? zIT9rN`gbQVe=ETkwqxbB$rTN+>FKN%s|Ag|&7Mg-0{${>;OYsY*90~w$S z7YSIf6f;54whxh-=O)5y^qT1Mlfr{ zSR)_T+#||1L6{2IDBCO?Vq?5~|4VRHiuE)HxNVHr?ho*K8Ib1!d~;}wx5UC8b!dC6 zr_RHpeCruHir_r}e1JRL9p!bH-!Ai>OSC0)iP|N=>dN~OV~C{caGrOB+>q)KPGL_d zz+E`!e`S=fe(rAGEm%(vezO7?xz}!VOgzS z7Q|-pD35rPi=05w@VHS{M69NHZcS7n^Exe4E^#Yrcr9FF4P4?jc-p<-azEVRQ8>ht zf1n;i_5U_}@`rGqH>rxzDRCFvsh1Y80ooe*2wU*fr^%=4+9@fF$~zxc-idp6EAXR5 zFrvVZ7r|W${A3aAQQ*lU81^Xm(Mh3PraaOc^R e(*aw}>J`&Ep$5$o2mVP)i30-M3~u@DBh0 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 delta 40115 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 e{Sg5G5zENPNVU~b5#<2@M#Os+0czL&{q{eZe&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,7 +65,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line @@ -73,21 +73,10 @@ goto fail @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/src/main/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFiles.java b/src/main/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFiles.java index e7dda6c..ee90247 100644 --- a/src/main/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFiles.java +++ b/src/main/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFiles.java @@ -35,6 +35,7 @@ public final class OftSupportedFiles { "tf", "tfvars", "bat", "json", + "xml", "fxml", "toml", "html", "htm", "xhtml", "yaml", "yml", diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index e18439c..6564fd3 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -61,6 +61,9 @@ + diff --git a/src/test/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFilesTest.java b/src/test/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFilesTest.java index f071ad5..58b7860 100644 --- a/src/test/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFilesTest.java +++ b/src/test/java/org/itsallcode/openfasttrace/intellijplugin/OftSupportedFilesTest.java @@ -35,7 +35,8 @@ void givenInvalidSpecificationFileNameWhenCheckingThenItReturnsFalse(final Strin "settings.cfg", "settings.conf", "settings.ini", "scenario.feature", "source.go", "source.groovy", - "data.json", "page.htm", "page.html", "page.xhtml", "pipeline.yaml", "pipeline.yml", + "data.json", "layout.fxml", "project.xml", "page.htm", "page.html", "page.xhtml", + "pipeline.yaml", "pipeline.yml", "Main.JAVA", "source.clj", "source.kt", "source.scala", "source.js", "source.mjs", "source.cjs", "template.ejs", diff --git a/src/test/java/org/itsallcode/openfasttrace/intellijplugin/navigation/OftCoverageTagCompletionTest.java b/src/test/java/org/itsallcode/openfasttrace/intellijplugin/navigation/OftCoverageTagCompletionTest.java index 99d26f4..feedccc 100644 --- a/src/test/java/org/itsallcode/openfasttrace/intellijplugin/navigation/OftCoverageTagCompletionTest.java +++ b/src/test/java/org/itsallcode/openfasttrace/intellijplugin/navigation/OftCoverageTagCompletionTest.java @@ -101,6 +101,15 @@ public void testGivenCoverageTagTargetInJsonLineCommentWhenBasicCompletionInvoke assertThat(lookupStrings(), hasItem("dsn~coverage-target~1")); } + public void testGivenCoverageTagTargetInXmlCommentWhenBasicCompletionInvokesThenItSuggestsDeclaredSpecificationIds() { + addTargetDeclaration(); + myFixture.configureByText("project.xml", ""); + + myFixture.completeBasic(); + + assertThat(lookupStrings(), hasItem("dsn~coverage-target~1")); + } + public void testGivenCoverageTagTargetInNewTagImporterExtensionWhenBasicCompletionInvokesThenItSuggestsDeclaredSpecificationIds() { addTargetDeclaration(); myFixture.configureByText("suite.robot", "# " + tagTarget("dsn~coverage-target"));