8.93.0 release (2026-10-09)
Total recipe count: 4282
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.9.2
New Artifacts
- rewrite-android
- rewrite-mainframe
- rewrite-ruby
- rewrite-scala
Removed Artifacts
- rewrite-cobol
New Recipes
- io.quarkus.updates.core.quarkus311.WebDependencyLocatorRelocations:
- io.quarkus.updates.core.quarkus325.DevUiSpiRelocations: Rename the Dev UI SPI artifacts quarkus-vertx-http-dev-ui-spi to quarkus-devui-deployment-spi and quarkus-vertx-http-dev-ui-tests to quarkus-devui-test-spi.
- io.quarkus.updates.core.quarkus40.HibernateORMConfigProperties: Rename Hibernate ORM configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.HttpSslConfigProperties: Rename HTTP SSL configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.InfinispanConfigProperties: Rename Infinispan configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.Jackson3Migration: Jackson 3.x uses new package names (tools.jackson instead of com.fasterxml.jackson), new group IDs, and includes various API changes. This recipe applies the OpenRewrite Jackson 2 to 3 migration.
- io.quarkus.updates.core.quarkus40.JavaVersion21: Change maven.compiler.source and maven.compiler.target values to 21.
- io.quarkus.updates.core.quarkus40.KeycloakPolicyEnforcerConfigProperties: Rename Keycloak Policy Enforcer configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.KubernetesConfigProperties: Rename Kubernetes configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.MailerConfigProperties: Rename Mailer configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.MicrometerConfigProperties: Rename Micrometer configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.MiscConfigProperties: Rename miscellaneous configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.OidcConfigProperties: Rename OIDC configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.RedisCacheConfigProperties: Rename Redis Cache configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.RestClientConfigProperties: Rename REST Client configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.SmallRyeConfigProperties: Rename SmallRye configuration properties that were deprecated in Quarkus 3.x and removed in Quarkus 4.0.
- io.quarkus.updates.core.quarkus40.UpgradeToJava21: This recipe will apply changes commonly needed when migrating to Java 21. Build files will be updated to use Java 21 as the target/source and plugins will be also be upgraded to versions that are compatible with Java 21.
- org.openrewrite.android.UpgradeAndroidGradlePluginVersion: Upgrade the Android Gradle Plugin (AGP) version. Handles both the legacy
buildscript { dependencies { classpath 'com.android.tools.build:gradle:...' } }form (delegating to the upstreamUpgradeDependencyVersionrecipe for full DSL coverage) and the modernplugins { id("com.android.application") version "..." }form. - org.openrewrite.android.UpgradeCompileSdkVersion: Sets the
compileSdk(or legacycompileSdkVersion) value in an Android module'sandroid { }block. Handles literal int, string form ('android-N'), extra-property reference, version-catalog reference (libs.versions.*.toml), andgradle.propertiesreference. Will not downgrade an already-newer value. - org.openrewrite.android.UpgradeMinSdkVersion: Sets the
minSdk(or legacyminSdkVersion) value in an Android module'sandroid { defaultConfig { } }block. Handles literal int, string form ('android-N'), extra-property reference, version-catalog reference (libs.versions.*.toml), andgradle.propertiesreference. Will not downgrade an already-newer value. - org.openrewrite.android.UpgradeTargetSdkVersion: Sets the
targetSdk(or legacytargetSdkVersion) value in an Android module'sandroid { defaultConfig { } }block. Handles literal int, string form ('android-N'), extra-property reference, version-catalog reference (libs.versions.*.toml), andgradle.propertiesreference. Will not downgrade an already-newer value, and will not upgrade pastminSdkFloorif specified. - org.openrewrite.apache.commons.lang.ParameterizeRawStrLookupSubclasses:
org.apache.commons.text.StrLookupimplementsStringLookup, which extendsUnaryOperator<String>. Extending it as a raw type erases the inheritedapply(String)default method, leavingFunction#apply(Object)unimplemented, so add theStringtype argument. - org.openrewrite.apache.commons.lang.SystemUtilsIsJavaVersionAtLeastToJavaVersion: Commons Lang 2.x compared Java versions as a
floatsuch as1.4for anintsuch as140; Commons Lang 3.x only accepts aJavaVersion. Calls whose argument is not a literal that names aJavaVersionconstant are left alone. - org.openrewrite.cucumber.jvm.CucumberRunWithToSuite: Replaces the Cucumber JUnit 4 runner with a JUnit Platform
@Suitethat runs the Cucumber engine. The@CucumberOptionsbecome@ConfigurationParameterannotations, and the features become@SelectClasspathResourceselectors where they are on the classpath. The JUnit 4 runner looks for glue in the package of the annotated class by default, and the Cucumber engine in the whole classpath, so that package becomes the explicit glue when none is configured. Class-level setup and teardown methods become@BeforeSuiteand@AfterSuitemethods, as a@Suitedoes not run@BeforeClassor@BeforeAll. A class that extends another class, which may contribute@CucumberOptions, or that has an option that cannot be carried over, such as one that refers to a constant, keeps the JUnit 4 runner, with a comment explaining why. - org.openrewrite.cucumber.jvm.DropStrictAware: Cucumber-JVM 8.0.0 removed
StrictAware, which Cucumber-JVM 7 only ever called withsetStrict(true). Remove it fromimplementsalong with thesetStrict(boolean)override, and implementPlugininstead when the class implements no other plugin interface. - org.openrewrite.github.RemoveRunner: Removes a runner label from the
runs-onof a job, leaving the remaining runner labels untouched. Both sequences (runs-on: [self-hosted, linux]) and thelabelsof a runner group are supported. The runner is never removed when it is the only one left, as a job requires at least one runner. - org.openrewrite.hibernate.MigrateRemovedDialectsHibernate70: Hibernate 7.0 removed the remaining version- and storage-specific dialect subclasses that still existed in Hibernate 6.x. The IBM-i (
DB2400*) variants map toDB2iDialect, not the genericDB2Dialect; the HANA row/column-store variants and MariaDB 10.6 collapse into the genericHANADialect/MariaDBDialect, which autodetect behavior from the JDBC connection. - org.openrewrite.hibernate.RemoveGeneratedValueStrategyWithGenericGenerator: Hibernate 7 rejects
@GeneratedValue(strategy = TABLE|SEQUENCE, generator = "X")when"X"resolves to a@GenericGeneratorrather than a@TableGenerator/@SequenceGenerator, and falls back to a plain JPA generator that looks for a table named"X". Dropping thestrategyattribute keeps the custom generator intact and remains compatible with Hibernate 5. - org.openrewrite.java.jackson.ModuleStillOnJackson2: Marks the source files of modules that either do not resolve Jackson 3 yet, or still use Jackson 2 types in their own sources or those of their child modules. Modules that already resolve Jackson 3 and no longer use Jackson 2 types are left unmarked, as any Jackson 2 dependencies they still declare are there on purpose, for instance for generated sources that are not part of the LST.
- org.openrewrite.java.jackson.RemoveBuiltInModuleBeans: Jackson 3 includes Java time, JDK 8 and parameter name support in databind and removes their module classes. Remove Spring
@Beanmethods that only return a new default instance of one of these modules. Customized, overridden or directly referenced factories are left for manual migration. - org.openrewrite.java.joda.time.JodaPropertyToJavaTime: Migrates the common uses of Joda-Time properties, such as
dayOfMonth().withMaximumValue(),hourOfDay().roundFloorCopy()andmonthOfYear().getAsText(locale), to theirjava.timeequivalents. - org.openrewrite.java.jspecify.MigrateFromSpotBugsAnnotations: Migrate from SpotBugs
edu.umd.cs.findbugs.annotationsannotations to JSpecify. - org.openrewrite.java.micronaut.AddMicronautValidationDependencyVersion: Supply a compatible version for unmanaged Gradle validation dependencies, reusing the validation version already in use when possible.
- org.openrewrite.java.micronaut.AddMicronautValidationProcessor: Add the validation annotation processor to each source set that uses validation constraints.
- org.openrewrite.java.migrate.SimplifySecurityManagerThreadGroup: Remove a null SecurityManager local used only by the immediately following thread group conditional.
- org.openrewrite.java.migrate.UpgradeJavaCiContainerImage: Upgrade cimg/openjdk job containers in GitHub Actions and CircleCI to the target Java version, preserving newer versions and unrelated service images.
- org.openrewrite.java.migrate.UpgradeSpringBootParentForJava25: Upgrade Spring Boot 3 Maven parents to the latest 3.5 release so that Spring's bundled ASM can read Java 25 class files. Stay within Boot 3: crossing from Boot 2 requires a separate Jakarta migration, and newer Boot major versions must not be downgraded.
- org.openrewrite.java.migrate.UpgradeUnmodeledMavenJavaVersion: Update explicit Java version properties and compiler settings in pom.xml files parsed as XML without a Maven model, for example in a repository built with Gradle. Property references are left intact.
- org.openrewrite.java.migrate.awt.JavaAwtAPIs: Replace calls to AWT and Swing methods deprecated since JDK 1.1 with calls to the methods that replaced them, such as
Component#show()withComponent#setVisible(true). - org.openrewrite.java.migrate.awt.ReplaceDeprecatedAwtMethod: Replace calls to an AWT method deprecated since JDK 1.1 with calls to the method that replaced it. Declarations and
supercalls are left alone: the replacements delegate back to the deprecated methods, so a rewrittensupercall would reach overrides it used to bypass. - org.openrewrite.java.migrate.jakarta.AddJakartaAnnotationDependency: Add the migrated API without promoting an explicitly provided or compile-only dependency.
- org.openrewrite.java.migrate.jakarta.AddJakartaCdiDependency: Add the Jakarta CDI API for migrated source without promoting an explicitly provided or compile-only API to a runtime dependency.
- org.openrewrite.java.migrate.jakarta.AddJakartaEjbDependency: Add the migrated API without promoting an explicitly provided or compile-only dependency.
- org.openrewrite.java.migrate.jakarta.AddJakartaElDependency: Add the migrated API without promoting an explicitly provided or compile-only dependency.
- org.openrewrite.java.migrate.jakarta.AddJakartaInjectDependency: Add a standalone API only when no explicitly provided API or full platform already supplies it.
- org.openrewrite.java.migrate.jakarta.AddJakartaMailDependency: Add the migrated API without promoting an explicitly provided or compile-only dependency.
- org.openrewrite.java.migrate.jakarta.AddJakartaRestDependency: Add a standalone API only when no explicitly provided API or full platform already supplies it.
- org.openrewrite.java.migrate.jakarta.AddJakartaXmlBindRuntime: Add a Jakarta JAXB 3 runtime when a Maven module calls JAXBContext.newInstance and has no explicit JAXB provider or provided Jakarta platform. Java 8's built-in javax provider cannot serve Jakarta calls. Annotation-only modules are left alone and test-only calls receive a test dependency.
- org.openrewrite.java.migrate.jakarta.ChangeJaxbApiDependency: Migrate JAXB API coordinates while preserving the legacy API needed alongside Jakarta JAXB by external Arquillian Recorder 1.x binaries. Recorder modules migrated in the same reactor are excluded.
- org.openrewrite.java.migrate.jakarta.DoesNotHaveProvidedApiDependency: Find build files without an explicitly provided or compile-only API, so adding a compile dependency does not promote a container-provided API to runtime scope.
- org.openrewrite.java.migrate.jakarta.HasJettyDependency: Mark the source set when a Maven or Gradle module depends on servlet or WebSocket artifacts relocated by the Jetty 12 migration. This permits updating the Java baseline in parent build files as well as the module using Jetty.
- org.openrewrite.java.migrate.jakarta.InvocationContextGetConstructor: Delegate getConstructor() when a legacy InvocationContext wrapper delegates getMethod().
- org.openrewrite.java.migrate.jakarta.JacksonProviderOverrides: Add and forward the default view parameter required by Jakarta Jackson providers.
- org.openrewrite.java.migrate.jakarta.JavaxRuntimeTypeNamesToJakarta: Migrate CDI, EJB, Servlet and resource annotation names used for reflective lookup and annotation matching while retaining Java SE type names.
- org.openrewrite.java.migrate.jakarta.JerseyLoggingFilterToFeature: Replace the removed Jersey
LoggingFilter(Logger, boolean)constructor when passed directly to JAX-RSConfigurable.register, preserving the logger and entity logging setting. Other usages require manual migration. - org.openrewrite.java.migrate.jakarta.JettyConnectorGetPort: Jetty 9 moved
getPort()fromConnectortoNetworkConnector. Cast legacy connector receivers to the network connector interface when upgrading Jetty. - org.openrewrite.java.migrate.jakarta.RetainJaxbApiForArquillianRecorder: Retain the legacy JAXB API in Maven modules using Arquillian Recorder 1.x binaries, which still reference javax.xml.bind classes after the application's Jakarta migration.
- org.openrewrite.java.migrate.jakarta.UpgradeJavaForJetty12: Update the Java baseline of builds using Jetty to the minimum required by Jetty 12.
- org.openrewrite.java.migrate.jakarta.UpgradeJettyCoreDependencies: Upgrade explicitly declared Jetty core dependencies alongside the relocated servlet dependencies.
- org.openrewrite.java.migrate.jakarta.WeldToJakarta: Replace legacy Weld core artifacts and upgrade javax-based Weld implementations to Weld 4, which implements Jakarta CDI 3.
- org.openrewrite.java.migrate.javax.AddApiDependencyForImports: Add an API dependency to the nearest Maven module importing the package, including imports whose types could not be resolved by the parser because the JDK used to provide them. A module that already has the API in the needed scope, or from a dependency it declares as provided, is left alone.
- org.openrewrite.java.spring.boot4.AddSpringBootBomForTransitiveDependencyManagement: Import Spring Boot's BOM ahead of third-party BOMs that still manage an older Spring Boot release.
- org.openrewrite.java.spring.boot4.MigrateLiquibasePropertiesApi: Convert the former String contexts and labels properties to comma-delimited values when passed directly to SpringLiquibase setters, and replace setLabels with setLabelFilter. Already collection-aware code is retained.
- org.openrewrite.java.spring.boot4.UsesSpringBoot: Find every source file of a repository in which some build uses Spring Boot: a Spring Boot dependency, direct or transitive, the Spring Boot Gradle plugin, a Spring Boot parent POM, or an imported
spring-boot-dependenciesBOM. A repository without build files matches. - org.openrewrite.java.testing.assertj.PlaceAssertJDescriptionBeforeAssertion: AssertJ only applies
as(..),describedAs(..),withFailMessage(..)andoverridingErrorMessage(..)to assertions that run after them, so when they come last in a chain they are silently ignored. This moves them back past the assertions made on the same assert object, to directly after the call that created it, such asassertThat(..)or a navigation likeextracting(..). ForassertThatThrownBy(..)the check that something was thrown has already run by then, so the moved message only applies to the chained checks such asisInstanceOf(..). Note that a movedwithFailMessage(..)oroverridingErrorMessage(..)replaces AssertJ's entire failure message, including the expected and actual values. - org.openrewrite.java.testing.junit5.AddMockitoJupiterForRules: Adds the Mockito Jupiter dependency for annotated MockitoRule and MockitoTestRule fields, matching the project's Mockito version even when Mockito is already up to date.
- org.openrewrite.java.testing.junit5.ExpectedSystemExitToCatchSystemExit: Replaces System Rules'
ExpectedSystemExitrule with System Stubs'catchSystemExit(..), which runs the rest of the test in a lambda and returns the exit status for anassertEquals(..). Assertions registered throughcheckAssertionAfterwards(..)are inlined after it. Rules that other classes may use, or that set expectations outside of the test method body, get aTODOcomment instead. - org.openrewrite.java.testing.junit5.MigrateSystemRules: Migrates the JUnit 4 rules of System Rules (
com.github.stefanbirkner:system-rules) as part of the JUnit 4 to 5 migration. System property rules that only take string literals become JUnit Pioneer annotations; the other system property, environment variable, standard stream and standard input rules become System Stubs@SystemStubfields, andExpectedSystemExitbecomes System Stubs'catchSystemExit(..). Rules that can not be migrated get aTODOcomment, and System Rules is only removed once nothing uses it. - org.openrewrite.java.testing.junit5.SystemPropertyRulesToPioneer: Replaces System Rules'
ProvideSystemProperty,ClearSystemPropertiesandRestoreSystemPropertiesrules with JUnit Pioneer's@SetSystemProperty,@ClearSystemPropertyand@RestoreSystemPropertiesclass annotations. Only rules that take string literals and are not used elsewhere in the test are migrated;SystemRulesToSystemStubshandles the rest. - org.openrewrite.java.testing.junit5.SystemRulesDependencies: Adds System Stubs and JUnit Pioneer where the System Rules migration introduces them, upgrades JUnit Pioneer to 2.x in modules that get its
@RestoreSystemProperties, and removes System Rules from modules that no longer use it. - org.openrewrite.java.testing.junit5.SystemRulesToSystemStubs: Replaces System Rules'
ProvideSystemProperty,ClearSystemProperties,RestoreSystemProperties,SystemOutRule,SystemErrRule,StandardOutputStreamLog,StandardErrorStreamLog,DisallowWriteToSystemOut,DisallowWriteToSystemErrandTextFromStandardInputStreamrules with@SystemStubfields of the System Stubs JUnit Jupiter extension. A rule is only migrated when every use of it has a System Stubs equivalent; other rules get aTODOcomment. - org.openrewrite.java.testing.mockito.AddJUnit4ReplacingPowerMockModule: Adds
junit:junitto modules that use JUnit 4 and depend onpowermock-module-junit4, which brings JUnit 4 in transitively, so that their tests still compile once the PowerMock dependencies are removed. A module that declaresjunit:junititself is left as it is. - org.openrewrite.java.testing.mockito.DisableUnsupportedPowerMockTests: Disables tests that reach into private members through PowerMock, which Mockito deliberately does not support, so that the rest of the repository can migrate. The test is annotated
@Disabled,@Ignoreor TestNG's@Ignoreand recorded in a data table as an action item: rework the test not to depend on private members, then re-enable it. A usage outside a test method, such as in a setup method or a class-level annotation, disables the whole class. - org.openrewrite.java.testing.mockito.ExcludeMockitoAllReplacingPowerMock: Excludes
mockito-allfrom the dependencies that bring it into a module that depends on the PowerMock Mockito API.mockito-allis a 1.x-only uber jar with its ownorg.mockito.Mockito, which shadows the one of the Mockito 3.x that replaces PowerMock wherever it comes first on the classpath, so thatMockito.mockStaticandMockedStaticdo not resolve. The Hamcrest 1.1 and Objenesis classes bundled inmockito-allgo with it. Only the Maven dependencies declared in the module itself are excluded from, not those it inherits from a parent that does not depend on PowerMock. WhereUpgradeMockitoCoreReplacingPowerMockruns again in a later cycle, it pairs the exclusion with one ofmockito-core, which is harmless as the module declares the Mockito that replaces PowerMock. - org.openrewrite.java.testing.mockito.FlagUnsupportedPowerMockUsage: Adds a comment to PowerMock usages that cannot be migrated to Mockito, such as
MemberModifier.suppress,PowerMockito.verifyNewor stubbing private methods. Repositories with such usage are left on PowerMock byReplacePowerMockito, so these need to be migrated manually first. - org.openrewrite.java.testing.mockito.ModuleDoesNotDeclareJUnit4: Searches for the sources of modules that do not declare
junit:junitthemselves, whether or not another dependency brings it in. Meant as a precondition: adding a dependency to a Maven module that already declares it upgrades the declared version. - org.openrewrite.java.testing.mockito.PowerMockWhiteboxSetInternalStateToInjectMocks: Replaces
Whitebox.setInternalState(objectUnderTest, "field", mock)with Mockito's own field injection, annotating the object under test with@InjectMocks. Only applies when the value is a@Mockor@Spyfield whose name matches the field being set, so that Mockito injects the same mock the call did; other calls are left to the reflection-based recipe. - org.openrewrite.java.testing.mockito.PowerMockitoDoStubbingTargetToMockito: Retargets
PowerMockito'sdoReturn,doThrow,doAnsweranddoNothingtoMockito, except in files that still stub a member by name. ThereStubber.when(Object, String, ...)has no Mockito counterpart, so the whole chain has to stay on PowerMock to keep compiling. - org.openrewrite.java.testing.mockito.RemovePowerMockDependencies: Replaces and then removes the PowerMock dependencies. Usage that cannot be migrated has been commented out by
DisableUnsupportedPowerMockTests, so no code refers to PowerMock by the time this runs. Leaving PowerMock on the classpath is not an option: it registers its ownMockMaker, which cannot create the static and construction mocks the migrated tests rely on. - org.openrewrite.java.testing.mockito.RemovePowerMockRule: Removes JUnit 4
@Rule PowerMockRulefields, which bootstrap PowerMock like thePowerMockRunnerdoes, and are not needed with Mockito. - org.openrewrite.java.testing.mockito.ReplacePowerMockitoUsages: Replaces the PowerMock API, runners, rules and annotations used in Java sources with their Mockito counterparts, and PowerMock
Whiteboxwith Java reflection. Build files are left unchanged. - org.openrewrite.java.testing.mockito.UpgradeMockitoCoreReplacingPowerMock: Upgrades an explicitly declared
mockito-coreto at least the Mockito 3.x that replaces the PowerMock Mockito API. An oldermockito-corewould otherwise take precedence over the onemockito-inlinedepends on, so thatMockito.mockStaticandMockedStaticdo not resolve.mockito-allis a 1.x-only uber jar with no 3.x release, so it becomesmockito-corefirst. A declaredmockito-inlineis upgraded as well, as before 3.4 it depends on amockito-corewithoutMockito.mockStatic. - org.openrewrite.java.testing.wiremock.MigrateContentTypeHeaderCharset: WireMock 3's
ContentTypeHeader.charset()fell back toUTF_8when the header was missing or carried no charset, while 4.x returns anOptionalthat is empty in those cases. AppendorElse(StandardCharsets.UTF_8)so the value stays what it was; reaching forget()ororElse(null)instead, which is the easy way to make the compiler happy, would turn a missing charset into an exception or a null. - org.openrewrite.java.testing.wiremock.MigrateRequestMethodIsOneOf: WireMock 3's
isOneOfwas an instance method answering whether the method was one of those given. In 4.x it is static and builds a matcher instead, somethod.isOneOf(GET, POST)quietly stops being a boolean. Rewrite it asRequestMethod.isOneOf(GET, POST).match(method).isExactMatch(), which asks the same question of the new API. - org.openrewrite.java.testing.wiremock.MigrateStubMappingUuidToId: WireMock 3 serialized a stub mapping's identifier as both
idanduuid, but 4.x dropped the redundantuuidfield. A stub that carries onlyuuidstill parses under 4.x, silently getting a randomly generated identifier instead, which breaks anything addressing the stub by id such asremoveStub,editStuborPUT /__admin/mappings/{id}. Renameuuidtoid, or drop it where anidis already present. Only stub mapping files are considered, meaning JSON below amappingsdirectory holding an object with arequestorresponsemember and auuidholding a UUID. - org.openrewrite.java.testing.wiremock.RemoveDuplicateContentTypeHeader: WireMock 3 ran on Jetty 11, which stripped every
Content-Typeresponse header but the last, so a stub configured with several of them served only one. WireMock 4 returns all of them, and some clients reject a response carrying more than one. Keep only the last value, which is the one WireMock 3 actually sent. This is a 3 to 4 migration step: run against a project already on 4.x that deliberately serves more than oneContent-Type, it would drop values that are currently reaching the client. - org.openrewrite.java.testing.wiremock.RemoveDuplicateContentTypeHeaders: Collapse duplicate
Content-Typeresponse headers in both stub files and the Java DSL, but only where the module still depends on WireMock 3.x. Jetty 11 already served a single value there, so dropping the rest changes nothing; against 4.x the extra values really do reach the client, and removing them would. - org.openrewrite.java.testing.wiremock.RemoveDuplicateContentTypeStubHeader: WireMock 3 ran on Jetty 11, which stripped every
Content-Typeresponse header but the last, so a stub file listing several of them served only one. WireMock 4 returns all of them, and some clients reject a response carrying more than one. Keep only the last value, which is the one WireMock 3 actually sent. Only JSON below amappingsdirectory is considered, and request header matchers are untouched, since those hold matcher objects rather than plain strings. This is a 3 to 4 migration step: run against a project already on 4.x that deliberately serves more than oneContent-Type, it would drop values that are currently reaching the client. - org.openrewrite.java.testing.wiremock.ReplaceRemovedConstructors: WireMock 4 made its primary domain classes immutable, leaving only the canonical all arguments constructor on each and moving everything else behind a builder. Replace the removed convenience constructors of
StubMapping,ResponseDefinition,RequestPatternandWireMockwith the equivalent builder call, andRequestPattern.everything()withRequestPattern.ANYTHING. - org.openrewrite.java.testing.wiremock.ReplaceSettersWithTransform: WireMock 4 made
StubMappingandResponseDefinitionimmutable, removing their setters in favour of a builder reached throughtransform(Consumer<Builder>). Rewrite in place mutation such asstubMapping.setRequest(pattern);tostubMapping = stubMapping.transform(builder -> builder.setRequest(pattern));, collapsing consecutive setter calls on the same receiver into a singletransformcall. - org.openrewrite.java.testing.wiremock.Wiremock3to4Migration: Upgrade WireMock to 4.x, which requires Java 17, ships Jetty 12.1 by default, splits JUnit support out into separate modules and makes the primary domain classes immutable. Note that
RequestMethod.GET_OR_HEADis a multi method matcher in 4.x rather than a method namedGET_OR_HEAD, so code reading a name off that particular constant needs a look. - org.openrewrite.javascript.search.FindVendoredOrBundled: Find JavaScript and TypeScript sources that are vendored, bundled or build output, based on their path (
node_modules/,bower_components/,vendor/,dist/,*.min.*,*.bundle.*) or a trailingsourceMappingURLcomment. - org.openrewrite.mainframe.cobol.cleanup.RemoveWithDebuggingMode: Remove debugging mode from SOURCE-COMPUTER paragraphs.
- org.openrewrite.mainframe.cobol.search.FindCopybook: Find all copy statements with the copybook name.
- org.openrewrite.mainframe.cobol.search.FindIndicators: Find matching indicators. Currently, this recipe will not mark indicators on copybook code.
- org.openrewrite.mainframe.cobol.search.FindReference: Finds an identifier by an exact match or regex pattern in COBOL, copybooks, and/or JCL.
- org.openrewrite.mainframe.cobol.search.FindRelationships: Build a list of relationships for diagramming and exploration.
- org.openrewrite.mainframe.cobol.search.FindWord: Search for COBOL words based on a search term.
- org.openrewrite.mainframe.jcl.search.FindWord: Search for JCL words based on a search term.
- org.openrewrite.maven.MigrateToMaven3_10: Migrates a project to Maven 3.10. Maven 3.10 rejects some POMs that earlier Maven 3 versions built with a warning, such as POMs with duplicate dependency or plugin declarations. This recipe fixes those POMs and updates an existing Maven wrapper to Maven 3.10.
- org.openrewrite.quarkus.MigrateToQuarkus_v4_0_0: Quarkus update recipes to upgrade your application to 4.0.0.
- org.openrewrite.ruby.migrate.CharacterLiteralToString: In Ruby 1.9 and later, characters are simply strings of length 1. That is, the literal
?Ais the same as the literal'A', and there is really no need for the character literal syntax in new code. - org.openrewrite.ruby.migrate.UpgradeToRuby1_9: This recipe will apply changes commonly needed when migrating to Ruby 1.9.
- org.openrewrite.scala.format.AutoFormat: Format Scala code using a standard comprehensive set of Scala formatting recipes.
- org.openrewrite.staticanalysis.FindIgnoredCheckReturnValue: Marks invocations whose result is discarded even though the method is annotated with
@CheckReturnValue, either directly or through its enclosing class or package. Any annotation namedCheckReturnValueis recognized, and@CanIgnoreReturnValueopts a method or class back out. Ignoring such a result is usually a bug, such as calling a method on an immutable object without using the returned copy. Calls expected to throw, Mockito stubbing and verification, calls on the current instance in custom AssertJ assertion constructors, and code under@SuppressWarnings("CheckReturnValue")are not marked. - org.openrewrite.staticanalysis.FindMainWithThrowsClause: Marks JVM entry-point
mainmethods (public static void main(String[])or the varargs equivalent) that declare athrowsclause. Uncaught exceptions frommainpropagate to the JVM's default handler, which just prints the stack trace and returns exit code 1. Handle exceptions explicitly and exit with a meaningful code.
Changed Recipes
- org.openrewrite.gradle.search.ModuleHasDependency was changed:
- Old Options:
artifactIdPattern: { type: String, required: true }configuration: { type: String, required: false }groupIdPattern: { type: String, required: true }version: { type: String, required: false }
- New Options:
artifactIdPattern: { type: String, required: true }configuration: { type: String, required: false }groupIdPattern: { type: String, required: true }onlyDirect: { type: Boolean, required: false }version: { type: String, required: false }
- Old Options:
- org.openrewrite.java.dependencies.ChangeDependency was changed:
- Old Options:
changeManagedDependency: { type: Boolean, required: false }newArtifactId: { type: String, required: false }newGroupId: { type: String, required: false }newVersion: { type: String, required: false }oldArtifactId: { type: String, required: true }oldGroupId: { type: String, required: true }overrideManagedVersion: { type: Boolean, required: false }versionPattern: { type: String, required: false }
- New Options:
changeManagedDependency: { type: Boolean, required: false }changePluginDependencies: { type: Boolean, required: false }newArtifactId: { type: String, required: false }newGroupId: { type: String, required: false }newVersion: { type: String, required: false }oldArtifactId: { type: String, required: true }oldGroupId: { type: String, required: true }overrideManagedVersion: { type: Boolean, required: false }versionPattern: { type: String, required: false }
- Old Options:
- org.openrewrite.maven.ChangeDependencyGroupIdAndArtifactId was changed:
- Old Options:
changeManagedDependency: { type: Boolean, required: false }newArtifactId: { type: String, required: false }newGroupId: { type: String, required: false }newVersion: { type: String, required: false }oldArtifactId: { type: String, required: true }oldGroupId: { type: String, required: true }overrideManagedVersion: { type: Boolean, required: false }versionPattern: { type: String, required: false }
- New Options:
changeManagedDependency: { type: Boolean, required: false }changePluginDependencies: { type: Boolean, required: false }newArtifactId: { type: String, required: false }newGroupId: { type: String, required: false }newVersion: { type: String, required: false }oldArtifactId: { type: String, required: true }oldGroupId: { type: String, required: true }overrideManagedVersion: { type: Boolean, required: false }versionPattern: { type: String, required: false }
- Old Options: