Java Recipe best practices
Recipe ID
org.openrewrite.java.recipes.JavaRecipeBestPracticesArtifactorg.openrewrite.recipe:rewrite-rewriteBest practices for Java recipe development.
Composite recipeMSAL
Add to your build
Get a download tokenThis recipe is Moderne licensed, so the token must belong to a Moderne customer. It replaces YOUR_DOWNLOAD_TOKEN below.
~/.gradle/gradle.properties
codeGenomeUsername=you@example.com
codeGenomeToken=YOUR_DOWNLOAD_TOKEN
build.gradle.kts
plugins {
id("org.openrewrite.rewrite") version("latest.release")
}
rewrite {
activeRecipe("org.openrewrite.java.recipes.JavaRecipeBestPractices")
}
repositories {
mavenCentral()
maven {
url = uri("https://artifacts.codegenomeproject.org/maven")
credentials {
username = providers.gradleProperty("codeGenomeUsername").get()
password = providers.gradleProperty("codeGenomeToken").get()
}
}
}
dependencies {
rewrite("org.openrewrite.recipe:rewrite-rewrite:0.33.0")
}
Then run
./gradlew rewriteRunUsage
This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.
mod run . --recipe org.openrewrite.java.recipes.JavaRecipeBestPracticesIf the recipe isn’t available locally, install it with:
mod config recipes jar install org.openrewrite.recipe:rewrite-rewrite:RELEASEDefinition
This recipe runs the following recipes in order.
- Add a blank line around fields with annotations
org.openrewrite.java.recipes.BlankLinesAroundFieldsWithAnnotations - Correctly spaced descriptions
org.openrewrite.java.recipes.CorrectlySpacedDescriptions - Use a standard name for
ExecutionContextorg.openrewrite.java.recipes.ExecutionContextParameterName - Inline nested visitor classes into the returning method
org.openrewrite.java.recipes.InlineNestedVisitorClass - Use
J.Literal.isLiteralValue(expression, null)org.openrewrite.java.recipes.IsLiteralNullRecipe - Find missing
@Optionexamplevaluesorg.openrewrite.java.recipes.MissingOptionExample - Recipe classes should not have mutable
staticfieldsorg.openrewrite.java.recipes.NoMutableStaticFieldsInRecipes - Use of
@EqualsAndHashCodeonRecipeorg.openrewrite.java.recipes.RecipeEqualsAndHashCodeCallSuper - Recipe classes should be public
org.openrewrite.java.recipes.RecipeClassesShouldBePublic - Reorder
maybeRemoveImportbeforemaybeAddImportorg.openrewrite.java.recipes.RemoveImportBeforeAddImport - Replace
getDisplayName()andgetDescription()methods with fieldsorg.openrewrite.java.recipes.UseDisplayNameAndDescriptionFields - Replace
getEstimatedEffortPerOccurrence()method with fieldorg.openrewrite.java.recipes.UseEstimatedEffortPerOccurrenceField - Use
StringUtilsutility methodsorg.openrewrite.java.recipes.UseStringUtilsRecipes - Replace
getTags()method with fieldorg.openrewrite.java.recipes.UseTagsField - Use
JavaTemplate.apply()static methodorg.openrewrite.java.recipes.UseJavaTemplateStaticApply - Use
Tree.randomId()in LST constructorsorg.openrewrite.java.recipes.UseTreeRandomId - Use
visitwith parent cursor when calling from another visitororg.openrewrite.java.recipes.UseVisitWithParentCursor - Fix missing braces
org.openrewrite.staticanalysis.NeedBraces - Remove
System.out#printlnstatementsorg.openrewrite.staticanalysis.RemoveSystemOutPrintln - Remove
@NlsRewriteannotations fromRecipeclassesorg.openrewrite.java.recipes.RemoveNlsRewriteAnnotations
Data tables
Structured output this recipe can produce.
- Source files that had resultsSource files that were modified by the recipe run.
org.openrewrite.table.SourcesFileResults - Source files that had search resultsSearch results that were found during the recipe run.
org.openrewrite.table.SearchResults - Source files that errored on a recipeThe details of all errors produced by a recipe run.
org.openrewrite.table.SourcesFileErrors - Recipe performanceStatistics used in analyzing the performance of recipes.
org.openrewrite.table.RecipeRunStats