Skip to main content

8.91.0 release (2026-08-26)

Total recipe count: 4142

info

This changelog only shows what recipes have been added, removed, or changed. OpenRewrite may do releases that do not include these types of changes. To see these changes, please go to the releases page.

Corresponding CLI version

  • CLI version 4.7.0

Removed Artifacts

  • rewrite-analysis

New Recipes

  • The map is a simple reference that is neither modified nor reassigned inside the loop.
  • get is called only with the loop variable.
  • The loop variable is neither reassigned nor captured by a lambda or anonymous class.

Every candidate loop, converted or not, is recorded in a data table along with the reason it was left alone.

  • sh.stubborn.contract.migration.DropJUnit4Support: Replaces @Rule StubRunnerRule / StubRunnerClassRule with @RegisterExtension StubRunnerExtension (JUnit 5). Requires JUnit 5 on the test classpath.
  • sh.stubborn.contract.migration.MigrateFromSpringCloudContract: Composite recipe that updates Maven/Gradle coordinates, Java package names, and drops JUnit 4 StubRunner / Verifier usage. Run this after adding stubborn-contract-migration to your build's rewrite plugin configuration.
  • sh.stubborn.contract.migration.MigrateStubRunnerProperties: Renames the deprecated Stub Runner property prefix spring.cloud.contract.stubrunner.* to its canonical stubborn.contract.stubrunner.* equivalent in Spring Boot application.properties and application.yml/yaml files. The legacy prefix still resolves at runtime via StubRunnerPropertiesMigrator, but it emits deprecation warnings and is slated for removal in the next major release; this recipe removes the warnings by rewriting the keys. The verifier property subset is handled separately by MigrateVerifierProperties.
  • sh.stubborn.contract.migration.MigrateVerifierProperties: Renames the deprecated Verifier property prefix spring.cloud.contract.verifier.* to its canonical stubborn.contract.verifier.* equivalent in Spring Boot application.properties and application.yml/yaml files. The Stubborn Contract Maven plugin exposes these as -Dstubborn.contract.verifier.* system properties; the legacy names are still accepted for the string parameters and via this recipe for configuration files, and are slated for removal in the next major release.
  • sh.stubborn.contract.migration.RenameJavaPackages: Recursively rewrites all Java import statements from org.springframework.cloud.contract.* to sh.stubborn.contract., and the JSON/XML assertion packages from com.toomuchcoding. to sh.stubborn.*.
  • sh.stubborn.contract.migration.UpdateDependencies: Replaces org.springframework.cloud:spring-cloud-contract-* GAVs with sh.stubborn:stubborn-* equivalents, migrates the spring-cloud-contract-dependencies BOM, and swaps both build plugins, in Maven and Gradle builds alike. The com.toomuchcoding JSON/XML assertion coordinates are swapped alongside the sh.stubborn.jsonassert / sh.stubborn.xmlassert package renames. Every coordinate is repinned to latest.release.

Removed Recipes

  • org.openrewrite.java.micronaut.RemoveUnnecessaryDependencies: This recipe will remove dependencies that are no longer explicitly needed.
  • org.openrewrite.java.migrate.guava.NoGuavaAtomicsNewReference: Prefer the Java standard library over third-party usage of Guava in simple cases like this.

Changed Recipes

  • org.openrewrite.github.AutoCancelInProgressWorkflow was changed:
    • Old Options:
      • accessToken: { type: String, required: false }
    • New Options:
      • None
  • org.openrewrite.github.ChangeAction was changed:
    • Old Options:
      • newAction: { type: String, required: true }
      • newVersion: { type: String, required: true }
      • oldAction: { type: String, required: true }
      • oldSha: { type: String, required: false }
    • New Options:
      • newAction: { type: String, required: true }
      • newVersion: { type: String, required: false }
      • oldAction: { type: String, required: true }
      • oldSha: { type: String, required: false }
  • org.openrewrite.github.ChangeDependabotScheduleInterval was changed:
    • Old Options:
      • interval: { type: String, required: true }
      • packageEcosystem: { type: String, required: true }
    • New Options:
      • day: { type: String, required: false }
      • interval: { type: String, required: true }
      • packageEcosystem: { type: String, required: true }
      • time: { type: String, required: false }
      • timezone: { type: String, required: false }
  • org.openrewrite.json.DeleteKey was changed:
    • Old Options:
      • deleteEmptyParents: { type: Boolean, required: false }
      • keyPath: { type: String, required: true }
    • New Options:
      • keyPath: { type: String, required: true }