LogoLogo
GitHub Join us on Slack Join us on Discord Ask on Stack Overflow
GitHubJoin us on SlackJoin us on DiscordAsk on Stack Overflow
  • Introduction to OpenRewrite
  • Running Recipes
    • Quickstart: Setting up your project and running recipes
    • Running Rewrite on a Gradle project without modifying the build
    • Running Rewrite on a Maven project without modifying the build
    • Running Rewrite on a multi-module Maven project
    • Running text based recipes
    • Getting started with data tables
    • Popular recipe guides
      • Common static analysis issue remediation
      • Automatically fix Checkstyle violations
      • Migrate to Java 17
      • Migrate to JUnit 5 from JUnit 4
      • Migrate to Spring Boot 3 from Spring Boot 2
      • Migrate to Spring Boot 2 from Spring Boot 1
      • Migrate to Quarkus 2 from Quarkus 1
      • Migrate to Micronaut 4 from Micronaut 3
      • Migrate to Micronaut 3 from Micronaut 2
      • Migrate to SLF4J from Log4J
      • Use SLF4J parameterized logging
      • Refactoring with declarative YAML recipes
      • Automating Maven dependency management
      • Migrate Hamcrest to AssertJ
      • Migrate JUnit Asserts to AssertJ
      • Migrate to Jakarta EE 10
  • Authoring Recipes
    • Recipe development environment
    • The different types of recipes
    • Writing a Java refactoring recipe
    • Getting started with Refaster template recipes
    • Recipe testing
    • Recipe conventions and best practices
    • Modifying methods with JavaTemplate
    • Creating multiple visitors in one recipe
    • Writing recipes over multiple source file types
    • Using multiple versions of a library in a project
  • Recipe catalog
    • Core
      • Delete files
      • Find LST provenance
      • Find call graph
      • Find colliding source files
      • Find deserialization errors
      • Find duplicate source files
      • Find files
      • Find instances of type Quark
      • Find source files with ParseExceptionResult markers
      • Is in repository
      • Language composition report
      • List runtime classpath
      • Rename a file
      • Set file permission attributes
      • Show Git source control metadata
    • Ai
      • Find comments' language distribution
      • Fix mis-encoded French comments, javadocs and pom.xml comments
      • Fix mis-encoded comments in French
      • Fix mis-encoded comments in French in pom.xml files
      • List all methods used
      • Research
        • Find method invocations that resemble a pattern
        • Get embeddings for code snippets in code
        • Get recommendations
      • Timefold
        • Solver
          • Migration
            • Change the Timefold version
            • Migrate from OptaPlanner to Timefold Solver
            • Upgrade to the latest Timefold Solver
            • Fork
              • Migrate all Maven and Gradle groupIds and artifactIds from OptaPlanner to Timefold
            • V8
              • Constraint Streams: don't use package name in the asConstraint() method
              • ConstraintStreams: use asConstraint() methods to define constraints
              • PlanningVariable's nullable is newly called unassignedValues
              • Replace getConstraint*() with getConstraintRef()
              • Score: use shorter getters
              • ScoreManager: explain(), update()
              • SolverManager: use builder API
              • Use non-deprecated SingleConstraintAssertion methods
    • Analysis
      • Controlflow
        • Control Flow Visualization
      • Search
        • Find method usages
        • Finds flow between two methods
        • URIs created with an HTTP scheme
    • Android
      • Change Android SDK version
      • Upgrade to Android SDK 33
      • Upgrade to Android SDK 34
      • Upgrade to Android SDK 35
    • Apache
      • Commons
        • Codec
          • Prefer java.util.Base64
        • Collections
          • Migrates to Apache Commons Collections 4.x
        • Io
          • ApacheCommonsFileUtils Refaster recipes
          • Prefer System.lineSeparator()
          • Prefer java.nio.charset.StandardCharsets
          • Prefer java.nio.file.Files
          • Relocate org.apache.commons:commons-io to commons-io:commons-io
          • Replace FileUtils.getFile(String...) with JDK provided API
          • Replace FileUtils.writeStringToFile(File, String) with JDK provided API
          • Use IOUtils method that include their charset encoding
        • Lang
          • ApacheCommonsStringUtils Refaster recipes
          • Migrates to Apache Commons Lang 3.x
          • Replace StringUtils.abbreviate(String, int) with JDK provided API
          • Replace StringUtils.capitalize(String) with JDK provided API
          • Replace StringUtils.defaultString(String) with JDK provided API
          • Replace StringUtils.defaultString(String, String) with JDK provided API
          • Replace StringUtils.deleteWhitespace(String) with JDK provided API
          • Replace StringUtils.equals(CharSequence, CharSequence) with JDK provided API
          • Replace StringUtils.equalsIgnoreCase(CharSequence, CharSequence) with JDK provided API
          • Replace StringUtils.lowerCase(String) with JDK provided API
          • Replace StringUtils.removeEnd(String, String) with JDK provided API
          • Replace StringUtils.replace(String, String, String) with JDK provided API
          • Replace StringUtils.reverse(String) with JDK provided API
          • Replace StringUtils.split(String) with JDK provided API
          • Replace StringUtils.strip(String) with JDK provided API
          • Replace StringUtils.trim(String) with JDK provided API
          • Replace StringUtils.trimToEmpty(String) with JDK provided API
          • Replace StringUtils.trimToNull(String) with JDK provided API
          • Replace StringUtils.upperCase(String) with JDK internals
          • Replace any StringUtils#isEmpty(String) and #isNotEmpty(String)
        • Math
          • Migrates to Apache Commons Math 3.x
      • Httpclient4
        • Maps deprecated classes from Apache HttpClient 4.5.x to suggested replacements
        • Migrates deprecated DefaultHttpClient
        • Migrates to ApacheHttpClient 4.5.x
      • Httpclient5
        • Adds TimeUnit to timeouts and duration methods
        • Adds a TimeUnit argument to the matched method invocations
        • Migrate to ApacheHttpClient 5.x
        • Migrate to ApacheHttpClient 5.x Classes Namespace from 4.x
        • Migrate to ApacheHttpClient 5.x deprecated methods from 4.x
        • Migrate to ApacheHttpClient 5.x deprecated methods from 4.x
        • Replaces AuthScope.ANY
        • Replaces deprecated HttpResponse::getStatusLine()
      • Maven
        • Shared
          • MavenSharedStringUtils Refaster recipes
          • Replace StringUtils.abbreviate(String, int) with JDK provided API
          • Replace StringUtils.capitalise(String) with JDK provided API
          • Replace StringUtils.defaultString(Object) with JDK provided API
          • Replace StringUtils.defaultString(Object, String) with JDK provided API
          • Replace StringUtils.deleteWhitespace(String) with JDK provided API
          • Replace StringUtils.equals(String, String) with JDK provided API
          • Replace StringUtils.equalsIgnoreCase(String, String) with JDK provided API
          • Replace StringUtils.lowerCase(String) with JDK provided API
          • Replace StringUtils.replace(String, String, String) with JDK provided API
          • Replace StringUtils.reverse(String) with JDK provided API
          • Replace StringUtils.split(String) with JDK provided API
          • Replace StringUtils.strip(String) with JDK provided API
          • Replace StringUtils.trim(String) with JDK provided API
          • Replace StringUtils.upperCase(String) with JDK provided API
      • Poi
        • Migrates to Apache POI 3.17
        • Replace Cell.setCellType(Cell.CELL_TYPE_BLANK) with Cell.setCellType(CellType.BLANK)
        • Replace Cell.setCellType(Cell.CELL_TYPE_BOOLEAN) with Cell.setCellType(CellType.BOOLEAN)
        • Replace Cell.setCellType(Cell.CELL_TYPE_ERROR) with Cell.setCellType(CellType.ERROR)
        • Replace Cell.setCellType(Cell.CELL_TYPE_FORMULA) with Cell.setCellType(CellType.FORMULA)
        • Replace Cell.setCellType(Cell.CELL_TYPE_NUMERIC) with Cell.setCellType(CellType.NUMERIC)
        • Replace Cell.setCellType(Cell.CELL_TYPE_STRING) with Cell.setCellType(CellType.STRING)
        • Replace Cell.setCellType(int) with Cell.setCellType(CellType)
        • Replace Font.setBoldweight(Font.BOLDWEIGHT_BOLD) with Font.setBold(true)
        • Replace Font.setBoldweight(Font.BOLDWEIGHT_NORMAL) with Font.setBold(false)
        • Replace Font.setBoldweight(short) with Font.setBold(boolean)
    • CircleCI
      • Install an orb
      • Update CircleCI image
    • Codehaus
      • Plexus
        • PlexusFileUtils Refaster recipes
        • PlexusStringUtils Refaster recipes
        • Replace FileUtils.deleteDirectory(File) with JDK provided API
        • Replace FileUtils.deleteDirectory(String) with JDK provided API
        • Replace FileUtils.fileExists(String) with JDK provided API
        • Replace FileUtils.getFile(String) with JDK provided API
        • Replace StringUtils.abbreviate(String, int) with JDK provided API
        • Replace StringUtils.capitalise(String) with JDK provided API
        • Replace StringUtils.defaultString(Object) with JDK provided API
        • Replace StringUtils.defaultString(Object, String) with JDK provided API
        • Replace StringUtils.deleteWhitespace(String) with JDK provided API
        • Replace StringUtils.equals(String, String) with JDK provided API
        • Replace StringUtils.equalsIgnoreCase(String, String) with JDK provided API
        • Replace StringUtils.lowerCase(String) with JDK provided API
        • Replace StringUtils.replace(String, String, String) with JDK provided API
        • Replace StringUtils.reverse(String) with JDK provided API
        • Replace StringUtils.split(String) with JDK provided API
        • Replace StringUtils.strip(String) with JDK provided API
        • Replace StringUtils.trim(String) with JDK provided API
        • Replace StringUtils.upperCase(String) with JDK provided API
    • Concourse
      • Change Concourse value
      • Change resource version
      • Find resource
      • Update git resource source.uri references
      • Search
        • Find pinned resources by type
        • Find privileged resource_type definitions.
    • Config
      • org.openrewrite.config.CompositeRecipe
    • C#
      • Dependencies
        • Dependency insight for C#
        • Find and fix vulnerable Nuget dependencies
        • Upgrade C# dependency versions
    • Cucumber
      • Cucumber-JVM
        • Cucumber to JUnit test @Suite
        • Drop SummaryPrinter
        • Migrate cucumber-java8 to cucumber-java
        • Replace @Cucumber with @Suite
        • Replace cucumber-java step definition regexes with Cucumber expressions
        • Replace cucumber-java8 hook definition with cucumber-java
        • Replace cucumber-java8 step definitions with cucumber-java
        • Upgrade to Cucumber-JVM 2.x
        • Upgrade to Cucumber-JVM 5.x
        • Upgrade to Cucumber-JVM 7.x
    • Docker
      • Search
        • Find uses of docker base images
    • .NET
      • Analyze a .NET project using upgrade-assistant
      • Upgrade a .NET project using upgrade-assistant
      • Upgrade to .NET 6.0 using upgrade-assistant
      • Upgrade to .NET 7.0 using upgrade-assistant
      • Upgrade to .NET 8.0 using upgrade-assistant
      • Upgrade to .NET 9.0 using upgrade-assistant
    • Feature flags
      • Remove a String feature flag for feature key
      • Remove a boolean feature flag for feature key
      • FF4j
        • Remove FF4j's check for feature key
        • Search
          • Find a FF4j feature flag
      • LaunchDarkly
        • Change the default value for feature key
        • Migrate LDUser to LDContext
        • Migrate to LaunchDarkly 6.x
        • Migrate to LaunchDarkly 7.x
        • Remove LaunchDarkly's boolVariation for feature key
        • Remove LaunchDarkly's boolVariation for feature key
        • Search
          • Find a LaunchDarkly feature flag
      • OpenFeature
        • Remove OpenFeature's getBooleanValue for feature key
        • Search
          • Find an OpenFeature feature flag
      • Search
        • Find a feature flag
      • Unleash
        • Remove Unleash's isEnabled for feature key
        • Search
          • Find an Unleash feature flag
    • GitHub Actions
      • Add cron workflow trigger
      • Add manual workflow trigger
      • Cancel in-progress workflow when it is triggered again
      • Change GitHub Action
      • Change GitHub Action version
      • Change dependabot schedule interval
      • Check for github-actions updates daily
      • Check for github-actions updates weekly
      • Find GitHub action secret references
      • Remove all cron triggers
      • Replace runners for a job
      • Setup Java dependency caching
      • Upgrade actions/setup-java java-version
      • Use actions/setup-java IBM semeru distribution
      • Use actions/setup-java temurin distribution
      • Use actions/setup-java temurin distribution as they are cached in hosted runners
      • Use secrets: inherit if possible
      • Gradle
        • Rename gradle/gradle-build-action to gradle/actions/setup-gradle
        • Rename gradle/wrapper-validation-action to gradle/actions/wrapper-validation
    • Gradle
      • Add Gradle dependency
      • Add Gradle property
      • Change Extra Property
      • Change Gradle dependency
      • Change Gradle dependency artifact
      • Change Gradle dependency group
      • Change a Gradle dependency classifier
      • Change a Gradle dependency configuration
      • Change a Gradle dependency extension
      • Dependency constraint to resolution rule
      • Enable Gradle build cache
      • Enable Gradle parallel execution
      • Migrate to Gradle 5 from Gradle 4
      • Migrate to Gradle 6 from Gradle 5
      • Migrate to Gradle 7 from Gradle 6
      • Migrate to Gradle 8 from Gradle 7
      • Remove a Gradle dependency
      • Remove an enabled Gradle preview feature
      • Remove repository
      • Update Gradle project Java compatibility
      • Update Gradle wrapper
      • Upgrade Gradle dependency versions
      • Upgrade transitive Gradle dependencies
      • Use Map notation for Gradle dependency declarations
      • Use String notation for Gradle dependency declarations
      • Plugins
        • Add Gradle plugin
        • Add Gradle settings plugin
        • Add a Gradle settings repository
        • Add the Develocity Gradle plugin
        • Change a Gradle plugin
        • Change a Gradle plugin version by id
        • Migrate from Gradle Enterprise to Develocity
        • Remove Gradle plugin
        • Remove Gradle settings plugin
        • Update a Gradle plugin by id
      • Search
        • Find Gradle dependencies blocks
        • Find Gradle dependency
        • Find Gradle plugin
        • Find Gradle projects
        • Find Gradle repository
        • Find Gradle wrappers
        • Gradle dependency insight
      • Security
        • Use HTTPS for repositories
      • Spring
        • Add io.spring.dependency-management plugin, if in use
    • Groovy
      • Format
        • Format Groovy code
        • Groovy GString curly braces
        • Move a closure which is the last argument of a method invocation out of parentheses
        • Stylize Groovy code to omit parentheses
    • Hcl
      • Delete content
      • Move content to another file
      • Format
        • Blank lines
        • Format HCL code
        • Normalize format
        • Remove trailing whitespace
        • Spaces
        • Tabs and indents
      • Search
        • Find and replace literals in HCL files
        • Find content
    • Hibernate
      • @Type annotation type parameter migration
      • Migrate Hibernate dependencies to 6.1.x
      • Migrate to Hibernate 6.1.x
      • Migrate to Hibernate 6.2.x
      • Migrate to Hibernate 6.3.x
      • Rename JavaTypeDescriptor and SqlTypeDescriptor to JavaType and SqlType
      • Replace @LazyCollection with jakarta.persistence.FetchType
      • Replace boolean type mappings with converters
      • Migratetohypersistenceutilshibernate6
        • Migrate Hibernate Types to Hypersistence Utils 6.0
        • Migrate Hibernate Types to Hypersistence Utils 6.2
        • Migrate Hibernate Types to Hypersistence Utils 6.3
      • Validator
        • Migrate to Hibernate Validator 8.0.x
    • Io
      • Quarkus
        • Updates
          • Camel
            • Camel40
              • Migrate camel3 application to camel4.
            • Camel44
              • Migrates camel 4.0 application to camel 4.4
          • Core
            • Quarkus30
              • Adjust all-open directives in Kotlin plugin configuration
              • Adjust application.properties for jakarta.* packages
              • Adjust application.yaml for jakarta.* packages
              • Migrate Jackson from javax to jakarta namespace
              • Migrate RestAssured from javax to jakarta namespace by upgrading to a version compatible with J2EE9
              • Migrate deprecated javax.activation packages to jakarta.activation
              • Migrate deprecated javax.annotation packages to jakarta.annotation
              • Migrate deprecated javax.annotation packages to jakarta.annotation
              • Migrate deprecated javax.annotation packages to jakarta.annotation
              • Migrate deprecated javax.annotation.security packages to jakarta.annotation.security
              • Migrate deprecated javax.annotation.sql packages to jakarta.annotation.sql
              • Migrate deprecated javax.batch packages to jakarta.batch
              • Migrate deprecated javax.decorator packages to jakarta.decorator
              • Migrate deprecated javax.ejb packages to jakarta.ejb
              • Migrate deprecated javax.el packages to jakarta.el
              • Migrate deprecated javax.enterprise packages to jakarta.enterprise
              • Migrate deprecated javax.faces packages to jakarta.faces
              • Migrate deprecated javax.inject packages to jakarta.inject
              • Migrate deprecated javax.interceptor packages to jakarta.interceptor
              • Migrate deprecated javax.jms packages to jakarta.jms
              • Migrate deprecated javax.json packages to jakarta.json
              • Migrate deprecated javax.jws packages to jakarta.jws
              • Migrate deprecated javax.mail packages to jakarta.mail
              • Migrate deprecated javax.persistence packages to jakarta.persistence
              • Migrate deprecated javax.resource packages to jakarta.resource
              • Migrate deprecated javax.security.auth.message packages to jakarta.security.auth.message
              • Migrate deprecated javax.security.enterprise packages to jakarta.security.enterprise
              • Migrate deprecated javax.security.jacc packages to jakarta.security.jacc
              • Migrate deprecated javax.servlet packages to jakarta.servlet
              • Migrate deprecated javax.soap packages to jakarta.soap
              • Migrate deprecated javax.transaction packages to jakarta.transaction
              • Migrate deprecated javax.validation packages to jakarta.validation
              • Migrate deprecated javax.websocket packages to jakarta.websocket
              • Migrate deprecated javax.ws packages to jakarta.ws
              • Migrate deprecated javax.xml.bind packages to jakarta.xml.bind
              • Migrate deprecated javax.xml.ws packages to jakarta.xml.ws
              • Migrate xmlns entries in persistence.xml files
              • Rename a file example
              • io.quarkus.updates.core.quarkus30.AdditionalChanges
              • io.quarkus.updates.core.quarkus30.ApplicationProperties
              • io.quarkus.updates.core.quarkus30.ApplicationYml
              • io.quarkus.updates.core.quarkus30.JavaxConfigurationFiles
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaAdditionalMigration
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaCodestarts
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaCodestartsTests
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaDocumentationAdoc
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaDocumentationMd
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaKotlin
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaKotlinCodestarts
              • io.quarkus.updates.core.quarkus30.JavaxToJakartaKotlinCodestartsTests
              • io.quarkus.updates.core.quarkus30.Kotlin
              • io.quarkus.updates.core.quarkus30.UpgradeQuarkiverse
            • Quarkus31
              • io.quarkus.updates.core.quarkus31.RemoveMockitoInline
            • Quarkus310
              • Adjust the package properties
              • io.quarkus.updates.core.quarkus310.FlywayDb2
              • io.quarkus.updates.core.quarkus310.FlywayDerby
              • io.quarkus.updates.core.quarkus310.FlywayPostgreSQL
              • io.quarkus.updates.core.quarkus310.SyncHibernateJpaModelgenVersionWithBOM
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackagePom
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageSimpleProperties
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeFastJar
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeJar
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeMutableJar
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeNative
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeNativeSources
              • io.quarkus.updates.core.quarkus310.UpdateConfigPackageTypeUberJar
            • Quarkus311
              • io.quarkus.updates.core.quarkus311.SyncHibernateJpaModelgenVersionWithBOM
            • Quarkus312
              • io.quarkus.updates.core.quarkus312.SyncHibernateJpaModelgenVersionWithBOM
            • Quarkus313
              • io.quarkus.updates.core.quarkus313.SyncHibernateJpaModelgenVersionWithBOM
              • io.quarkus.updates.core.quarkus313.UpdateTestOIDCAuthServerUrl
            • Quarkus32
              • io.quarkus.updates.core.quarkus32.ApplicationProperties
              • io.quarkus.updates.core.quarkus32.ApplicationYml
              • io.quarkus.updates.core.quarkus32.InjectMock
            • Quarkus33
              • io.quarkus.updates.core.quarkus33.ApplicationProperties
              • io.quarkus.updates.core.quarkus33.ApplicationYml
              • io.quarkus.updates.core.quarkus33.GraalVMSubstitutionsArtifact
            • Quarkus35
              • io.quarkus.updates.core.quarkus35.MutinyUniAndGroupCombinedWith
              • io.quarkus.updates.core.quarkus35.MutinyUniMemoizeAtLeast
            • Quarkus36
              • io.quarkus.updates.core.quarkus36.JaegerSmallRyeOpenTracing
            • Quarkus37
              • Add an annotation processor to the Maven Compiler plugin configuration
              • Adopt setLongThreadID in java.util.logging.LogRecord
              • Change Maven Compiler plugin annotation processor groupId, artifactId and/or the version
              • Change Maven Java version property values to 17
              • Migrate to Java 17
              • Set visibility of premain and agentmain methods to public
              • Sync Maven Compiler plugin annotation processor version with the one provided by the BOM
              • Use SunJSSE instead of com.sun.net.ssl.internal.ssl.Provider
              • Use java.security.cert instead of javax.security.cert
              • io.quarkus.updates.core.quarkus37.AddJpaModelgenAnnotationProcessor
              • io.quarkus.updates.core.quarkus37.AddJpaModelgenAnnotationProcessorIfOldArtifact
              • io.quarkus.updates.core.quarkus37.HibernateSearchOutboxPolling
              • io.quarkus.updates.core.quarkus37.MavenPlugins
              • io.quarkus.updates.core.quarkus37.RemoveJpaModelgenDependencies
              • io.quarkus.updates.core.quarkus37.ReplaceJpaModelgenAnnotationProcessor
              • io.quarkus.updates.core.quarkus37.ResteasyClientRenaming
              • io.quarkus.updates.core.quarkus37.SyncHibernateJpaModelgenVersionWithBOM
            • Quarkus38
              • io.quarkus.updates.core.quarkus38.SyncHibernateJpaModelgenVersionWithBOM
            • Quarkus383
              • io.quarkus.updates.core.quarkus383.GraalSDK
            • Quarkus39
              • Remove an annotation processor from the Maven Compiler plugin configuration
              • io.quarkus.updates.core.quarkus39.GraalSDK
              • io.quarkus.updates.core.quarkus39.Relocations
              • io.quarkus.updates.core.quarkus39.RemovePanacheAnnotationProcessor
              • io.quarkus.updates.core.quarkus39.SyncHibernateJpaModelgenVersionWithBOM
              • io.quarkus.updates.core.quarkus39.UpdateConfigRoots
    • Java
      • Add ASLv2 license header
      • Add a literal method argument
      • Add a null method argument
      • Add imports for fully qualified references to types
      • Add license header
      • Add method parameter to a method declaration
      • Add or update annotation attribute
      • Change annotation attribute name
      • Change method access level
      • Change method name
      • Change method target to static
      • Change method target to variable
      • Change static field access to static method access
      • Change type
      • Create Java class
      • Delete method argument
      • Demonstrate rendering of Markup markers
      • Order imports
      • Randomize tree IDs
      • Remove annotation
      • Remove annotation attribute
      • Remove interface implementations
      • Remove static import
      • Remove unused imports
      • Rename package name
      • Reorder method arguments
      • Replace String literal with constant
      • Replace annotation
      • Replace constant with another constant
      • Replace constant with literal value
      • Simplify a call chain
      • Transform calls to Objects.isNull(..) and Objects.nonNull(..)
      • Update source positions
      • Use static import
      • AI tools
        • Calculate token length of classes
        • Calculate token length of method definitions
      • Camel
        • Migrate
          • Camel API changes in application.properties
          • Remove non existing camel-quarkus extensions
      • Dependencies
        • Add Gradle or Maven dependency
        • Change Gradle or Maven dependency
        • Dependency insight for Gradle and Maven
        • Dependency report
        • Dependency resolution diagnostic
        • Find and fix vulnerable dependencies
        • Find licenses in use in third-party dependencies
        • Find relocated dependencies
        • Remove a Gradle or Maven dependency
        • Remove expired suppressions
        • Software bill of materials
        • Upgrade Gradle or Maven dependency versions
        • Upgrade transitive Gradle or Maven dependencies
        • Search
          • Find the oldest matching dependency version in use
      • Format
        • Blank lines
        • End files with a single newline
        • Format Java code
        • Method parameter padding
        • No whitespace after
        • No whitespace before
        • Normalize format
        • Normalize line breaks
        • Normalize to tabs or spaces
        • Pad empty for loop components
        • Remove trailing whitespace
        • Single line comments begin with a whitespace
        • Spaces
        • Tabs and indents
        • Typecast parentheses padding
        • Wrapping and braces
      • Jackson
        • Migrate classes from Jackson Codehaus (legacy) to Jackson FasterXML
        • Migrate from Jackson Codehaus (legacy) to Jackson FasterXML
        • Codehaus
          • Migrate dependencies from Jackson Codehaus (legacy) to FasterXML
          • Migrate to Jackson @JsonInclude
      • Jspecify
        • Migrate from Jakarta annotation API to JSpecify
        • Migrate from JetBrains annotations to JSpecify
        • Migrate from javax annotation API to JSpecify
        • Migrate to JSpecify
        • Migrate to JSpecify
      • Liberty
        • Migrate from WebSphere traditional to Liberty
        • Removes invalid JNDI properties
        • Replace revokeSSOCookies with logout
        • Use getProperty("wlp.server.name")
        • Use getSSOCookieFromSSOToken and logout
      • Logging
        • Parameterize logging statements
        • Replace any Lombok log annotations with target logging framework annotation
        • Use logger instead of System.err print statements
        • Use logger instead of System.out print statements
        • Use logger instead of printStackTrace()
        • Use logger instead of system print statements
        • Jul
          • Replace JUL Level arguments with the corresponding method calls
          • Replace JUL Logger.log(Level.CONFIG, String) with Logger.config(String)
          • Replace JUL Logger.log(Level.CONFIG, Supplier) with Logger.config(Supplier)
          • Replace JUL Logger.log(Level.FINE, String) with Logger.fine(String)
          • Replace JUL Logger.log(Level.FINE, Supplier) with Logger.fine(Supplier)
          • Replace JUL Logger.log(Level.FINER, String) with Logger.finer(String)
          • Replace JUL Logger.log(Level.FINER, Supplier) with Logger.finer(Supplier)
          • Replace JUL Logger.log(Level.FINEST, String) with Logger.finest(String)
          • Replace JUL Logger.log(Level.FINEST, Supplier) with Logger.finest(Supplier)
          • Replace JUL Logger.log(Level.INFO, String) with Logger.info(String)
          • Replace JUL Logger.log(Level.INFO, Supplier) with Logger.info(Supplier)
          • Replace JUL Logger.log(Level.SEVERE, String) with Logger.severe(String)
          • Replace JUL Logger.log(Level.SEVERE, Supplier) with Logger.severe(Supplier)
          • Replace JUL Logger.log(Level.WARNING, String) with Logger.warning(String)
          • Replace JUL Logger.log(Level.WARNING, Supplier) with Logger.warning(Supplier)
        • Log4j
          • Log exceptions as parameters rather than as string concatenations
          • Migrate JCL to Log4j 2.x API
          • Migrate JUL to Log4j 2.x API
          • Migrate Log4j 1.x to Log4j 2.x
          • Migrate SLF4J to Log4j 2.x API
          • Parameterize Log4j 2.x logging statements
          • Prepend a random name to each Log4J statement
          • Rewrites JUL's Logger#entering method to Log4j API
          • Rewrites JUL's Logger#exiting method to Log4j API
          • Upgrade Log4j 2.x dependency version
        • Logback
          • Migrate Log4j 2.x Appender to logback-classic equivalents
          • Migrate Log4j 2.x Layout to logback-classic equivalents
          • Migrate Log4j 2.x to Logback
        • SLF4J
          • Change SLF4J log level
          • Enhances logging of exceptions by including the full stack trace in addition to the exception message
          • Loggers should be named for their enclosing classes
          • Migrate Apache Commons Logging 1.x to SLF4J 1.x
          • Migrate JUL to SLF4J
          • Migrate Log4j 1.x to SLF4J 1.x
          • Migrate Log4j 2.x to SLF4J 1.x
          • Migrate Log4j to SLF4J
          • Parameterize SLF4J's logging statements
          • Replace JUL Level.ALL logging with SLF4J's trace level
          • Replace JUL Logger creation with SLF4J LoggerFactory
          • Replace JUL Logger.config(Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.fine(Supplier) with SLF4J's Logger.atDebug().log(Supplier)
          • Replace JUL Logger.finer(Supplier) with SLF4J's Logger.atTrace().log(Supplier)
          • Replace JUL Logger.finest(Supplier) with SLF4J's Logger.atTrace().log(Supplier)
          • Replace JUL Logger.getLogger(Some.class.getCanonicalName()) with SLF4J's LoggerFactory.getLogger(Some.class)
          • Replace JUL Logger.getLogger(Some.class.getName()) with SLF4J's LoggerFactory.getLogger(Some.class)
          • Replace JUL Logger.info(Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.isLoggable(Level.ALL) with SLF4J's Logger.isTraceEnabled
          • Replace JUL Logger.isLoggable(Level.CONFIG) with SLF4J's Logger.isInfoEnabled()
          • Replace JUL Logger.isLoggable(Level.FINE) with SLF4J's Logger.isDebugEnabled()
          • Replace JUL Logger.isLoggable(Level.FINER) with SLF4J's Logger.isTraceEnabled()
          • Replace JUL Logger.isLoggable(Level.FINEST) with SLF4J's Logger.isTraceEnabled
          • Replace JUL Logger.isLoggable(Level.INFO) with SLF4J's Logger.isInfoEnabled()
          • Replace JUL Logger.isLoggable(Level.SEVERE) with SLF4J's Logger.isErrorEnabled()
          • Replace JUL Logger.isLoggable(Level.WARNING) with SLF4J's Logger.isWarnEnabled()
          • Replace JUL Logger.log(Level.ALL, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.CONFIG, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.FINE, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.FINER, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.FINEST, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.INFO, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.SEVERE, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.log(Level.WARNING, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL Logger.severe(Supplier) with SLF4J's Logger.atError().log(Supplier)
          • Replace JUL Logger.warning(Supplier) with SLF4J's Logger.atWarn().log(Supplier)
          • Replace JUL active Level check with corresponding SLF4J method calls
          • Replace JUL active Level check with corresponding SLF4J method calls
          • Replace JUL log(Level, String, Throwable) with corresponding SLF4J method calls
          • Replace JUL log(Level, Throwable, Supplier) with corresponding SLF4J method calls
          • Replace JUL logger.log(Level.ALL, String message, Throwable e) with SLF4J's Logger.trace(message, e)
          • Replace JUL logger.log(Level.ALL, e, Supplier) with SLF4J's Logger.atTrace().log(Supplier)
          • Replace JUL logger.log(Level.CONFIG, String message, Throwable e) with SLF4J's Logger.info(message, e)
          • Replace JUL logger.log(Level.CONFIG, e, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL logger.log(Level.FINE, String message, Throwable e) with SLF4J's Logger.debug(message, e)
          • Replace JUL logger.log(Level.FINE, e, Supplier) with SLF4J's Logger.atDebug().log(Supplier)
          • Replace JUL logger.log(Level.FINER, String message, Throwable e) with SLF4J's Logger.trace(message, e)
          • Replace JUL logger.log(Level.FINER, e, Supplier) with SLF4J's Logger.atTrace().log(Supplier)
          • Replace JUL logger.log(Level.FINEST, String message, Throwable e) with SLF4J's Logger.trace(message, e)
          • Replace JUL logger.log(Level.FINEST, e, Supplier) with SLF4J's Logger.atTrace().log(Supplier)
          • Replace JUL logger.log(Level.INFO, String message, Throwable e) with SLF4J's Logger.info(message, e)
          • Replace JUL logger.log(Level.INFO, e, Supplier) with SLF4J's Logger.atInfo().log(Supplier)
          • Replace JUL logger.log(Level.SEVERE, String message, Throwable e) with SLF4J's Logger.error(message, e)
          • Replace JUL logger.log(Level.SEVERE, e, Supplier) with SLF4J's Logger.atError().log(Supplier)
          • Replace JUL logger.log(Level.WARNING, String message, Throwable e) with SLF4J's Logger.warn(message, e)
          • Replace JUL logger.log(Level.WARNING, e, Supplier) with SLF4J's Logger.atWarn().log(Supplier)
          • Replace parameterized JUL level call with corresponding SLF4J method calls
          • SLF4J best practices
          • SLF4J logging statements should begin with constants
      • Micronaut
        • Add @Introspected to classes requiring a map representation
        • Add HttpRequest type parameter for implemented interfaces
        • Add Maven annotation processor path
        • Add Micronaut build plugins to 4.x
        • Add Test Resources Client dependency if needed
        • Add snakeyaml dependency if needed
        • Change Maven annotation processor path
        • Change factory method return types to reflect their resolved return type
        • Convert OncePerRequestServerFilter extensions to HttpServerFilter
        • Copy non-inherited annotations from super class
        • De-capitalize BeanIntrospection getProperty(..) and getRequiredProperty(..) name arguments
        • Find Micronaut properties config
        • Find Micronaut yaml config
        • Fix deprecated no-arg ExceptionHandler constructors
        • Migrate from Micronaut 2.x to 3.x
        • Migrate from Micronaut 3.x to 4.x
        • Migrate the use of TaskExecutors with blocking IO
        • Provider implementation beans to Micronaut @Factory
        • Remove Maven annotation processor path
        • Remove unnecessary dependencies
        • Remove withJansi Logback configuration
        • Update jakarta annotations dependency
        • Update relocated Micronaut Security config properties
        • Update relocated Micronaut Security config yaml keys
        • Update the Micronaut Data library
        • Update the Micronaut Retry support
        • Update the Micronaut Security library
        • Update the Micronaut Session support
        • Update the Micronaut Websocket support
        • Update the Micronaut version to 4.x
        • Update the version of core annotation processors
        • Update to Micronaut 4.x platform BOM
        • Update to Micronaut Email 2.x
        • Update to Micronaut Validation 4.x
        • Upgrade gradle.properties Micronaut version
        • Upgrade micronaut.version Maven property
      • Modernize
        • Add JDeprScan Maven Plug-in
        • Add maven jar plugin to suppress illegal reflection warnings
        • Add missing isWrapperFor and unwrap methods.
        • Adds missing JDBC interface methods.
        • Adds missing method implementations
        • Adopt javax.security.auth.Subject.current() and javax.security.auth.Subject.callAs() methods
        • Adopt setLongThreadID in java.util.logging.LogRecord
        • Avoid using the deprecated empty finalize() method in java.desktop
        • Behavior change to bean discovery in modules with beans.xml file with no version specified
        • Change beans.xml schemaLocation to match XML namespace
        • Change java.lang.reflect.Modifier and java.lang.invoke.ConstantBootstraps method calls to static
        • Change javax.tools.ToolProvider methods calls to static
        • Change method invocation return type
        • Disable the persistence unit second-level cache
        • Do not use java.xml.bind and java.activation modules in WebSphere Liberty
        • Do not use java.xml.ws module in WebSphere Liberty
        • Force indentation to either tabs or spaces
        • MBean and MXBean interfaces must be public
        • Migrate from IBM Runtimes to Oracle Runtimes
        • Migrate to IBM Semeru Runtimes
        • Migrate to Java 11
        • Migrate to Java 17
        • Migrate to Java 21
        • Migrate to Java 6
        • Migrate to Java 7
        • Migrate to Java 8
        • Migrate to JavaEE6
        • Migrate to JavaEE7
        • Migrate to JavaEE8
        • Prefer java.util.Base64 instead of sun.misc
        • Remove Runtime.traceInstructions(boolean) and Runtime.traceMethodCalls methods
        • Remove Thread.countStackFrames() method
        • Remove Thread.destroy() and Thread.stop(Throwable)
        • Remove explicit casts on Arrays.asList(..).toArray()
        • Remove illegal semicolons
        • Remove methods calls
        • Rename final method declarations getSuppressed() and addSuppressed(Throwable exception) in classes that extend Throwable
        • Replace AWT getPeer() method
        • Replace DTO method parameters with data elements
        • Replace RMIConnectorServer.CREDENTIAL_TYPES constant
        • Replace SSLSession.getPeerCertificateChain() method
        • Replace String literal
        • Replace com.sun.awt.AWTUtilities static method invocations
        • Replace com.sun.net.ssl package
        • Replace deprecated methods inSecurityManager
        • Replace finalize method in java.io.FileInputStream and java.io.FileOutputStream
        • Replace finalize method in java.util.zip.ZipFile, java.util.zip.Inflater and java.util.zip.Deflater
        • Replace getLocalizedInputStream and getLocalizedOutputStream with direct assignment
        • Replace java.lang.ref.Reference.clone() with constructor call
        • Replace javax.security.auth.Policy with java.security.Policy
        • Set visibility of premain and agentmain methods to public
        • Upgrade Java version
        • Upgrade build to Java 11
        • Upgrade build to Java 17
        • Upgrade build to Java 21
        • Upgrade plugins to Java 11 compatible versions
        • Upgrade plugins to Java 17 compatible versions
        • Upgrade plugins to Java 21 compatible versions
        • Use SunJSSE instead of com.sun.net.ssl.internal.ssl.Provider
        • Use com.ibm.jsse2 instead of com.sun.net.ssl.internal.ssl
        • Use com.ibm.net.ssl.www2.protocol instead of com.sun.net.ssl.internal.www.protocol
        • Use com.ibm.net.ssl.www2.protocol.https.Handler instead of com.sun.net.ssl.internal.www.protocol.https.Handler
        • Use com.sun.security.auth.module.Krb5LoginModule instead of com.ibm.security.auth.module.Krb5LoginModule
        • Use com.sun.xml.bind.* instead of com.sun.xml.internal.bind.*
        • Use java.security.cert instead of javax.security.cert
        • Use javax.net.ssl instead of com.sun.net.ssl
        • Cobertura
          • Remove Cobertura Maven plugin
        • java.util.concurrent APIs
          • Use AtomicBoolean#weakCompareAndSetPlain(boolean, boolean)
          • Use AtomicInteger#weakCompareAndSetPlain(int, int)
          • Use AtomicIntegerArray#weakCompareAndSetPlain(int, int, int)
          • Use AtomicLong#weakCompareAndSetPlain(long, long)
          • Use AtomicLongArray#weakCompareAndSetPlain(int, long, long)
          • Use AtomicReference#weakCompareAndSetPlain(T, T)
          • Use AtomicReferenceArray#weakCompareAndSetPlain(int, T, T)
          • Use modernized java.util.concurrent APIs
        • Guava
          • Preconditions.checkNotNull to Objects.requireNonNull
          • Preconditions.checkNotNull with message to Objects.requireNonNull
          • Prefer Arrays.asList(..) over Guava primitives
          • Prefer Files#createTempDirectory()
          • Prefer Integer#compare
          • Prefer Integer#compareUnsigned
          • Prefer Integer#divideUnsigned
          • Prefer Integer#parseUnsignedInt
          • Prefer Integer#remainderUnsigned
          • Prefer List.of(..) in Java 9 or higher
          • Prefer Long#compare
          • Prefer Long#compareUnsigned
          • Prefer Long#divideUnsigned
          • Prefer Long#parseUnsignedInt
          • Prefer Long#remainderUnsigned
          • Prefer Map.of(..) in Java 9 or higher
          • Prefer Math#addExact
          • Prefer Math#clamp
          • Prefer Math#multiplyExact
          • Prefer Math#subtractExact
          • Prefer Runnable::run
          • Prefer Set.of(..) in Java 9 or higher
          • Prefer Short#compare
          • Prefer String#join() over Guava Joiner#join()
          • Prefer java.lang.Char#compare
          • Prefer java.nio.charset.StandardCharsets
          • Prefer java.util.Collections#synchronizedNavigableMap
          • Prefer java.util.Collections#unmodifiableNavigableMap
          • Prefer java.util.Objects#equals
          • Prefer java.util.Objects#hash
          • Prefer java.util.Objects#requireNonNullElse
          • Prefer java.util.Optional
          • Prefer java.util.Optional#or(Supplier<T extends java.util.Optional>)
          • Prefer java.util.Optional#orElse(null) over com.google.common.base.Optional#orNull()
          • Prefer java.util.function.Function
          • Prefer java.util.function.Predicate
          • Prefer java.util.function.Supplier
          • Prefer new ArrayList<>()
          • Prefer new AtomicReference<>()
          • Prefer new ConcurrentHashMap<>()
          • Prefer new CopyOnWriteArrayList<>()
          • Prefer new HashMap<>()
          • Prefer new HashSet<>()
          • Prefer new LinkedHashMap<>()
          • Prefer new LinkedHashSet<>()
          • Prefer new LinkedList<>()
          • Prefer new TreeMap<>()
          • Prefer the Java 11 standard library instead of Guava
          • Prefer the Java 21 standard library instead of Guava
          • Prefer the Java standard library instead of Guava
          • Refaster style Guava to Java migration recipes
          • Remove com.google.common.base.Optional#toJavaUtil()
          • Replace com.google.common.base.Optional#fromJavaUtil(java.util.Optional) with argument
          • String.valueof(String) to String
        • java.io APIs
          • Replace invocations of finalize() on FileInputStream and FileOutputStream with close()
        • JaCoCo
          • Upgrade JaCoCo
        • Jakarta
          • Faces XHTML migration for Jakarta EE 10
          • JNDI name jsf/ClientSideSecretKey has been renamed to faces/ClientSideSecretKey, and the jsf/FlashSecretKey JNDI name has been renamed to faces/FlashSecretKey
          • JSF 2.x to Jakarta Faces 4.x
          • Migrate Bean Validation messages
          • Migrate Ehcache from javax to jakarta namespace
          • Migrate JSF values inside EcmaScript files
          • Migrate Jackson from javax to jakarta namespace
          • Migrate Johnzon from javax to jakarta namespace
          • Migrate RestAssured from javax to jakarta namespace by upgrading to a version compatible with J2EE9
          • Migrate deprecated javaee-api dependencies to jakarta.platform
          • Migrate deprecated javax.activation packages to jakarta.activation
          • Migrate deprecated javax.annotation to jakarta.annotation
          • Migrate deprecated javax.batch packages to jakarta.batch
          • Migrate deprecated javax.decorator packages to jakarta.decorator
          • Migrate deprecated javax.ejb packages to jakarta.ejb
          • Migrate deprecated javax.el packages to jakarta.el
          • Migrate deprecated javax.enterprise packages to jakarta.enterprise
          • Migrate deprecated javax.faces packages to jakarta.faces
          • Migrate deprecated javax.inject packages to jakarta.inject
          • Migrate deprecated javax.interceptor packages to jakarta.interceptor
          • Migrate deprecated javax.jms packages to jakarta.jms
          • Migrate deprecated javax.json packages to jakarta.json
          • Migrate deprecated javax.jws packages to jakarta.jws
          • Migrate deprecated javax.mail packages to jakarta.mail
          • Migrate deprecated javax.persistence packages to jakarta.persistence
          • Migrate deprecated javax.resource packages to jakarta.resource
          • Migrate deprecated javax.security.auth.message packages to jakarta.security.auth.message
          • Migrate deprecated javax.security.enterprise packages to jakarta.security.enterprise
          • Migrate deprecated javax.security.jacc packages to jakarta.security.jacc
          • Migrate deprecated javax.servlet packages to jakarta.servlet
          • Migrate deprecated javax.soap packages to jakarta.soap
          • Migrate deprecated javax.transaction packages to jakarta.transaction
          • Migrate deprecated javax.validation packages to jakarta.validation
          • Migrate deprecated javax.websocket packages to jakarta.websocket
          • Migrate deprecated javax.ws packages to jakarta.ws
          • Migrate deprecated javax.xml.bind packages to jakarta.xml.bind
          • Migrate deprecated javax.xml.ws packages to jakarta.xml.ws
          • Migrate org.apache.ws.security and org.apache.ws.security.components.crypto packages to org.apache.wss4j.common.ext and org.apache.wss4j.common.crypto packages
          • Migrate to Jakarta EE 10
          • Migrate to Jakarta EE 9
          • Migrate xmlns entries and javax. packages in ejb-jar.xml files
          • Migrate xmlns entries and javax. packages in validation.xml files
          • Migrate xmlns entries in beans.xml files
          • Migrate xmlns entries in faces-config.xml files
          • Migrate xmlns entries in orm.xml files
          • Migrate xmlns entries in persistence.xml files
          • Migrate xmlns entries in taglib.xml files
          • Migrate xmlns entries in web-fragment.xml files
          • Migrate xmlns entries in web.xml files
          • Remove Bean.isNullable()
          • Remove deprecated API's not supported in CDI4.0
          • Remove getComment and getVersion methods
          • Remove jakarta.annotation-api dependency when managed by Spring Boot
          • Remove trailing slash from jakarta.ws.rs.ApplicationPath values
          • Rename CDI Extension to Jakarta
          • Replace deprecated Jakarta Servlet methods and classes
          • Replace BeforeBeanDiscovery.addAnnotatedType(AnnotatedType) with addAnnotatedType(AnnotatedType, String)
          • Replace CURRENT_COMPONENT and CURRENT_COMPOSITE_COMPONENT with getCurrentComponent() and getCurrentCompositeComponent()
          • Replace ResourceResolver with ResourceHandler
          • Replace doUpgrade(..) with ServerContainer.upgradeHttpToWebSocket(..)
          • Substitute deprecated Faces Managed Beans
          • Update Jakarta EE Platform Dependencies to 10.0.0
          • Update fireEvent() and createInjectionTarget() calls
          • Updates getRealPath() to call getContext() followed by getRealPath()
          • Upgrade Faces open source libraries
          • Use StateManagementStrategy
          • Use isParametersProvided()
          • Use jakarta.el instead of jakarta.faces.el and javax.faces.el
          • Use jakarta.xml.soap.SOAPFactory to create SOAPElements
        • Javaee7
          • Removed OpenJPA providers in the persistence.xml file
        • Javaee8
          • Flags any org.apache.bval.jsr* (bval 1.1) and org.apache.bval.jsr303* (bval 1.0) package references
          • Replace HttpServletRequestWrapper.isRequestedSessionIdFromUrl() with isRequestedSessionIdFromURL()
        • javax APIs
          • @ElementCollection annotations must be accompanied by a defined @Column annotation
          • @Embeddable classes cannot have an @Id annotation when referenced by an @EmbeddedId annotation
          • @Entity objects with constructors must also have a default constructor
          • @JoinColumn annotations must be used with relationship mappings
          • Add explicit Common Annotations dependencies
          • Add explicit Inject dependencies
          • Add explicit JAX-WS dependencies
          • Add explicit JAXB dependencies
          • Add scope annotation to injected classes
          • Attributes with automatically generated values require configuration
          • Migrate from OpenJPA to EclipseLink JPA
          • Private accessor methods must have a @Transient annotation
          • Remove the @Temporal annotation for some java.sql attributes
          • Unannotated collection attributes require a Transient annotation
          • Unannotated entity attributes require a Transient annotation
          • Use HttpServletRequest logout method for programmatic security logout in Servlet 3.0
          • Use javax.lang.model.util.AbstractAnnotationValueVisitor9
          • Use javax.lang.model.util.AbstractElementVisitor9
          • Use javax.lang.model.util.AbstractTypeVisitor9
          • Use javax.lang.model.util.ElementKindVisitor9
          • Use javax.lang.model.util.ElementScanner9
          • Use javax.lang.model.util.SimpleAnnotationValueVisitor9
          • Use javax.lang.model.util.SimpleElementVisitor9
          • Use javax.lang.model.util.SimpleTypeVisitor9
          • Use javax.lang.model.util.TypeKindVisitor9
          • Use javax.management.monitor.CounterMonitor#setInitThreshold
          • Use javax.xml.stream.XMLEventFactory#newFactory(String, ClassLoader)
          • Use javax.xml.stream.XMLInputFactory#newFactory(String, ClassLoader)
          • Use javax.xml.stream.XMLOutputFactory#newFactory(String, ClassLoader)
          • Use latest JAXB API and runtime for Jakarta EE 8
          • Use modernized javax.lang.model.util APIs
          • Use modernized javax.management.monitor APIs
          • Use modernized javax.xml.stream APIs
          • Use the latest JAX-WS API and runtime for Jakarta EE 8
          • Use the latest JAX-WS API and runtime for Jakarta EE 8
          • Use the latest JAX-WS API and runtime for Jakarta EE 8
        • java.lang APIs
          • A collection of String rules
          • Prefer String.formatted(Object...)
          • Replace 0 < s.length() with !s.isEmpty()
          • Replace String.indexOf(String, 0) with String.indexOf(String)
          • Replace String.indexOf(char, 0) with String.indexOf(char)
          • Replace Thread.resume(), Thread.stop(), and Thread.suspend() with throw new UnsupportedOperationException()
          • Replace lower and upper case String comparisons with String.equalsIgnoreCase(String)
          • Replace redundant String method calls with self
          • Use Character#isJavaIdentifierPart(char)
          • Use Character#isJavaIdentifierStart(char)
          • Use Character#isWhitespace(char)
          • Use Class#getDeclaredConstructor().newInstance()
          • Use ClassLoader#defineClass(String, byte[], int, int)
          • Use Runtime.Version#feature()
          • Use Runtime.Version#interim()
          • Use Runtime.Version#update()
          • Use SecurityManager#checkMulticast(InetAddress)
          • Use local variable type inference
          • Use modernized java.lang APIs
          • Use text blocks
          • Var
            • Apply var to Generic Constructors
            • Apply var to Generic Method Invocations
            • Use var for primitive-typed variables
            • Use var for reference-typed variables
        • java.util.logging APIs
          • Use LogRecord#setInstant(Instant)
          • Use Logger#getGlobal()
          • Use Logger#logrb(.., ResourceBundle bundleName, ..)
          • Use ManagementFactory#getPlatformMXBean(PlatformLoggingMXBean.class)
          • Use java.lang.management.PlatformLoggingMXBean
          • Use modernized java.util.logging APIs
        • Lombok
          • Convert @lombok.Value class to Record
          • Migrate Lombok to a Java 11 compatible version
          • Prefer final var over lombok.val
        • Maven
          • Update Maven Java project properties
          • Use Maven compiler plugin release configuration
        • Metrics
          • Micrometer
        • java.net APIs
          • Convert new URL(String) to URI.create(String).toURL()
          • Convert new URL(String, String, String) to new URI(...).toURL()
          • Convert new URL(String, String, int, String) to new URI(...).toURL()
          • URLConstructorsToURI Refaster recipes
          • Use java.net.HttpURLConnection.HTTP_INTERNAL_ERROR
          • Use java.net.MulticastSocket#getTimeToLive()
          • Use java.net.MulticastSocket#setTimeToLive(int)
          • Use java.net.URLDecoder#decode(String, StandardCharsets.UTF_8)
          • Use java.net.URLEncoder#encode(String, StandardCharsets.UTF_8)
          • Use modernized java.net APIs
        • Nio
          • File
            • Replace Paths.get with Path.of
        • Search
          • Find Java versions in use
          • Find data used on DTOs
          • Find methods that only use one DTO data element
          • Find uses of internal javax APIs
          • Find which Java version is in use
          • Plan a Java version migration
        • java.sql APIs
          • Use DriverManager#setLogWriter(java.io.PrintWriter)
          • Use modernized java.sql APIs
        • java.util APIs
          • Adopt SequencedCollection
          • Prefer EnumSet of(..)
          • Prefer List.of(..)
          • Prefer List.of(..)
          • Prefer Locale.of(..) over new Locale(..)
          • Prefer Map.of(..)
          • Prefer Map.of(..)
          • Prefer Optional.isEmpty()
          • Prefer Optional.isPresent()
          • Prefer Set.of(..)
          • Prefer Set.of(..)
          • Remove invocations of deprecated invocations from Deflater, Inflater, ZipFile
          • Replace List.get(int), add(int, Object), and remove(int) with SequencedCollection *First and *Last methods
          • Replace Stream.collect(Collectors.toUnmodifiableList()) with Stream.toList()
          • Replace iterator().next() with getFirst()
          • Replace java.lang.Math random() with ThreadLocalRandom nextDouble()
          • Stream idiom recipe
          • Use getFirst() instead of stream().findFirst().orElseThrow()
          • Use modernized java.util APIs
      • OpenRewrite best practices
        • Add a blank line around fields with annotations
        • Automatically select recipe examples from the unit test cases of a recipe
        • Find OpenRewrite recipes
        • Find missing @Option example values
        • Minimal indentation for SourceSpecs text blocks
        • RewriteTest classes should not be public
        • Set default estimated effort
        • Use Tree.randomId() in LST constructors
        • Use a standard name for ExecutionContext
        • Use of @EqualsAndHashCode on Recipe
      • Search
        • Check whether a type is not in use
        • Find annotations
        • Find class hierarchy
        • Find empty classes
        • Find fields
        • Find fields of type
        • Find files compiled at a specific Java version
        • Find files in a source set
        • Find files that are likely not tests
        • Find files with a particular build tool version
        • Find implementing classes
        • Find literals
        • Find method declaration
        • Find method usages
        • Find methods with empty bodies
        • Find missing type information on Java ASTs
        • Find plain text secrets
        • Find source files with imports
        • Find sources that are likely tests
        • Find the oldest Java version in use
        • Find type mappings
        • Find types
        • Find uses of @Repeatable annotations
        • Find uses of deprecated classes
        • Find uses of deprecated classes, methods, and fields
        • Find uses of deprecated fields
        • Find uses of deprecated methods
        • Find within comments and literals
        • Result of method call ignored
        • Study the size of the classpath by source set
      • Security
        • Find text-direction changes
        • Fix CWE-338 with SecureRandom
        • Improper privilege management
        • Java security best practices
        • Partial path traversal vulnerability
        • Regular Expression Denial of Service (ReDOS)
        • Remediate OWASP A01:2021 Broken access control
        • Remediate OWASP A02:2021 Cryptographic failures
        • Remediate OWASP A03:2021 Injection
        • Remediate OWASP A05:2021 Security misconfiguration
        • Remediate OWASP A06:2021 Vulnerable and outdated components
        • Remediate OWASP A08:2021 Software and data integrity failures
        • Remediate vulnerabilities from the OWASP Top Ten
        • Secure random
        • SecureRandom seeds are not constant or predictable
        • Use Files#createTempDirectory
        • Use secure temporary file creation
        • XML parser XXE vulnerability
        • Zip slip
        • Marshalling
          • Insecure JMS deserialization
          • Secure the use of Jackson default typing
          • Secure the use of SnakeYAML's constructor
        • Search
          • Find Jackson default type mapping enablement
          • Find sensitive API endpoints
          • Find vulnerable uses of Jackson @JsonTypeInfo
        • Secrets
          • Find AWS secrets
          • Find Artifactory secrets
          • Find Azure secrets
          • Find Discord secrets
          • Find GitHub secrets
          • Find Google secrets
          • Find Heroku secrets
          • Find JWT secrets
          • Find MailChimp secrets
          • Find Mailgun secrets
          • Find NPM secrets
          • Find PGP secrets
          • Find PayPal secrets
          • Find Picatic secrets
          • Find RSA private keys
          • Find SSH secrets
          • Find SendGrid secrets
          • Find Slack secrets
          • Find Square secrets
          • Find Stripe secrets
          • Find Telegram secrets
          • Find Twilio secrets
          • Find Twitter secrets
          • Find generic secrets
          • Find passwords used in URLs
          • Find secrets
          • Find secrets with regular expressions
        • Servlet
          • Insecure cookies
        • Spring
          • Enable CSRF attack prevention
          • Prevent clickjacking
          • Secure Spring service exporters
      • Spring
        • Add a spring configuration property
        • Change the key of a spring application property
        • Change the value of a spring application property
        • Delete a spring configuration property
        • Expand Spring YAML properties
        • Normalize Spring properties to kebab-case
        • Remove @RequestMapping annotations
        • Remove implicit web annotation names
        • Remove public from @Bean methods
        • Remove the @Autowired annotation on inferred constructor
        • Remove unnecessary @Repository annotation from Spring Data Repository sub-interface
        • Rename bean
        • Separate application YAML by profile
        • Update the API manifest
        • Amqp
          • Use TLS for AMQP connection strings
        • Spring Batch
          • Migrate ItemWriter
          • Migrate JobBuilderFactory to JobBuilder
          • Migrate StepBuilderFactory to StepBuilder
          • Migrate to Spring Batch 5.0 from 4.3
          • Remove DefaultBatchConfigurer
          • Transform classes that extend *ListenerSupport to implement the *Listener interfaces instead
          • Transform classes that extend a given Class to implement the given Interface instead
        • Spring Boot 2.x
          • Add javax.validation-api dependency
          • Add missing @Configuration annotation
          • Adds @DependsOnDatabaseInitialization to Spring Beans and Components depending on javax.sql.DataSource
          • Adjust configuration classes to use the WebServerFactoryCustomizer interface
          • Convert HeadersConfigurer chained calls into Lambda DSL
          • Convert HttpSecurity chained calls into Lambda DSL
          • Convert ServerHttpSecurity chained calls into Lambda DSL
          • Merge Spring bootstrap.yml with application.yml
          • Migrate @OutputCaptureRule to @ExtendWith(OutputCaptureExtension.class)
          • Migrate RestTemplateBuilder
          • Migrate Spring Boot 2.x projects to JUnit 5 from JUnit 4
          • Migrate Spring Boot properties to 2.0
          • Migrate Spring Boot properties to 2.1
          • Migrate Spring Boot properties to 2.2
          • Migrate Spring Boot properties to 2.3
          • Migrate Spring Boot properties to 2.4
          • Migrate Spring Boot properties to 2.5
          • Migrate Spring Boot properties to 2.6
          • Migrate Spring Boot properties to 2.7
          • Migrate deprecated ActuatorMediaType to ApiVersion#getProducedMimeType
          • Migrate deprecated Spring-Boot EmbeddedDatabaseConnection.HSQL
          • Migrate flyway and liquibase credentials
          • Migrate from Spring Boot 1.x to 2.0
          • Migrate multi-condition @ConditionalOnBean annotations
          • Migrate to Spring Boot 2.1
          • Migrate to Spring Boot 2.2
          • Migrate to Spring Boot 2.3
          • Migrate to Spring Boot 2.4
          • Migrate to Spring Boot 2.6
          • Migrate to Spring Boot 2.7
          • Migrate to recommended constants in LogbackLoggingSystemProperties from deprecated values in LoggingSystemProperties
          • Move SAML relying party identity provider property to asserting party
          • Remove @SpringExtension
          • Remove obsolete Spring JUnit runners
          • Remove unnecessary Spring @RunWith
          • Replace @ExtendWith and @ContextConfiguration with @SpringJunitConfig
          • Replace EnvironmentTestUtils with TestPropertyValues
          • Spring Boot 2.x best practices
          • Upgrade to Spring Boot 2.5
          • Use AutoConfiguration#imports
          • Use DiskSpaceHealthIndicator(File, DataSize)
          • Use EnableConfigurationProperties.VALIDATOR_BEAN_NAME
          • Use ErrorAttributes#getErrorAttributes(WebRequest, ErrorAttributeOptions)
          • Use ErrorProperties#IncludeStacktrace.ON_PARAM
          • Use MultipartConfigFactory with DataSize arguments
          • Use PingHealthIndicator
          • Use RestClientBuilderCustomizer
          • Use RestTemplateBuilder#basicAuthentication
          • Use RestTemplateBuilder#setConnectTimeout(Duration) and RestTemplateBuilder#setReadTimeout(Duration)
          • Use WebServerFactoryCustomizer
          • Use WebTestClientBuilderCustomizer
          • Use isEagerFilterInit()
          • Use javax.validation.constraints
          • Use org.springframework.boot.autoconfigure.http.HttpMessageConverters
          • Use org.springframework.boot.web.server.LocalServerPort
          • Use org.springframework.boot.web.servlet.error.ErrorController
          • Use org.springframework.boot.web.servlet.support.SpringBootServletInitializer
          • Use setEagerFilterInit(boolean)
          • Use spring-boot.run.agents configuration key in spring-boot-maven-plugin
          • Search
            • Applications using logging shutdown hooks
            • Find patterns that require updating for Spring Boot 2.5
            • Find projects affected by changes to the default error view message attribute
            • In Spring Boot 2.5 a DefaultConfigurationCustomizer can now be used in favour of defining one or more *Provider beans
            • Integration scheduler pool size
        • Spring Boot 3.x
          • Add @Configuration to classes with @EnableXXXSecurity annotations
          • Add SetUseTrailingSlashMatch() in configuration
          • Add trailing slash to Spring routes
          • Bean methods should return concrete types
          • Downgrade Jakarta Servlet API to 5.0 when using Jetty
          • Enable Spring Batch Annotation
          • Enable Virtual Threads on Java 21
          • Maintain trailing slash URL mappings
          • Migrate Spring Boot properties to 3.0
          • Migrate Spring Boot properties to 3.1
          • Migrate Spring Boot properties to 3.2
          • Migrate Spring Boot properties to 3.3
          • Migrate dropWizard dependencies to Spring Boot 3.x
          • Migrate thymeleaf dependencies to Spring Boot 3.x
          • Migrate to Spring Boot 3.0
          • Migrate to Spring Boot 3.1
          • Migrate to Spring Boot 3.2
          • Migrate to Spring Boot 3.3
          • Relocate Launcher Classes
          • Remove SolrAutoConfiguration
          • Remove Unnecessary @ConstructorBinding
          • Remove the deprecated properties additional-keys-to-sanitize from the configprops and env end points
          • Rename server.max-http-header-size to server.max-http-request-header-size
          • Spring Boot 3.x best practices
          • Upgrade to springdoc-openapi 2
        • Spring Cloud 2022
          • Add logging.pattern.level for traceId and spanId
          • Migrate Spring Cloud Sleuth 3.1 to Micrometer Tracing 1.0
          • Migrate to Spring Cloud 2022
          • Upgrade dependencies to Spring Cloud 2022
        • Spring Cloud 2023
          • Migrate to Spring Cloud 2023
          • Upgrade dependencies to Spring Cloud 2023
        • Spring Data
          • Migrate to Spring Data 2.3
          • Migrate to Spring Data 2.5
          • Migrate to Spring Data 2.7
          • Use JpaRepository#deleteAllInBatch(Iterable entities)
          • Use JpaRepository#getById(ID id)
          • Use JpaRepository#getReferenceById(ID id)
          • Use JpaSort.of(..)
          • Use QuerydslPredicateExecutor
          • Use TLS for JDBC connection strings
          • Use new SimpleMongoClientDbFactory(String)
        • Spring Framework
          • Convert InstantiationAwareBeanPostProcessorAdapter to SmartInstantiationAwareBeanPostProcessor
          • Migrate HandlerInterceptorAdapter to HandlerInterceptor
          • Migrate ResponseEntityExceptionHandler from HttpStatus to HttpStatusCode
          • Migrate deprecated Spring Web UTF8 MediaType enums
          • Migrate removed Spring Assert methods
          • Migrate setReadTimeout(java.lang.int) to SocketConfig setSoTimeout(..)
          • Migrate to Spring Framework 5.0
          • Migrate to Spring Framework 5.1
          • Migrate to Spring Framework 5.2
          • Migrate to Spring Framework 5.3
          • Migrate to Spring Framework 6.0
          • Migrate to Spring Framework 6.1
          • Replace WebMvcConfigurerAdapter with WebMvcConfigurer
          • Use Environment#acceptsProfiles(Profiles)
          • Use ObjectUtils#isEmpty(Object)
          • Use varargs equivalents for deprecated JdbcTemplate signatures
        • Http
          • Find Spring Web dependency
          • Replace String literals with HttpHeaders constants
          • Replace String literals with MediaType constants
          • Simplify WebTestClient expressions
          • Simplify unnecessary MediaType.parseMediaType() and MediaType.valueOf() calls
        • Spring Kafka
          • Change KafkaOperations.send* return type to CompletableFuture
          • Migrate to Spring Kafka 3.0
          • Remove KafkaOperations.usingCompletableFuture()
          • Use Duration in KafkaTestUtils
        • Search
          • Find HTTP API calls via RestTemplate
          • Find Spring API endpoints
          • Find Spring components
        • Spring Security 5.x
          • Migrate to Spring Security 5.7
          • Migrate to Spring Security 5.8
          • Rename the package name from com.nimbusds.jose.shaded.json to net.minidev.json
          • Replace HttpSecurity.authorizeRequests(...) with HttpSecurity.authorizeHttpRequests(...) and ExpressionUrlAuthorizationConfigurer, AbstractInterceptUrlConfigurer with AuthorizeHttpRequestsConfigurer, etc
          • Replace global method security with method security
          • Replace global method security with method security
          • Spring Security 5.4 introduces the ability to configure HttpSecurity by creating a SecurityFilterChain bean
          • Use new Argon2PasswordEncoder factory methods
          • Use new Pbkdf2PasswordEncoder factory methods
          • Use new SCryptPasswordEncoder factory methods
          • Use the new requestMatchers methods
          • Use the new securityMatcher() method
          • Search
            • Finds uses of Encryptors.queryableText()
        • Spring Security 6.x
          • Convert HttpSecurity::apply chained calls into HttpSecurity::with Lambda DSL
          • Keep the default RequestCache querying behavior in Spring Security 5
          • Migrate to Spring Security 6.0
          • Migrate to Spring Security 6.1
          • Migrate to Spring Security 6.2
          • Remove calls matching AuthenticationEntryPointFailureHandler.setRethrowAuthenticationServiceException(true)
          • Remove explicit SecurityContextConfigurer.requireExplicitSave(true) opt-in
          • Remove explicit configuration of SHA-256 as encoding and matching algorithm for TokenBasedRememberMeServices
          • Remove the useAuthorizationManager=true attribute from @EnableReactiveMethodSecurity
          • Remove unnecessary filterSecurityInterceptorOncePerRequest(false) when upgrading to Spring Security 6
          • Remove unnecessary use-authorization-manager for message security in Spring security 6
          • Remove unneeded oauth2Login config when upgrading to Spring Security 6
          • Oauth2
            • Client
              • Convert OAuth2ClientConfigurer chained calls into Lambda DSL
              • Convert OAuth2LoginConfigurer chained calls into Lambda DSL
            • Server
              • Resource
                • Convert OAuth2ResourceServerConfigurer chained calls into Lambda DSL
        • Test
          • Replace SpringClassRule and SpringMethodRule with JUnit 5 SpringExtension
      • Springdoc
        • Migrate from SpringFox Swagger to SpringDoc and OpenAPI
        • Migrate from Swagger to SpringDoc and OpenAPI
        • Replace SpringFox Dependencies
        • Upgrade SpringDoc
      • Struts
        • Migrate DTD to a specific Struts version
        • Struts 6.0
          • Migrate OpenSymphony classes to Struts 6.0
          • Migrate Struts 2.0 interceptors to action "aware" interfaces
          • Migrate to Struts 6.0
          • Migrate to Struts 6.0 constants
          • Upgrade Struts 6.0 dependencies
        • Search
          • Find Struts actions
          • Find struts XML files
      • Testing
        • Archunit
          • ArchUnit 0.x upgrade
        • AssertJ
          • Adopt AssertJ Duration assertions
          • AssertJ best practices
          • Collapse consecutive assertThat statements
          • JUnit AssertThrows to AssertJ exceptionType
          • JUnit assertArrayEquals To AssertJ
          • JUnit assertEquals to AssertJ
          • JUnit assertFalse to AssertJ
          • JUnit assertNotEquals to AssertJ
          • JUnit assertNotNull to AssertJ
          • JUnit assertNull to AssertJ
          • JUnit assertSame to AssertJ
          • JUnit assertTrue to AssertJ
          • JUnit fail to AssertJ
          • Migrate JUnit asserts to AssertJ
          • Shorten AssertJ assertions
          • Simplify AssertJ assertions with literal arguments
          • Simplify AssertJ chained assertions
          • Simplify AssertJ chained assertions
          • Statically import AssertJ's assertThat
        • Cleanup
          • Assertion arguments should be passed in the correct order
          • Include an assertion in tests
          • Junit assertTrue(a == b) to assertEquals(a,b)
          • Remove empty tests without comments
          • Remove public visibility of JUnit 5 tests
          • Remove test prefix from JUnit 5 tests
          • Replace JUnit assertEquals(false, ) to assertFalse() / assertTrue()
          • Replace JUnit assertFalse(!) to assertTrue()
          • Replace JUnit assertFalse(a == null) to assertNotNull(a)
          • Replace JUnit assertFalse(a.equals(b)) to assertNotEquals(a,b)
          • Replace JUnit assertNotEquals(false, ) to assertFalse() / assertTrue()
          • Replace JUnit assertTrue(!) to assertFalse()
          • Replace JUnit assertTrue(a == null) to assertNull(a)
          • Replace JUnit assertTrue(a.equals(b)) to assertEquals(a,b)
          • Replace JUnit assertTrue(false, "reason") and assertFalse(true, "reason") with fail("reason")
          • Simplify throws statements of tests
          • Testing best practices
          • assertEquals(a, null) to assertNull(a)
        • Datafaker
          • Migrate from Java Faker to Datafaker
        • Hamcrest
          • Add org.hamcrest:hamcrest if it is used.
          • Migrate Hamcrest assertThat(boolean, Matcher) to AssertJ
          • Migrate Hamcrest is(Object) to AssertJ
          • Migrate Hamcrest not(Matcher) to AssertJ
          • Migrate anyOf Hamcrest Matcher to AssertJ
          • Migrate from Hamcrest Matcher to AssertJ
          • Migrate to AssertJ assertions
          • Remove Hamcrest is(Matcher)
        • Jmockit
          • Convert JMockit @Mocked and @Injectable annotated arguments
          • Migrate from JMockit to Mockito
          • Rewrite JMockit Expectations, Verifications and NonStrictExpectations
        • JUnit Jupiter
          • Add Hamcrest JUnit dependency
          • Add JUnit Jupiter dependencies
          • Add missing @BeforeEach, @AfterEach, @Test to overriding methods
          • Add missing @ParameterizedTest annotation when @ValueSource is used or replace @Test with @ParameterizedTest
          • Applies JUnit 5 assertThrows on last statement in lambda block only
          • Clean Up Assertions
          • Cleanup JUnit imports
          • Gradle Test use JUnit Jupiter
          • JUnit 4 @Category to JUnit Jupiter @Tag
          • JUnit 4 @RunWith to JUnit Jupiter @ExtendWith
          • JUnit 4 @RunWith(Enclosed.class) to JUnit Jupiter @Nested
          • JUnit 4 @RunWith(Parameterized.class) to JUnit Jupiter parameterized tests
          • JUnit 4 Assert To JUnit Jupiter Assertions
          • JUnit 4 ExpectedException To JUnit Jupiter's assertThrows()
          • JUnit 4 MockitoJUnit to JUnit Jupiter MockitoExtension
          • JUnit 5 inner test classes should be annotated with @Nested
          • JUnit Jupiter best practices
          • JUnit Jupiter migration from JUnit 4.x
          • JUnit TestName @Rule to JUnit Jupiter TestInfo
          • Make @TempDir fields non final
          • Make lifecycle methods non private
          • Migrate JUnit 4 @Test annotations to JUnit 5
          • Migrate JUnit 4 TestCase to JUnit Jupiter
          • Migrate JUnit 4 lifecycle annotations to JUnit Jupiter
          • Migrate from JUnit 4 @FixedMethodOrder to JUnit 5 @TestMethodOrder
          • OkHttp 3.x MockWebServer @Rule To 4.x MockWebServer
          • Pragmatists @RunWith(JUnitParamsRunner.class) to JUnit Jupiter Parameterized Tests
          • Remove JUnit 4 @RunWith annotations that do not require an @ExtendsWith replacement
          • Remove duplicates uses of @TestTemplate implementations for a single method
          • Replace fail() in try-catch blocks with Assertions.assertDoesNotThrow(() -> { ... })
          • Statically import JUnit Jupiter assertions
          • Upgrade Surefire Plugin
          • Use Assertions#assume*(..) and Hamcrest's MatcherAssume#assume*(..)
          • Use JUnit Jupiter @Disabled
          • Use JUnit Jupiter @TempDir
          • Use JUnit Jupiter Executable
          • Use MatcherAssert#assertThat(..)
          • Use Mockito JUnit Jupiter extension
          • Use OkHttp 3 MockWebServer for JUnit 5
          • Use Vert.x JUnit 5 Extension
          • Use XMLUnit Legacy for JUnit 5
          • Use wiremock extension
          • assertTrue(x instanceof y) to assertInstanceOf(y.class, x)
        • Mockito
          • Cleanup Mockito imports
          • JUnit 4 MockitoJUnitRunner.Silent to JUnit Jupiter MockitoExtension with LENIENT settings
          • Mockito 3.x migration from 1.x
          • Mockito 4.x upgrade
          • Mockito 5.x upgrade
          • Mockito best practices
          • Replace Mockito 1.x anyString() with nullable(String.class)
          • Replace Mockito 1.x anyString()/any() with nullable(Class)
          • Replace Mockito.when on static (non mock) with try-with-resource with MockedStatic
          • Replace PowerMock with raw Mockito
          • Replace PowerMock.mockStatic() with Mockito.mockStatic()
          • Retain Mockito strictness WARN when switching to JUnit 5
          • Use static form of Mockito MockUtil
        • Testcontainers
          • Add image argument to container constructor
          • Explicit container images and versions
          • Replace ContainerState.getContainerIpAddress() with getHost()
          • Testcontainers best practices
    • Jenkins
      • Add or correct Jenkins plugins BOM
      • Create index.jelly if it doesn't exist
      • Disables local file resolution for parent POM
      • Is the project a Jenkins plugin?
      • Migrate javax.annotations to SpotBugs annotations
      • Migrate to HtmlUnit 3.x
      • Modernize Jenkinsfile
      • Modernize a Jenkins plugin to the latest recommended versions
      • Modernize a Jenkins plugin to the latest versions supported by Java 8
      • Upgrade jenkins java version
      • Upgrade property's value to version
      • Use Jenkins API plugin instead of libraries
      • Use commons-lang3 API Plugin
      • GitHub
        • Add plugin developer team to CODEOWNERS
      • Migrate
        • Hudson
          • Replace hudson.Util.getPastTimeString with getTimeSpanString
    • JSON
      • Change key
      • Change value
      • Delete key
      • Search
        • Find JSON object members
    • Kotlin
      • Find Kotlin sources and collect data metrics
      • Rename type alias
      • Cleanup
        • Remove trailing comma in Kotlin
        • Remove unnecessary parentheses on Kotlin types
        • Remove unnecessary trailing semicolon
        • Replace Char#toInt() with Char#code
        • Structural equality tests should use == or !=
        • it shouldn't be used as a lambda parameter name
      • Format
        • Format Kotlin code
    • Kubernetes
      • Add Kubernetes configuration
      • Ensure CPU limits are set
      • Ensure CPU request is set
      • Ensure image pull policy is Always
      • Ensure lifecycle rule on StorageBucket
      • Ensure liveness probe is configured
      • Ensure memory limits are set
      • Ensure memory request is set
      • Ensure readiness probe is configured
      • Kubernetes best practices
      • Limit root capabilities in a container
      • No host IPC sharing
      • No host network sharing
      • No host process ID sharing
      • No privilege escalation
      • No privileged containers
      • No root containers
      • Read-only root filesystem
      • Update image name
      • RBAC
        • Add RBAC rules
      • Resource
        • Cap exceeds resource value
        • Find exceeds resource limit
        • Find exceeds resource ratio
      • Search
        • Find annotation
        • Find annotation
        • Find disallowed image tags
        • Find image by name
        • Find label
        • Find missing configuration
        • Find missing image digest
        • Find non-TLS Ingresses
      • Services
        • Find uses of externalIP
        • Service type
        • Update Service externalIP
    • Maven
      • Add Maven dependency
      • Add Maven parent
      • Add Maven plugin
      • Add Maven plugin dependencies
      • Add Maven profile
      • Add Maven project property
      • Add a comment to a Maven dependency
      • Add a configuration option for the Maven runtime
      • Add managed Maven dependency
      • Add repository
      • Add the Develocity Maven extension
      • Apache Maven best practices
      • Change Maven Project Version
      • Change Maven dependency
      • Change Maven dependency classifier
      • Change Maven dependency scope
      • Change Maven managed dependency groupId, artifactId and optionally the version
      • Change Maven parent
      • Change Maven plugin configuration
      • Change Maven plugin dependencies
      • Change Maven plugin executions
      • Change Maven plugin group and artifact ID
      • Change Maven project property value
      • Exclude Maven dependency
      • Increment Maven project version
      • Manage dependencies
      • Modernize obsolete Maven poms
      • Order POM elements
      • Remove Maven dependency
      • Remove Maven managed dependency
      • Remove Maven plugin
      • Remove Maven plugin dependency
      • Remove Maven project property
      • Remove duplicate Maven dependencies
      • Remove exclusion
      • Remove redundant explicit dependency and plugin versions
      • Remove repository
      • Rename Maven property key
      • Set Maven project packaging
      • Update Maven wrapper
      • Upgrade Maven dependency version
      • Upgrade Maven parent project version
      • Upgrade Maven plugin version
      • Upgrade transitive Maven dependencies
      • Cleanup
        • Add explicit groupId to Maven plugins
        • Add explicit plugin versions
        • Dependency management dependencies should have a version
        • Drop prefixless expressions in POM
      • Search
        • Does not include Maven dependency
        • Effective dependencies
        • Effective managed dependencies
        • Find Maven dependency
        • Find Maven dependency management entry
        • Find Maven plugin
        • Find Maven project properties
        • Find Maven projects
        • Find effective maven settings
        • List effective Maven repositories
        • Maven dependency insight
        • Maven parent insight
        • Maven repository order
      • Security
        • Use HTTPS for repositories
      • Spring
        • Upgrade Spring dependencies
      • Utilities
        • Print Maven dependency hierarchy in DOT format
    • Micrometer
      • Convert Micrometer Timer to Observations
      • Migrate to Micrometer 1.13
      • Upgrade Micrometer
      • Dropwizard
        • Find Dropwizard metrics
      • Misk
        • Don't use an explicit empty label list
        • Migrate Misk counter to Micrometer
        • Migrate Misk metrics to Micrometer
    • Node.js
      • Find and fix vulnerable npm dependencies
      • Upgrade Node.js dependencies
      • Search
        • Find Node.js projects
        • Javascript UI library insights
        • Javascript database interaction library insights
        • Javascript form handling library insights
        • Javascript linting & formatting library insights
        • Javascript real-time communication library insights
        • Javascript security library insights
        • Javascript server-side frameworks insights
        • Javascript state management library insights
        • Javascript task runners & build tools insights
        • Javascript testing library insights
        • Javascript utility library insights
        • Node.js dependency insight
    • OkHttp
      • Migrate OkHttp dependencies to 4.x
      • Migrate OkHttp dependencies to 5.x
      • Migrate to OkHttp 4.x
      • Migrate to OkHttp 5.x
      • Reorder the arguments of RequestBody.create()
    • Okio
      • Migrate Okio dependencies to 3.x
      • Migrate to Okio 3.x
    • OpenAPI
      • Swagger
        • Convert API response codes to strings
        • Migrate from @Api to @Tag
        • Migrate from @ApiImplicitParams to @Parameters
        • Migrate from @ApiModelProperty to @Schema
        • Migrate from @ApiOperation to @Operation
        • Migrate from @ApiParam to @Parameter
        • Migrate from @ApiResponses to @ApiResponses
        • Migrate from Swagger to OpenAPI
        • Use Jakarta Swagger Artifacts
    • Org
      • Apache
        • Camel
          • Updates
            • Camel40
              • Change of method names brought by Camel JMX API changes
              • Change of method names brought by Camel JMX API changes
              • Migrate camel3 application to camel4.
              • Migrate moved types between Came 3.x and Camel 4.x
              • Replace context.getExtension(ExtendedCamelContext.class).get* with PluginHelper.get*(context)
              • Java
                • Camel API changes
                • Camel Http Extension changes
                • Camel bean recipe
                • Replaces removed method camel EIP
              • Xml
                • Camel XMl DSL Circuit Breaker changes
                • Camel XMl DSL changes
              • Yaml
                • Camel Yaml changes regarding route-configuration children
                • Camel Yaml steps not allowed as route child
            • Camel41
              • Camel Core changes
              • Camel XMl DSL changes
              • Changes for creation of inlined beans.
              • Tag Enum has been deprecated
            • Camel42
              • Camel Core changes
              • The option camel.main.debugger has been renamed
            • Camel43
              • Camel Core changes
              • Camel Resequence DSL changes
              • MemoryStateRepository and FileStateRepository were moved to another package and library
              • The header name for the List metadata has changed
            • Camel44
              • Camel Core changes
              • Migrates camel 4.0 application to camel 4.4
              • Replace 'camel.main.routeController' with camel.routecontroller'
              • Replace deprecated DefaultJsonSchemaLoader with DefaultJsonUriSchemaLoader
            • Customrecipes
              • Change prefix of property with Camel case
              • Move getter from context to PluginHelper.
        • Wicket
          • Migrate to Wicket 10.x
          • Wicket best practices
      • Axonframework
        • Migration
          • Upgrade to Axonframework 4.x Jakarta
          • Upgrade to Axonframework 4.x Javax
    • Properties
      • Add a new property
      • Change property key
      • Change property value
      • Create Properties file
      • Delete Property
      • Search
        • Find property
    • Quarkus
      • Add a Quarkus configuration property
      • Change Quarkus configuration property key
      • Change Quarkus configuration property value
      • Configure quarkus-maven-plugin with reasonable defaults
      • Delete Quarkus configuration property
      • Quarkus 1.13 migration from Quarkus 1.11
      • Use @ConfigMapping
      • Use Mutiny multi.toHotStream()
      • Use native profile in quarkus-maven-plugin
      • Migrate
        • Javaee
          • Add Quarkus 2 dependencies
          • Migrate JavaEE Code to Quarkus 2
          • Migrate JavaEE Maven Dependencies to Quarkus 2
          • Migrate JavaEE to Quarkus 2
          • Remove JavaEE dependencies
      • Quarkus 2.x
        • Quarkus 2.x migration from Quarkus 1.x
        • Remove avro-maven-plugin
        • Use @GrpcClient
        • Use @Identifier("default-kafka-broker")
        • Use PanacheEntityBase static methods
        • Use Uni
        • Use Uni
      • Search
        • Find Quarkus property
        • Search Quarkus profiles
    • Reactive
      • Reactor
        • Migrate to Reactor 3.5
        • Replace DirectProcessor.create() with Sinks.many().multicast().directBestEffort()
        • Replace EmitterProcessor.create() with Sinks.many().multicast().onBackpressureBuffer()
        • Replace EmitterProcessor.create(Boolean) with Sinks.many().multicast().onBackpressureBuffer(Queues.SMALL_BUFFER_SIZE, Boolean)
        • Replace EmitterProcessor.create(int) with Sinks.many().multicast().onBackpressureBuffer(int)
        • Replace EmitterProcessor.create(int, Boolean) with Sinks.many().multicast().onBackpressureBuffer(int, Boolean)
        • Replace MonoProcessor.create() with Sinks.one()
        • Replace ReplayProcessor.cacheLast() with Sinks.many().replay().latest()
        • Replace ReplayProcessor.cacheLast() with Sinks.many().replay().latest()
        • Replace ReplayProcessor.create() with Sinks.many().replay().all()
        • Replace ReplayProcessor.create(int) with Sinks.many().replay().limit(int)
        • Replace ReplayProcessor.create(int, false) with Sinks.many().replay().limit(int)
        • Replace ReplayProcessor.create(int, true) with Sinks.many().replay().all(int)
        • Replace ReplayProcessor.createSizeAndTimeout(int, Duration) with Sinks.many().replay().limit(int, duration)
        • Replace ReplayProcessor.createSizeAndTimeout(int, Duration, Scheduler) with Sinks.many().replay().limit(int, Duration, Scheduler)
        • Replace ReplayProcessor.createTimeout(Duration) with Sinks.many().replay().limit(duration)
        • Replace ReplayProcessor.createTimeout(Duration, Scheduler) with Sinks.many().replay().limit(Duration, Scheduler)
        • Replace UnicastProcessor.create() with Sinks.many().unicast().onBackpressureBuffer()
        • Replace UnicastProcessor.create(Queue) with Sinks.many().unicast().onBackpressureBuffer(Queue)
        • Replace UnicastProcessor.create(Queue, Consumer, Disposable) with Sinks.many().unicast().onBackpressureBuffer(Queue, Disposable)
        • Replace UnicastProcessor.create(Queue, Disposable) with Sinks.many().unicast().onBackpressureBuffer(Queue, Disposable)
        • Replace various Processor.cache calls with their Sinks equivalent
        • Replace various Processor.create calls with their Sinks equivalent
    • Recipes
      • Java Recipe best practices
      • OpenRewrite best practices
      • Recipe nullability best practices
      • Recipe testing best practices
    • Recommendations
      • Code Health
      • Code Style
      • Dependency Management
      • Infrastructure As Code
    • Scala
      • Migrate
        • Migrate to Scala 2.12.+
    • Search
      • Find build metadata
      • Find committers on repositories
      • Find parse to print inequality
    • SQL
      • Change a SQL function name
      • Find SQL in code and resource files
      • Format SQL in string text blocks
      • Search
        • Find SQL function
    • Static analysis and remediation
      • Add @Serial annotation to serialVersionUID
      • Add missing @Override to overriding and implementing methods
      • Add serialVersionUID to a Serializable class when missing
      • Atomic Boolean, Integer, and Long equality checks compare their values
      • Avoid boxed boolean expressions
      • BigDecimal rounding constants to RoundingMode enums
      • Boolean checks should not be inverted
      • CaseInsensitive comparisons do not alter case
      • Catch clause should do more than just rethrow
      • Chain StringBuilder.append() calls
      • Chain calls to builder methods
      • Change StringBuilder and StringBuffer character constructor argument to String
      • Changes code to use Java 17's instanceof pattern matching
      • Code cleanup
      • Combine semantically equal catch blocks
      • Common static analysis issues
      • Control flow statement indentation
      • Covariant equals
      • Default comes last
      • Don't use final on local variables
      • Enum values should be compared with "=="
      • Equals avoids null
      • Explicit initialization
      • Externalizable classes have no-arguments constructor
      • Fall through
      • Finalize classes with private constructors
      • Finalize local variables
      • Finalize method arguments
      • Finalize private fields
      • Fix String#format and String#formatted expressions
      • Fix missing braces
      • Hidden field
      • Hide utility class constructor
      • Inline variable
      • Java API best practices
      • Jump statements should not be redundant
      • Mask credit card numbers
      • Modifier order
      • Move @Nullable method annotations to the return type
      • Nested enums are not static
      • No C-style array declarations
      • No double brace initialization
      • No multiple variable declarations
      • No primitive wrappers for #toString() or #compareTo(..)
      • Operator wrapping
      • Prefer while over for loops
      • Properly use declaration-site type variance
      • Properly use declaration-site type variance for well-known types
      • Redundant file creation
      • Reformat local variable names to camelCase
      • Reformat private field names to camelCase
      • Remove @Nullable and @CheckForNull annotations from primitives
      • Remove JavaDoc @param, @return, and @throws with no description
      • Remove Object.finalize() invocations
      • Remove System.out#println statements
      • Remove Unneeded Assertions
      • Remove author tags from JavaDocs
      • Remove catch for a checked exception if the try block does not throw that exception
      • Remove empty blocks
      • Remove extra semicolons
      • Remove finalize() method
      • Remove garbage collection invocations
      • Remove redundant casts
      • Remove toString() calls on arrays
      • Remove unnecessary parentheses
      • Remove unneeded block
      • Remove unused local variables
      • Remove unused private fields
      • Remove unused private methods
      • Removes from code Java 14's instanceof pattern matching
      • Rename caught exceptions in empty catch blocks to ignored
      • Rename methods named hashcode, equal, or tostring
      • Rename packages to lowercase
      • Replace Optional#isPresent() with Optional#ifPresent()
      • Replace Stream.toList() with Stream.collect(Collectors.toList())
      • Replace StringBuilder#append with String
      • Replace booleanExpression ? false : true with !booleanExpression
      • Replace booleanExpression ? true : false with booleanExpression
      • Replace calls to Thread.run() with Thread.start()
      • Replace deprecated Runtime#exec() methods
      • Replace duplicate String literals
      • Replace invocations of Collections#sort(List, Comparator) with List#sort(Comparator)
      • Replace java.util.Set#removeAll(java.util.Collection) with java.util.Collection#forEach(Set::remove)
      • Replace java.util.Stack with java.util.Deque
      • Replace org.apache.commons.lang3.Validate#notNull with Objects#requireNonNull
      • Replace org.apache.commons.lang3.Validate#notNull with Objects#requireNonNull
      • Replace org.apache.commons.lang3.Validate#notNull with Objects#requireNonNull
      • Replace redundant String format invocations that are wrapped with PrintStream operations
      • Replace referential equality operators with Object equals method invocations when the operands both override Object.equals(Object obj)
      • Replace text block with regular string
      • Replaces Object.notify() with Object.notifyAll()
      • Set charset encoding explicitly when calling String#getBytes
      • Simplify boolean expression
      • Simplify boolean return
      • Simplify compound statement
      • Simplify consecutive assignments
      • Simplify constant if branch execution
      • Simplify java.time.Duration units
      • Simplify lambda blocks to expressions
      • Simplify ternary expressions
      • Sorted set stream should be collected to LinkedHashSet
      • Standardize method name casing
      • Static methods need not be final
      • Ternary operators should not be nested
      • Typecast parenthesis padding
      • Unnecessary String#toString
      • Unnecessary String#valueOf(..)
      • Unnecessary close in try-with-resources
      • Unnecessary explicit type arguments
      • Unnecessary throws
      • Unwrap @Repeatable annotations
      • Upper case literal suffixes
      • Use Collection interfaces
      • Use Collection#isEmpty() instead of comparing size()
      • Use Collections#emptyList(), emptyMap(), and emptySet()
      • Use Empty Array for Collection.toArray()
      • Use Map#containsKey
      • Use StandardCharset constants
      • Use String.contentEquals(CharSequence) instead of String.equals(CharSequence.toString())
      • Use String.equals() on String literals
      • Use String::replace() when first parameter is not a real regular expression
      • Use System.lineSeparator()
      • Use comparison rather than equality checks in for conditions
      • Use explicit types on lambda arguments
      • Use indexOf(String, int)
      • Use lambda expressions instead of anonymous classes
      • Use method references in lambda
      • Use primitive wrapper valueOf method
      • Use the diamond operator
      • Week Year (YYYY) should not be used for date formatting
      • Write octal values as decimal
      • finalize() calls super
      • for loop counters incremented in update
      • for loop counters should use postfix operators
      • hashCode() should not be called on array instances
      • indexOf should not compare greater than zero
      • indexOf() replaceable by contains()
      • new BigDecimal(double) should not be used
      • switch statements should have at least 3 case clauses
      • Java
        • Move annotation to type instead of field
    • Tech
      • Picnic
        • Errorprone
          • Refasterrules
            • Apply DoubleStream#filter(DoublePredicate) before DoubleStream#sorted() to reduce the number of elements to sort
            • Apply IntStream#filter(IntPredicate) before IntStream#sorted() to reduce the number of elements to sort
            • Apply LongStream#filter(LongPredicate) before LongStream#sorted() to reduce the number of elements to sort
            • AssertJBigIntegerRules Refaster recipes
            • AssertJBooleanRules Refaster recipes
            • AssertJByteRules Refaster recipes
            • AssertJCharSequenceRules Refaster recipes
            • AssertJDoubleRules Refaster recipes
            • AssertJFloatRules Refaster recipes
            • AssertJIntegerRules Refaster recipes
            • AssertJLongRules Refaster recipes
            • AssertJNumberRules Refaster recipes
            • AssertJPrimitiveRules Refaster recipes
            • AssertJShortRules Refaster recipes
            • AssertJStringRules Refaster recipes
            • Assorted Refaster rules that do not (yet) belong in one of the other classes with more topical Refaster rules
            • Avoid calling BugCheckerRefactoringTestHelper#setFixChooser(FixChooser) or BugCheckerRefactoringTestHelper#setImportOrder(String) with their respective default values
            • Avoid contrived ways of expressing the "greater than or equal to" relationship
            • Avoid contrived ways of expressing the "greater than" relationship
            • Avoid contrived ways of expressing the "less than or equal to" relationship
            • Avoid contrived ways of expressing the "less than" relationship
            • Avoid double negations; this is not Javascript
            • Don't negate an equality test or use the ternary operator to compare two booleans; directly test for inequality instead
            • Don't negate an inequality test or use the ternary operator to compare two booleans; directly test for equality instead
            • Don't unnecessarily call Streams#concat(DoubleStream...)
            • Don't unnecessarily call Streams#concat(IntStream...)
            • Don't unnecessarily call Streams#concat(LongStream...)
            • Don't unnecessarily convert to and from milliseconds. (This way nanosecond precision is retained.)
            • Don't unnecessarily convert to and from milliseconds. (This way nanosecond precision is retained.)
            • Don't unnecessarily repeat boolean expressions
            • Don't unnecessarily use the two-argument String#substring(int, int)
            • Don't use the ternary operator to create an optionally-absent string
            • In order to test whether a stream has any element, simply try to find one
            • In order to test whether a stream has any element, simply try to find one
            • In order to test whether a stream has any element, simply try to find one
            • In order to test whether a stream has any element, simply try to find one
            • In order to test whether a stream has any element, simply try to find one
            • In order to test whether a stream has any element, simply try to find one
            • Prefer BigDecimal#valueOf(double) over the associated constructor
            • Prefer Boolean#compare(boolean, boolean) over the Guava alternative
            • Prefer Boolean#hashCode(boolean) over the Guava alternative
            • Prefer BugCheckerRefactoringTestHelper.ExpectOutput#expectUnchanged() over repeating the input
            • Prefer Byte#hashCode(byte) over the Guava alternative
            • Prefer Character#BYTES over the Guava alternative
            • Prefer Character#compare(char, char) over the Guava alternative
            • Prefer Character#hashCode(char) over the Guava alternative
            • Prefer ChronoLocalDate#isBefore(ChronoLocalDate) over explicit comparison, as it yields more readable code
            • Prefer ChronoLocalDate#isBefore(ChronoLocalDate) over explicit comparison, as it yields more readable code
            • Prefer ChronoLocalDateTime#isBefore(ChronoLocalDateTime) over explicit comparison, as it yields more readable code
            • Prefer ChronoLocalDateTime#isBefore(ChronoLocalDateTime) over explicit comparison, as it yields more readable code
            • Prefer ChronoZonedDateTime#isBefore(ChronoZonedDateTime) over explicit comparison, as it yields more readable code
            • Prefer ChronoZonedDateTime#isBefore(ChronoZonedDateTime) over explicit comparison, as it yields more readable code
            • Prefer Clock#instant() over Instant#now(Clock), as it is more concise and more "OOP-py"
            • Prefer Collectors#joining() over Collectors#joining(CharSequence) with an empty delimiter string
            • Prefer Double#BYTES over the Guava alternative
            • Prefer Double#compare(double, double) over the Guava alternative
            • Prefer Double#hashCode(double) over the Guava alternative
            • Prefer Double#isFinite(double) over the Guava alternative
            • Prefer DoubleStream#anyMatch(DoublePredicate) over more contrived alternatives
            • Prefer DoubleStream#concat(DoubleStream, DoubleStream) over the Guava alternative
            • Prefer DoubleStream#noneMatch(DoublePredicate) over more contrived alternatives
            • Prefer Duration#isZero() over more contrived alternatives
            • Prefer Duration#ofDays(long) over alternative representations
            • Prefer Duration#ofHours(long) over alternative representations
            • Prefer Duration#ofMillis(long) over alternative representations
            • Prefer Duration#ofMinutes(long) over alternative representations
            • Prefer Duration#ofNanos(long) over alternative representations
            • Prefer Duration#ofSeconds(long) over alternative representations
            • Prefer Files#createTempFile(String, String, FileAttribute[]) over alternatives that create files with more liberal permissions
            • Prefer Files#readString(Path) over more verbose alternatives
            • Prefer Files#readString(Path, Charset) over more contrived alternatives
            • Prefer Float#BYTES over the Guava alternative
            • Prefer Float#compare(float, float) over the Guava alternative
            • Prefer Float#hashCode(float) over the Guava alternative
            • Prefer Float#isFinite(float) over the Guava alternative
            • Prefer Instant#EPOCH over alternative representations
            • Prefer Instant#atOffset(ZoneOffset) over more verbose alternatives
            • Prefer Instant#atZone(ZoneId) over more verbose alternatives
            • Prefer Instant#isBefore(Instant) over explicit comparison, as it yields more readable code
            • Prefer Instant#isBefore(Instant) over explicit comparison, as it yields more readable code
            • Prefer IntStream#anyMatch(IntPredicate) over more contrived alternatives
            • Prefer IntStream#concat(IntStream, IntStream) over the Guava alternative
            • Prefer IntStream#noneMatch(IntPredicate) over more contrived alternatives
            • Prefer IntStream#range(int, int) over the more contrived alternative
            • Prefer Integer#BYTES over the Guava alternative
            • Prefer Integer#compare(int, int) over the Guava alternative
            • Prefer Integer#hashCode(int) over the Guava alternative
            • Prefer LocalDate#atStartOfDay() over more contrived alternatives
            • Prefer LocalDate#minusDays(long) over more contrived alternatives
            • Prefer LocalDate#minusMonths(long) over more contrived alternatives
            • Prefer LocalDate#minusWeeks(long) over more contrived alternatives
            • Prefer LocalDate#minusYears(long) over more contrived alternatives
            • Prefer LocalDate#ofInstant(Instant, ZoneId) over more indirect alternatives
            • Prefer LocalDate#plusDays(long) over more contrived alternatives
            • Prefer LocalDate#plusMonths(long) over more contrived alternatives
            • Prefer LocalDate#plusWeeks(long) over more contrived alternatives
            • Prefer LocalDate#plusYears(long) over more contrived alternatives
            • Prefer LocalDateTime#minusDays(long) over more contrived alternatives
            • Prefer LocalDateTime#minusHours(long) over more contrived alternatives
            • Prefer LocalDateTime#minusMinutes(long) over more contrived alternatives
            • Prefer LocalDateTime#minusMonths(long) over more contrived alternatives
            • Prefer LocalDateTime#minusNanos(long) over more contrived alternatives
            • Prefer LocalDateTime#minusSeconds(long) over more contrived alternatives
            • Prefer LocalDateTime#minusWeeks(long) over more contrived alternatives
            • Prefer LocalDateTime#minusYears(long) over more contrived alternatives
            • Prefer LocalDateTime#ofInstant(Instant, ZoneId) over more indirect alternatives
            • Prefer LocalDateTime#plusDays(long) over more contrived alternatives
            • Prefer LocalDateTime#plusHours(long) over more contrived alternatives
            • Prefer LocalDateTime#plusMinutes(long) over more contrived alternatives
            • Prefer LocalDateTime#plusMonths(long) over more contrived alternatives
            • Prefer LocalDateTime#plusNanos(long) over more contrived alternatives
            • Prefer LocalDateTime#plusSeconds(long) over more contrived alternatives
            • Prefer LocalDateTime#plusWeeks(long) over more contrived alternatives
            • Prefer LocalDateTime#plusYears(long) over more contrived alternatives
            • Prefer LocalTime#minusHours(long) over more contrived alternatives
            • Prefer LocalTime#minusMinutes(long) over more contrived alternatives
            • Prefer LocalTime#minusNanos(long) over more contrived alternatives
            • Prefer LocalTime#minusSeconds(long) over more contrived alternatives
            • Prefer LocalTime#ofInstant(Instant, ZoneId) over more indirect alternatives
            • Prefer LocalTime#plusHours(long) over more contrived alternatives
            • Prefer LocalTime#plusMinutes(long) over more contrived alternatives
            • Prefer LocalTime#plusNanos(long) over more contrived alternatives
            • Prefer LocalTime#plusSeconds(long) over more contrived alternatives
            • Prefer Long#BYTES over the Guava alternative
            • Prefer Long#compare(long, long) over the Guava alternative
            • Prefer Long#hashCode(long) over the Guava alternative
            • Prefer LongStream#anyMatch(LongPredicate) over more contrived alternatives
            • Prefer LongStream#concat(LongStream, LongStream) over the Guava alternative
            • Prefer LongStream#noneMatch(LongPredicate) over more contrived alternatives
            • Prefer LongStream#range(long, long) over the more contrived alternative
            • Prefer Math#toIntExact(long) over the Guava alternative
            • Prefer Mockito#never()} over explicitly specifying that the associated invocation must happen precisely zero times
            • Prefer Objects#checkIndex(int, int) over the Guava alternative
            • Prefer OffsetDateTime#isBefore(OffsetDateTime) over explicit comparison, as it yields more readable code
            • Prefer OffsetDateTime#isBefore(OffsetDateTime) over explicit comparison, as it yields more readable code
            • Prefer OffsetDateTime#minusDays(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusHours(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusMinutes(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusMonths(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusNanos(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusSeconds(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusWeeks(long) over more contrived alternatives
            • Prefer OffsetDateTime#minusYears(long) over more contrived alternatives
            • Prefer OffsetDateTime#ofInstant(Instant, ZoneId) over more indirect alternatives
            • Prefer OffsetDateTime#plusDays(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusHours(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusMinutes(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusMonths(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusNanos(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusSeconds(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusWeeks(long) over more contrived alternatives
            • Prefer OffsetDateTime#plusYears(long) over more contrived alternatives
            • Prefer OffsetTime#minusHours(long) over more contrived alternatives
            • Prefer OffsetTime#minusMinutes(long) over more contrived alternatives
            • Prefer OffsetTime#minusNanos(long) over more contrived alternatives
            • Prefer OffsetTime#minusSeconds(long) over more contrived alternatives
            • Prefer OffsetTime#ofInstant(Instant, ZoneId) over more indirect alternatives
            • Prefer OffsetTime#plusHours(long) over more contrived alternatives
            • Prefer OffsetTime#plusMinutes(long) over more contrived alternatives
            • Prefer OffsetTime#plusNanos(long) over more contrived alternatives
            • Prefer OffsetTime#plusSeconds(long) over more contrived alternatives
            • Prefer Pattern#asPredicate() over non-JDK alternatives
            • Prefer Pattern#asPredicate() over non-JDK alternatives
            • Prefer Short#BYTES over the Guava alternative
            • Prefer Short#compare(short, short) over the Guava alternative
            • Prefer Short#hashCode(short) over the Guava alternative
            • Prefer Splitter#splitToStream(CharSequence) over less efficient alternatives
            • Prefer StepVerifier.LastStep#verifyComplete() over more verbose alternatives
            • Prefer StepVerifier.LastStep#verifyError() over more verbose alternatives
            • Prefer StepVerifier.LastStep#verifyErrorMatches(Predicate) over more verbose alternatives
            • Prefer StepVerifier.LastStep#verifyErrorMessage(String) over more verbose alternatives
            • Prefer StepVerifier.LastStep#verifyErrorSatisfies(Consumer) over more verbose alternatives
            • Prefer StepVerifier.LastStep#verifyTimeout(Duration) over more verbose alternatives
            • Prefer String#isEmpty() over alternatives that consult the string's length
            • Prefer String#join(CharSequence, Iterable) and variants over the Guava alternative
            • Prefer Strings#isNullOrEmpty(String) over the more verbose alternative
            • Prefer SuggestedFix#delete(Tree) over more contrived alternatives
            • Prefer SuggestedFix#postfixWith(Tree, String)} over more contrived alternatives
            • Prefer SuggestedFix#prefixWith(Tree, String) over more contrived alternatives
            • Prefer SuggestedFix#replace(Tree, String)} over more contrived alternatives
            • Prefer SuggestedFix#replace(Tree, String, int, int)} over more contrived alternatives
            • Prefer SuggestedFix#replace(int, int, String)} over more contrived alternatives
            • Prefer SuggestedFix#swap(Tree, Tree) over more contrived alternatives
            • Prefer Utf8#encodedLength(CharSequence) over less efficient alternatives
            • Prefer WebClient#get() over WebClient#method(HttpMethod) with HttpMethod#GET
            • Prefer WebClient#head() over WebClient#method(HttpMethod) with HttpMethod#HEAD
            • Prefer WebClient#options() over WebClient#method(HttpMethod) with HttpMethod#OPTIONS
            • Prefer WebClient#patch() over WebClient#method(HttpMethod) with HttpMethod#PATCH
            • Prefer WebClient#post() over WebClient#method(HttpMethod) with HttpMethod#POST
            • Prefer WebClient#put() over WebClient#method(HttpMethod) with HttpMethod#PUT
            • Prefer ZonedDateTime#minusDays(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusHours(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusMinutes(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusMonths(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusNanos(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusSeconds(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusWeeks(long) over more contrived alternatives
            • Prefer ZonedDateTime#minusYears(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusDays(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusHours(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusMinutes(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusMonths(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusNanos(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusSeconds(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusWeeks(long) over more contrived alternatives
            • Prefer ZonedDateTime#plusYears(long) over more contrived alternatives
            • Prefer a BigDecimal#signum() comparison to -1 over more contrived or less clear alternatives
            • Prefer a BigDecimal#signum() comparison to 1 over more contrived or less clear alternatives
            • Prefer an Integer#signum(int) comparison to -1 over less clear alternatives
            • Prefer an Integer#signum(int) comparison to 1 over less clear alternatives
            • Prefer an Long#signum(long) comparison to -1 over less clear alternatives
            • Prefer an Long#signum(long) comparison to 1 over less clear alternatives
            • Prefer direct invocation of String#String(char[]) over the indirection introduced by alternatives
            • Prefer direct invocation of String#String(char[], int, int) over the indirection introduced by alternatives
            • Prefer direct invocation of String#valueOf(Object) over the indirection introduced by Objects#toString(Object)
            • Prefer the != operator (with null as the second operand) over Objects#nonNull(Object)
            • Prefer the == operator (with null as the second operand) over Objects#isNull(Object)
            • Prefer the LocalTime#MIN over alternative representations
            • Prefer using BigDecimal#signum() over more contrived alternatives
            • Prefer using the Constants API over more verbose alternatives
            • Prefer using the constant BigDecimal#ONE when possible
            • Prefer using the constant BigDecimal#TEN when possible
            • Prefer using the constant BigDecimal#ZERO when possible
            • Refaster rules related to AssertJ assertions over BigDecimals
            • Refaster rules related to AssertJ assertions over expressions that may throw a Throwable subtype
            • Refaster rules related to AssertJ expressions and statements
            • Refaster rules related to Mockito expressions and statements
            • Refaster rules related to Reactor expressions and statements
            • Refaster rules related to code dealing with regular expressions
            • Refaster rules related to com.google.errorprone.bugpatterns.BugChecker classes
            • Refaster rules related to expressions dealing with (in)equalities
            • Refaster rules related to expressions dealing with (possibly) null values
            • Refaster rules related to expressions dealing with BigDecimals
            • Refaster rules related to expressions dealing with DoubleStreams
            • Refaster rules related to expressions dealing with InputStreams
            • Refaster rules related to expressions dealing with IntStreams
            • Refaster rules related to expressions dealing with LongStreams
            • Refaster rules related to expressions dealing with RxJava2Adapter
            • Refaster rules related to expressions dealing with Streams
            • Refaster rules related to expressions dealing with Strings
            • Refaster rules related to expressions dealing with SuggestedFixes
            • Refaster rules related to expressions dealing with files
            • Refaster rules related to expressions dealing with org.springframework.web.reactive.function.client.WebClient and related types
            • Refaster rules related to expressions dealing with primitives
            • Refaster rules related to expressions dealing with time
            • Refaster rules that replace TestNG assertions with equivalent AssertJ assertions
            • Refaster rules to replace JUnit assertions with AssertJ equivalents
            • Refaster template AssertJBigDecimalRules.AbstractBigDecimalAssertIsEqualByComparingTo
            • Refaster template AssertJBigDecimalRules.AbstractBigDecimalAssertIsNotEqualByComparingTo
            • Refaster template AssertJBigIntegerRules.AbstractBigIntegerAssertIsEqualTo
            • Refaster template AssertJBigIntegerRules.AbstractBigIntegerAssertIsNotEqualTo
            • Refaster template AssertJBigIntegerRules.AbstractBigIntegerAssertIsNotZero
            • Refaster template AssertJBigIntegerRules.AbstractBigIntegerAssertIsOne
            • Refaster template AssertJBigIntegerRules.AbstractBigIntegerAssertIsZero
            • Refaster template AssertJBooleanRules.AbstractBooleanAssertIsEqualTo
            • Refaster template AssertJBooleanRules.AbstractBooleanAssertIsFalse
            • Refaster template AssertJBooleanRules.AbstractBooleanAssertIsNotEqualTo
            • Refaster template AssertJBooleanRules.AbstractBooleanAssertIsTrue
            • Refaster template AssertJBooleanRules.AssertThatBooleanIsFalse
            • Refaster template AssertJBooleanRules.AssertThatBooleanIsTrue
            • Refaster template AssertJByteRules.AbstractByteAssertIsEqualTo
            • Refaster template AssertJByteRules.AbstractByteAssertIsNotEqualTo
            • Refaster template AssertJByteRules.AbstractByteAssertIsNotZero
            • Refaster template AssertJByteRules.AbstractByteAssertIsOne
            • Refaster template AssertJByteRules.AbstractByteAssertIsZero
            • Refaster template AssertJCharSequenceRules.AssertThatCharSequenceHasSize
            • Refaster template AssertJCharSequenceRules.AssertThatCharSequenceIsEmpty
            • Refaster template AssertJCharSequenceRules.AssertThatCharSequenceIsNotEmpty
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsCloseToWithOffset
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsEqualTo
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsNotEqualTo
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsNotZero
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsOne
            • Refaster template AssertJDoubleRules.AbstractDoubleAssertIsZero
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsCloseToWithOffset
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsEqualTo
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsNotEqualTo
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsNotZero
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsOne
            • Refaster template AssertJFloatRules.AbstractFloatAssertIsZero
            • Refaster template AssertJIntegerRules.AbstractIntegerAssertIsEqualTo
            • Refaster template AssertJIntegerRules.AbstractIntegerAssertIsNotEqualTo
            • Refaster template AssertJIntegerRules.AbstractIntegerAssertIsNotZero
            • Refaster template AssertJIntegerRules.AbstractIntegerAssertIsOne
            • Refaster template AssertJIntegerRules.AbstractIntegerAssertIsZero
            • Refaster template AssertJLongRules.AbstractLongAssertIsEqualTo
            • Refaster template AssertJLongRules.AbstractLongAssertIsNotEqualTo
            • Refaster template AssertJLongRules.AbstractLongAssertIsNotZero
            • Refaster template AssertJLongRules.AbstractLongAssertIsOne
            • Refaster template AssertJLongRules.AbstractLongAssertIsZero
            • Refaster template AssertJNumberRules.NumberAssertIsNegative
            • Refaster template AssertJNumberRules.NumberAssertIsNotNegative
            • Refaster template AssertJNumberRules.NumberAssertIsNotPositive
            • Refaster template AssertJNumberRules.NumberAssertIsPositive
            • Refaster template AssertJPrimitiveRules.AssertThatIsEqualTo
            • Refaster template AssertJPrimitiveRules.AssertThatIsGreaterThan
            • Refaster template AssertJPrimitiveRules.AssertThatIsGreaterThanOrEqualTo
            • Refaster template AssertJPrimitiveRules.AssertThatIsLessThan
            • Refaster template AssertJPrimitiveRules.AssertThatIsLessThanOrEqualTo
            • Refaster template AssertJPrimitiveRules.AssertThatIsNotEqualTo
            • Refaster template AssertJRules.AssertThatOptionalDouble
            • Refaster template AssertJRules.AssertThatOptionalInt
            • Refaster template AssertJRules.AssertThatOptionalLong
            • Refaster template AssertJShortRules.AbstractShortAssertIsEqualTo
            • Refaster template AssertJShortRules.AbstractShortAssertIsNotEqualTo
            • Refaster template AssertJShortRules.AbstractShortAssertIsNotZero
            • Refaster template AssertJShortRules.AbstractShortAssertIsOne
            • Refaster template AssertJShortRules.AbstractShortAssertIsZero
            • Refaster template AssertJStringRules.AbstractStringAssertStringIsEmpty
            • Refaster template AssertJStringRules.AbstractStringAssertStringIsNotEmpty
            • Refaster template AssertJStringRules.AssertThatDoesNotMatch
            • Refaster template AssertJStringRules.AssertThatMatches
            • Refaster template AssertJStringRules.AssertThatPathContent
            • Refaster template AssertJStringRules.AssertThatPathContentUtf8
            • Refaster template AssertJStringRules.AssertThatStringIsEmpty
            • Refaster template AssertJStringRules.AssertThatStringIsNotEmpty
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownBy
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByHasMessage
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByHasMessageContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByHasMessageNotContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByHasMessageStartingWith
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIOException
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIOExceptionHasMessage
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIOExceptionHasMessageContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIOExceptionHasMessageNotContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIOExceptionHasMessageStartingWith
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalArgumentException
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalArgumentExceptionHasMessage
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalArgumentExceptionHasMessageContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalArgumentExceptionHasMessageStartingWith
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalStateException
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalStateExceptionHasMessage
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalStateExceptionHasMessageContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalStateExceptionHasMessageNotContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByIllegalStateExceptionHasMessageStartingWith
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByNullPointerException
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByNullPointerExceptionHasMessage
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByNullPointerExceptionHasMessageContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByNullPointerExceptionHasMessageNotContaining
            • Refaster template AssertJThrowingCallableRules.AssertThatThrownByNullPointerExceptionHasMessageStartingWith
            • Refaster template DoubleStreamRules.DoubleStreamAllMatch
            • Refaster template DoubleStreamRules.DoubleStreamMin
            • Refaster template DoubleStreamRules.DoubleStreamTakeWhile
            • Refaster template InputStreamRules.InputStreamReadAllBytes
            • Refaster template InputStreamRules.InputStreamReadNBytes
            • Refaster template InputStreamRules.InputStreamSkipNBytes
            • Refaster template InputStreamRules.InputStreamTransferTo
            • Refaster template IntStreamRules.IntStreamAllMatch
            • Refaster template IntStreamRules.IntStreamMin
            • Refaster template IntStreamRules.IntStreamTakeWhile
            • Refaster template JUnitToAssertJRules.AssertThatCodeDoesNotThrowAnyException
            • Refaster template JUnitToAssertJRules.AssertThatCodeWithFailMessageStringDoesNotThrowAnyException
            • Refaster template JUnitToAssertJRules.AssertThatCodeWithFailMessageSupplierDoesNotThrowAnyException
            • Refaster template JUnitToAssertJRules.AssertThatIsFalse
            • Refaster template JUnitToAssertJRules.AssertThatIsNotNull
            • Refaster template JUnitToAssertJRules.AssertThatIsNotSameAs
            • Refaster template JUnitToAssertJRules.AssertThatIsNull
            • Refaster template JUnitToAssertJRules.AssertThatIsSameAs
            • Refaster template JUnitToAssertJRules.AssertThatIsTrue
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsFalse
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsNotNull
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsNotSameAs
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsNull
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsSameAs
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageStringIsTrue
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsFalse
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsNotNull
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsNotSameAs
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsNull
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsSameAs
            • Refaster template JUnitToAssertJRules.AssertThatWithFailMessageSupplierIsTrue
            • Refaster template LongStreamRules.LongStreamAllMatch
            • Refaster template LongStreamRules.LongStreamMin
            • Refaster template LongStreamRules.LongStreamTakeWhile
            • Refaster template MockitoRules.InvocationOnMockGetArguments
            • Refaster template StringRules.FilterEmptyString
            • Refaster template TestNGToAssertJRules.AssertEqual
            • Refaster template TestNGToAssertJRules.AssertEqualArrayIterationOrder
            • Refaster template TestNGToAssertJRules.AssertEqualArrayIterationOrderWithMessage
            • Refaster template TestNGToAssertJRules.AssertEqualArraysIrrespectiveOfOrder
            • Refaster template TestNGToAssertJRules.AssertEqualArraysIrrespectiveOfOrderWithMessage
            • Refaster template TestNGToAssertJRules.AssertEqualDoublesWithDelta
            • Refaster template TestNGToAssertJRules.AssertEqualDoublesWithDeltaWithMessage
            • Refaster template TestNGToAssertJRules.AssertEqualFloatsWithDelta
            • Refaster template TestNGToAssertJRules.AssertEqualFloatsWithDeltaWithMessage
            • Refaster template TestNGToAssertJRules.AssertEqualWithMessage
            • Refaster template TestNGToAssertJRules.AssertFalse
            • Refaster template TestNGToAssertJRules.AssertFalseWithMessage
            • Refaster template TestNGToAssertJRules.AssertNotNull
            • Refaster template TestNGToAssertJRules.AssertNotNullWithMessage
            • Refaster template TestNGToAssertJRules.AssertNotSame
            • Refaster template TestNGToAssertJRules.AssertNotSameWithMessage
            • Refaster template TestNGToAssertJRules.AssertNull
            • Refaster template TestNGToAssertJRules.AssertNullWithMessage
            • Refaster template TestNGToAssertJRules.AssertSame
            • Refaster template TestNGToAssertJRules.AssertSameWithMessage
            • Refaster template TestNGToAssertJRules.AssertThrows
            • Refaster template TestNGToAssertJRules.AssertTrue
            • Refaster template TestNGToAssertJRules.AssertTrueWithMessage
            • Refaster template TestNGToAssertJRules.AssertUnequal
            • Refaster template TestNGToAssertJRules.AssertUnequalDoublesWithDelta
            • Refaster template TestNGToAssertJRules.AssertUnequalDoublesWithDeltaWithMessage
            • Refaster template TestNGToAssertJRules.AssertUnequalFloatsWithDelta
            • Refaster template TestNGToAssertJRules.AssertUnequalFloatsWithDeltaWithMessage
            • Refaster template TestNGToAssertJRules.AssertUnequalWithMessage
            • Refaster template TestNGToAssertJRules.Fail
            • Refaster template TestNGToAssertJRules.FailWithMessage
            • Refaster template TestNGToAssertJRules.FailWithMessageAndThrowable
            • Refaster template TimeRules.ZeroDuration
            • Refaster template TimeRules.ZeroPeriod
            • Use Clock#systemUTC() when possible
            • Use ZoneOffset#UTC when possible
            • Use the fluent API style when using RxJava2Adapter#completableToMono
    • Terraform
      • Add Terraform configuration
      • Use a long enough byte length for random resources
      • AWS
        • Best practices for AWS
        • Disable Instance Metadata Service version 1
        • Enable API gateway caching
        • Enable point-in-time recovery for DynamoDB
        • Encrypt Aurora clusters
        • Encrypt CodeBuild projects
        • Encrypt DAX storage at rest
        • Encrypt DocumentDB storage
        • Encrypt EBS snapshots
        • Encrypt EBS volume launch configurations
        • Encrypt EBS volumes
        • Encrypt EFS Volumes in ECS Task Definitions in transit
        • Encrypt ElastiCache Redis at rest
        • Encrypt ElastiCache Redis in transit
        • Encrypt Neptune storage
        • Encrypt RDS clusters
        • Encrypt Redshift storage at rest
        • Ensure AWS CMK rotation is enabled
        • Ensure AWS EFS with encryption for data at rest is enabled
        • Ensure AWS EKS cluster endpoint access is publicly disabled
        • Ensure AWS Elasticsearch domain encryption for data at rest is enabled
        • Ensure AWS Elasticsearch domains have EnforceHTTPS enabled
        • Ensure AWS Elasticsearch has node-to-node encryption enabled
        • Ensure AWS IAM password policy has a minimum of 14 characters
        • Ensure AWS Lambda function is configured for function-level concurrent execution limit
        • Ensure AWS Lambda functions have tracing enabled
        • Ensure AWS RDS database instance is not publicly accessible
        • Ensure AWS S3 object versioning is enabled
        • Ensure Amazon EKS control plane logging enabled for all log types
        • Ensure CloudTrail log file validation is enabled
        • Ensure EC2 is EBS optimized
        • Ensure ECR repositories are encrypted
        • Ensure IAM password policy expires passwords within 90 days or less
        • Ensure IAM password policy prevents password reuse
        • Ensure IAM password policy requires at least one lowercase letter
        • Ensure IAM password policy requires at least one number
        • Ensure IAM password policy requires at least one symbol
        • Ensure IAM password policy requires at least one uppercase letter
        • Ensure Kinesis Stream is securely encrypted
        • Ensure RDS database has IAM authentication enabled
        • Ensure RDS instances have Multi-AZ enabled
        • Ensure VPC subnets do not assign public IP by default
        • Ensure data stored in an S3 bucket is securely encrypted at rest
        • Ensure detailed monitoring for EC2 instances is enabled
        • Ensure enhanced monitoring for Amazon RDS instances is enabled
        • Ensure respective logs of Amazon RDS are enabled
        • Ensure the S3 bucket has access logging enabled
        • Make ECR tags immutable
        • Scan images pushed to ECR
        • Use HTTPS for Cloudfront distribution
      • Azure
        • Best practices for Azure
        • Disable Kubernetes dashboard
        • Enable Azure Storage Account Trusted Microsoft Services access
        • Enable Azure Storage secure transfer required
        • Enable geo-redundant backups on PostgreSQL server
        • Encrypt Azure VM data disk with ADE/CMK
        • Ensure AKS policies add-on
        • Ensure AKV secrets have an expiration date set
        • Ensure Azure App Service Web app redirects HTTP to HTTPS
        • Ensure Azure Network Watcher NSG flow logs retention is greater than 90 days
        • Ensure Azure PostgreSQL database server with SSL connection is enabled
        • Ensure Azure SQL Server threat detection alerts are enabled for all threat types
        • Ensure Azure SQL server audit log retention is greater than 90 days
        • Ensure Azure SQL server send alerts to field value is set
        • Ensure Azure application gateway has WAF enabled
        • Ensure Azure key vault is recoverable
        • Ensure FTP Deployments are disabled
        • Ensure MSSQL servers have email service and co-administrators enabled
        • Ensure MySQL is using the latest version of TLS encryption
        • Ensure MySQL server databases have Enforce SSL connection enabled
        • Ensure MySQL server disables public network access
        • Ensure MySQL server enables Threat Detection policy
        • Ensure MySQL server enables geo-redundant backups
        • Ensure PostgreSQL server disables public network access
        • Ensure PostgreSQL server enables Threat Detection policy
        • Ensure PostgreSQL server enables infrastructure encryption
        • Ensure Send email notification for high severity alerts is enabled
        • Ensure Send email notification for high severity alerts to admins is enabled
        • Ensure Web App has incoming client certificates enabled
        • Ensure Web App uses the latest version of HTTP
        • Ensure Web App uses the latest version of TLS encryption
        • Ensure a security contact phone number is present
        • Ensure activity log retention is set to 365 days or greater
        • Ensure all keys have an expiration date
        • Ensure app service enables HTTP logging
        • Ensure app service enables detailed error messages
        • Ensure app service enables failed request tracing
        • Ensure app services use Azure files
        • Ensure key vault allows firewall rules settings
        • Ensure key vault enables purge protection
        • Ensure key vault key is backed by HSM
        • Ensure key vault secrets have content_type set
        • Ensure log profile is configured to capture all activities
        • Ensure managed identity provider is enabled for app services
        • Ensure public network access enabled is set to False for mySQL servers
        • Ensure standard pricing tier is selected
        • Ensure storage account uses latest TLS version
        • Ensure the storage container storing activity logs is not publicly accessible
        • Set Azure Storage Account default network access to deny
      • GCP
        • Best practices for GCP
        • Enable PodSecurityPolicy controller on Google Kubernetes Engine (GKE) clusters
        • Enable VPC Flow Logs for subnetworks
        • Enable VPC flow logs and intranode visibility
        • Ensure GCP Kubernetes cluster node auto-repair configuration is enabled
        • Ensure GCP Kubernetes engine clusters have legacy compute engine metadata endpoints disabled
        • Ensure GCP VM instances have block project-wide SSH keys feature enabled
        • Ensure GCP cloud storage bucket with uniform bucket-level access are enabled
        • Ensure IP forwarding on instances is disabled
        • Ensure binary authorization is used
        • Ensure compute instances launch with shielded VM enabled
        • Ensure private cluster is enabled when creating Kubernetes clusters
        • Ensure secure boot for shielded GKE nodes is enabled
        • Ensure shielded GKE nodes are enabled
        • Ensure the GKE metadata server is enabled
      • Search
        • Find Terraform resource
    • Text
      • Append to text file
      • Change text
      • Create text file
      • End of Line @ End of File (EOL @ EOF)
      • Experimental find text with multiselect
      • Find and replace
      • Find text
    • Transposecapitalization
      • SpongeBob-case comments
    • XML
      • Add a comment to an XML tag
      • Change XML attribute
      • Change XML attribute of a specific resource version
      • Change XML tag name
      • Change XML tag value
      • Create XML file
      • Remove XML tag
      • Remove empty XML Tag
      • Remove trailing whitespace
      • XSLT transformation
      • Format
        • Blank lines
        • Format XML
        • Normalize format
        • Normalize line breaks
        • Normalize to tabs or spaces
        • Tabs and indents
      • Liberty
        • Move persistence.xml file
        • Use correct application namespace values
        • Use correct connector namespace values
        • Use correct ejb-jar namespace values
        • Use correct web-app namespace values
      • Search
        • Find XML namespace URIs
        • Find XML namespace prefixes
        • Find XML tags
      • Security
        • Add date bounds to OWASP suppressions
        • Find OWASP vulnerability suppression XML files
        • Remove out-of-date OWASP suppressions
        • Update OWASP suppression date bounds
      • Style
        • XML style Auto-detection debug
    • YAML
      • Append to sequence
      • Change YAML property
      • Change key
      • Change property key
      • Change value
      • Coalesce YAML properties
      • Comment out property
      • Copy YAML value
      • Create YAML file
      • Delete key
      • Delete property
      • Merge YAML snippet
      • Cleanup
        • Remove unused YAML
      • Format
        • YAML indent
      • Search
        • Find YAML entries
        • Find YAML properties
  • Changelog
    • 8.36.0 Release (2024-09-24)
    • 8.35.0 Release (2024-09-12)
    • 8.34.0 Release (2024-08-28)
    • 8.33.4 Release (2024-08-12)
    • 8.32.0 Release (2024-07-31)
    • 8.30.0 Release (2024-07-16)
    • 8.29.0 Release (2024-07-03)
    • 8.28.1 Release (2024-06-19)
    • 8.27.4 Release (2024-06-10)
    • 8.27.1 Release (2024-05-22)
    • 8.25.0 Release (2024-05-08)
    • 8.24.0 Release (2024-04-25)
    • 8.23.2 Release (2024-04-05)
    • 8.21.0 Release (2024-03-20)
    • 8.20.0 Release (2024-03-13)
    • 8.17.1 Release (2024-02-21)
    • 8.15.2 Release (2024-02-07)
    • 8.14.0 Release (2024-01-24)
    • 8.13.4 Release (2024-01-16)
    • 8.13.1 Release (2024-01-09)
    • 8.12.0 Release (2023-12-28)
    • 8.11.5 Release (2023-12-21)
    • 8.11.2 Release (2023-12-18)
    • 8.11.1 Release (2023-12-08)
    • 8.11.0 Release (2023-12-05)
    • 8.9.6 Release (2023-11-21)
    • 8.9.0 Release (2023-11-13)
    • 8.8.4 Release (2023-11-07)
    • 8.8.3 Release (2023-10-31)
    • 8.8.1 Release (2023-10-27)
    • 8.8.0 Release (2023-10-23)
    • Earlier releases
      • 8.7.3 Release (2023-10-10)
      • 8.7.0 Release (2023-10-02)
      • 8.5.2 Release (2023-09-22)
      • 8.5.0 Release (2023-09-12)
      • 8.4.2 Release (2023-09-04)
      • 8.4.1 Release (2023-08-28)
      • 8.4.0 Release (2023-08-23)
      • 8.3.0 Release (2023-08-21)
      • 8.2.0 Release (2023-08-14)
      • 8.1.14 Release (2023-08-07)
      • 8.1.13 Release (2023-07-27)
      • 8.1.12 Release (2023-07-24)
      • 8.1.11 Release (2023-07-20)
      • 8.1.10 Release (2023-07-17)
      • 8.1.8 Release (2023-07-13)
      • 8.1.6 Release (2023-07-06)
      • 8.1.3 Release (2023-06-23)
      • Rewrite 7 to 8 migration. 8.1.2 Release (2023-06-13)
      • Rewrite 7 changelog
        • 7.40.6 Release (2023-05-08)
        • 7.40.0 Release (2023-04-21)
        • 7.39.1 Release (2023-04-04)
        • 7.38.0 Release (2023-03-15)
        • 7.37.2 Release (2023-03-02)
        • 7.36.0 Release (2023-02-16)
        • 7.35.0 Release (2023-01-20)
        • 7.34.2 Release (2022-12-16)
        • 7.34.0 Release (2022-12-09)
        • 7.33.0 Release (2022-11-16)
  • Reference
    • Frequently asked questions (FAQ)
    • Latest versions of every OpenRewrite module
    • Recipes with data tables
    • Maven plugin configuration
    • Gradle plugin configuration
    • Supported languages
    • Snapshot versions
    • JsonPath and JsonPathMatcher
    • Declarative YAML format
    • Method patterns
    • Dependency version selectors
    • Framework provided markers
    • Building and developing OpenRewrite
  • Concepts & explanations
    • Lossless Semantic Trees (LST)
    • Java LST examples
    • YAML LST examples
    • TreeVisitingPrinter
    • How LSTs are handled locally
    • Recipes
    • Visitors
    • Styles
    • Environment
    • Markers
    • JavaTemplate
    • Quarks
Powered by GitBook