Skip to content

Commit 407e3dd

Browse files
OpenRewrite recipe best practices
Use this link to re-run the recipe: https://app.moderne.io/recipes/org.openrewrite.recipes.rewrite.OpenRewriteRecipeBestPractices?organizationId=QUxML01vZGVybmUvTW9kZXJuZSArIE9wZW5SZXdyaXRl Co-authored-by: Moderne <team@moderne.io>
1 parent 9e138a7 commit 407e3dd

13 files changed

Lines changed: 263 additions & 96 deletions

src/main/java/org/openrewrite/java/migrate/javax/AddTransientAnnotationToPrivateAccessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public J.Return visitReturn(J.Return ret, List<JavaType.Variable> returnedVars)
110110
return super.visitReturn(ret, returnedVars);
111111
}
112112
};
113-
returnValueCollector.visitBlock(method.getBody(), returns);
113+
returnValueCollector.visit( method.getBody(), returns, getCursor().getParentTreeCursor() );
114114

115115
// Check if any return values are a class field
116116
return returns.stream().anyMatch(classVars::contains);

src/main/java/org/openrewrite/java/migrate/javax/RemoveEmbeddableId.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration classDecl, Ex
9494
if (!FindAnnotations.find(classDecl, "@javax.persistence.Embeddable").isEmpty() &&
9595
acc.isEmbeddableClass(classDecl.getType())) {
9696
// Remove @Id annotation from anything in the class (only found on VariableDeclarations)
97-
classDecl = new RemoveAnnotation("javax.persistence.Id").getVisitor()
98-
.visitClassDeclaration(classDecl, ctx);
97+
classDecl = new RemoveAnnotation( "javax.persistence.Id" ).getVisitor().visit( classDecl, ctx, getCursor().getParentTreeCursor() );
9998
maybeRemoveImport("javax.persistence.Id");
10099
}
101100
return super.visitClassDeclaration(classDecl, ctx);

src/main/java/org/openrewrite/java/migrate/jspecify/MoveAnnotationToArrayType.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
import org.openrewrite.java.JavaIsoVisitor;
2323
import org.openrewrite.java.TypeMatcher;
2424
import org.openrewrite.java.search.UsesType;
25-
import org.openrewrite.java.tree.*;
26-
27-
import org.jspecify.annotations.Nullable;
25+
import org.openrewrite.java.tree.J;
26+
import org.openrewrite.java.tree.JavaType;
27+
import org.openrewrite.java.tree.Space;
28+
import org.openrewrite.java.tree.TypeUtils;
2829

2930
import java.util.List;
3031

src/main/java/org/openrewrite/java/migrate/lang/IfElseIfConstructToSwitch.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ public J.Case visitCase(J.Case case_, ExecutionContext ctx) {
7272
if (case_.getBody() instanceof J.Block &&
7373
((J.Block) case_.getBody()).getStatements().isEmpty() &&
7474
!((J.Block) case_.getBody()).getEnd().isEmpty()) {
75-
return case_.withBody(((J.Block) case_.getBody())
76-
.withPrefix(Space.SINGLE_SPACE)
77-
.withEnd(Space.EMPTY));
75+
return case_.withBody( ((J.Block) case_.getBody())
76+
.withPrefix( Space.SINGLE_SPACE )
77+
.withEnd( Space.EMPTY ) );
7878
}
79-
return case_.withBody(case_.getBody().withPrefix(Space.SINGLE_SPACE));
79+
return case_.withBody( case_.getBody().withPrefix( Space.SINGLE_SPACE ) );
8080
}
81-
}.visitSwitch(switch_, ctx);
81+
}.visit( switch_, ctx, getCursor().getParentTreeCursor() );
8282
return super.visitSwitch(switch_, ctx);
8383
}
8484
return super.visitIf(if_, ctx);

src/main/java/org/openrewrite/java/migrate/lang/JavadocToMarkdownDocComment.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@
2828
import org.openrewrite.java.tree.*;
2929
import org.openrewrite.marker.Markers;
3030

31-
import java.util.*;
31+
import java.util.ArrayDeque;
32+
import java.util.ArrayList;
33+
import java.util.Deque;
34+
import java.util.List;
35+
36+
import static java.util.Collections.singletonList;
3237

3338
public class JavadocToMarkdownDocComment extends Recipe {
3439

@@ -67,7 +72,7 @@ private static List<Comment> convertDocComment(Javadoc.DocComment docComment, St
6772
List<String> lines = normalizeLines(converter.getLines());
6873

6974
if (lines.isEmpty()) {
70-
lines = Collections.singletonList("");
75+
lines = singletonList("");
7176
}
7277

7378
String interLineSuffix = "\n" + indentation;
@@ -516,7 +521,9 @@ private static String printJRef(J tree) {
516521
sb.append('(');
517522
List<Expression> args = mi.getArguments();
518523
for (int i = 0; i < args.size(); i++) {
519-
if (i > 0) sb.append(", ");
524+
if (i > 0) {
525+
sb.append( ", " );
526+
}
520527
Expression arg = args.get(i);
521528
if (!(arg instanceof J.Empty)) {
522529
sb.append(printJRef(arg));
@@ -546,7 +553,9 @@ private static String printJ(J tree) {
546553
if (pt.getTypeParameters() != null) {
547554
sb.append('<');
548555
for (int i = 0; i < pt.getTypeParameters().size(); i++) {
549-
if (i > 0) sb.append(", ");
556+
if (i > 0) {
557+
sb.append( ", " );
558+
}
550559
sb.append(printJ((J) pt.getTypeParameters().get(i)));
551560
}
552561
sb.append('>');

src/main/java/org/openrewrite/java/migrate/lang/RefineSwitchCases.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ public J.Case visitCase(J.Case case_, ExecutionContext ctx) {
8585
if (body.getStatements().isEmpty() &&
8686
body.getEnd().getComments().isEmpty() &&
8787
!body.getEnd().isEmpty()) {
88-
return case_.withBody(body.withEnd(Space.EMPTY));
88+
return case_.withBody( body.withEnd( Space.EMPTY ) );
8989
}
9090
}
9191
return case_;
9292
}
93-
}.visitSwitch(autoFormat(mappedSwitch, ctx), ctx);
93+
}.visit( autoFormat( mappedSwitch, ctx ), ctx, getCursor().getParentTreeCursor() );
9494
}
9595
return switch_;
9696
}

src/main/java/org/openrewrite/java/migrate/lombok/LombokValueToRecord.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ public J.ClassDeclaration visitClassDeclaration(J.ClassDeclaration cd, Execution
354354
List<Statement> bodyStatements = new ArrayList<>(classDeclaration.getBody().getStatements());
355355
bodyStatements.removeAll(memberVariables);
356356

357-
classDeclaration = new RemoveAnnotationVisitor(LOMBOK_VALUE_MATCHER).visitClassDeclaration(classDeclaration, ctx);
357+
classDeclaration = new RemoveAnnotationVisitor( LOMBOK_VALUE_MATCHER ).visit( classDeclaration, ctx, getCursor().getParentTreeCursor() );
358358
maybeRemoveImport("lombok.Value");
359359

360360
List<J.Modifier> mappedModifiers = ListUtils.map(classDeclaration.getModifiers(), modifier -> {

src/main/resources/META-INF/rewrite/examples.yml

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,8 @@ recipeName: org.openrewrite.java.migrate.JavaBestPractices
722722
examples:
723723
- description: '`JavaBestPracticesTest#updateCompilerVersion`'
724724
sources:
725+
- before: project
726+
language: mavenProject
725727
- before: |
726728
<project>
727729
<groupId>com.mycompany.app</groupId>
@@ -1340,6 +1342,8 @@ recipeName: org.openrewrite.java.migrate.UpgradeToJava25
13401342
examples:
13411343
- description: '`UpgradeToJava25Test#updateCompilerVersion`'
13421344
sources:
1345+
- before: project
1346+
language: mavenProject
13431347
- before: |
13441348
<project>
13451349
<groupId>com.mycompany.app</groupId>
@@ -4964,6 +4968,45 @@ examples:
49644968
language: xml
49654969
---
49664970
type: specs.openrewrite.org/v1beta/example
4971+
recipeName: org.openrewrite.java.migrate.jakarta.JavaxAnnotationMigrationToJakartaAnnotation
4972+
examples:
4973+
- description: '`JavaxAnnotationMigrationToJakartaAnnotationTest#migratesExplicitDependency`'
4974+
sources:
4975+
- before: |
4976+
import javax.annotation.Nonnull;
4977+
4978+
class A {
4979+
@Nonnull
4980+
String name;
4981+
}
4982+
after: |
4983+
import jakarta.annotation.Nonnull;
4984+
4985+
class A {
4986+
@Nonnull
4987+
String name;
4988+
}
4989+
language: java
4990+
- before: my-project
4991+
language: mavenProject
4992+
- before: |
4993+
<project>
4994+
<modelVersion>4.0.0</modelVersion>
4995+
<groupId>com.example</groupId>
4996+
<artifactId>demo</artifactId>
4997+
<version>0.0.1-SNAPSHOT</version>
4998+
<dependencies>
4999+
<dependency>
5000+
<groupId>javax.annotation</groupId>
5001+
<artifactId>javax.annotation-api</artifactId>
5002+
<version>1.3.2</version>
5003+
</dependency>
5004+
</dependencies>
5005+
</project>
5006+
path: pom.xml
5007+
language: xml
5008+
---
5009+
type: specs.openrewrite.org/v1beta/example
49675010
recipeName: org.openrewrite.java.migrate.jakarta.JavaxBeanValidationXmlToJakartaBeanValidationXml
49685011
examples:
49695012
- description: '`JavaxBeanValidationXmlToJakartaBeanValidationXmlTest#migrateJCP`'
@@ -5237,6 +5280,39 @@ examples:
52375280
language: xml
52385281
---
52395282
type: specs.openrewrite.org/v1beta/example
5283+
recipeName: org.openrewrite.java.migrate.jakarta.JavaxJspToJakartaJsp
5284+
examples:
5285+
- description: '`JavaxJspToJakartaJspTest#switchesJavaxJspApiDependencyToJakartaJspApiDependency`'
5286+
sources:
5287+
- before: |
5288+
import javax.servlet.jsp.PageContext;
5289+
public class TestApplication {
5290+
}
5291+
after: |
5292+
import jakarta.servlet.jsp.PageContext;
5293+
public class TestApplication {
5294+
}
5295+
language: java
5296+
- before: Sample
5297+
language: mavenProject
5298+
- before: |
5299+
<project>
5300+
<modelVersion>4.0.0</modelVersion>
5301+
<groupId>com.example</groupId>
5302+
<artifactId>demo</artifactId>
5303+
<version>0.0.1-SNAPSHOT</version>
5304+
<dependencies>
5305+
<dependency>
5306+
<groupId>javax.servlet.jsp</groupId>
5307+
<artifactId>javax.servlet.jsp-api</artifactId>
5308+
<version>2.3.3</version>
5309+
</dependency>
5310+
</dependencies>
5311+
</project>
5312+
path: pom.xml
5313+
language: xml
5314+
---
5315+
type: specs.openrewrite.org/v1beta/example
52405316
recipeName: org.openrewrite.java.migrate.jakarta.JavaxMailToJakartaMail
52415317
examples:
52425318
- description: '`JavaxMailToJakartaMailTest#switchesJavaxMailApiDependencyToJakartaMailApiDependency`'
@@ -5285,6 +5361,39 @@ examples:
52855361
language: java
52865362
---
52875363
type: specs.openrewrite.org/v1beta/example
5364+
recipeName: org.openrewrite.java.migrate.jakarta.JavaxPersistenceToJakartaPersistence
5365+
examples:
5366+
- description: '`JavaxPersistenceToJakartaPersistenceTest#switchesJavaxPersistenceApiDependencyToJakartaPersistenceApiDependency`'
5367+
sources:
5368+
- before: |
5369+
import javax.persistence.EntityManagerFactory;
5370+
public class TestApplication {
5371+
}
5372+
after: |
5373+
import jakarta.persistence.EntityManagerFactory;
5374+
public class TestApplication {
5375+
}
5376+
language: java
5377+
- before: Sample
5378+
language: mavenProject
5379+
- before: |
5380+
<project>
5381+
<modelVersion>4.0.0</modelVersion>
5382+
<groupId>com.example</groupId>
5383+
<artifactId>demo</artifactId>
5384+
<version>0.0.1-SNAPSHOT</version>
5385+
<dependencies>
5386+
<dependency>
5387+
<groupId>javax.persistence</groupId>
5388+
<artifactId>javax.persistence-api</artifactId>
5389+
<version>2.2</version>
5390+
</dependency>
5391+
</dependencies>
5392+
</project>
5393+
path: pom.xml
5394+
language: xml
5395+
---
5396+
type: specs.openrewrite.org/v1beta/example
52885397
recipeName: org.openrewrite.java.migrate.jakarta.JavaxServletToJakartaServlet
52895398
examples:
52905399
- description: '`JavaxServletToJakartaServletTest#switchesJavaxServletApiDependencyToJakartaServletApiDependency`'
@@ -6068,6 +6177,27 @@ examples:
60686177
language: java
60696178
---
60706179
type: specs.openrewrite.org/v1beta/example
6180+
recipeName: org.openrewrite.java.migrate.jakarta.UpdateJakartaFacesApi3
6181+
examples:
6182+
- description: '`Faces3#migrateSunFacesJsfApi`'
6183+
sources:
6184+
- before: |
6185+
<project>
6186+
<groupId>com.example</groupId>
6187+
<artifactId>jsf-app</artifactId>
6188+
<version>1.0.0</version>
6189+
<dependencies>
6190+
<dependency>
6191+
<groupId>com.sun.faces</groupId>
6192+
<artifactId>jsf-api</artifactId>
6193+
<version>2.2.20</version>
6194+
</dependency>
6195+
</dependencies>
6196+
</project>
6197+
path: pom.xml
6198+
language: xml
6199+
---
6200+
type: specs.openrewrite.org/v1beta/example
60716201
recipeName: org.openrewrite.java.migrate.jakarta.WsWsocServerContainerDeprecation
60726202
examples:
60736203
- description: '`WsWsocServerContainerDeprecationTest#deprecateWsWsocServerContainer`'
@@ -6877,6 +7007,32 @@ examples:
68777007
language: java
68787008
---
68797009
type: specs.openrewrite.org/v1beta/example
7010+
recipeName: org.openrewrite.java.migrate.jspecify.MoveAnnotationToArrayType
7011+
examples:
7012+
- description: '`MoveAnnotationToArrayTypeTest#moveNullableToArrayReturnType`'
7013+
parameters:
7014+
- javax.annotation.*ull*
7015+
sources:
7016+
- before: |
7017+
import javax.annotation.Nullable;
7018+
7019+
class Foo {
7020+
@Nullable
7021+
public byte[] bar() {
7022+
return null;
7023+
}
7024+
}
7025+
after: |
7026+
import javax.annotation.Nullable;
7027+
7028+
class Foo {
7029+
public byte @Nullable[] bar() {
7030+
return null;
7031+
}
7032+
}
7033+
language: java
7034+
---
7035+
type: specs.openrewrite.org/v1beta/example
68807036
recipeName: org.openrewrite.java.migrate.lang.ExplicitRecordImport
68817037
examples:
68827038
- description: '`ExplicitRecordImportTest#addImportFromSamePackage`'

src/test/java/org/openrewrite/java/migrate/EnableLombokAnnotationProcessorTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.openrewrite.java.migrate;
1717

1818
import org.junit.jupiter.api.Test;
19+
import org.openrewrite.DocumentExample;
1920
import org.openrewrite.test.RecipeSpec;
2021
import org.openrewrite.test.RewriteTest;
2122

@@ -30,6 +31,7 @@ public void defaults(RecipeSpec spec) {
3031
spec.recipeFromResources("org.openrewrite.java.migrate.EnableLombokAnnotationProcessor");
3132
}
3233

34+
@DocumentExample
3335
@Test
3436
void doesNotAddLombokWhenNotPresentViaUpgradeToJava25() {
3537
rewriteRun(

src/test/java/org/openrewrite/java/migrate/jakarta/JavaxAnnotationMigrationToJakartaAnnotationTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import org.openrewrite.test.RewriteTest;
2323

2424
import static org.assertj.core.api.Assertions.assertThat;
25+
import static org.openrewrite.java.Assertions.java;
2526
import static org.openrewrite.java.Assertions.mavenProject;
2627
import static org.openrewrite.java.Assertions.srcMainJava;
27-
import static org.openrewrite.java.Assertions.java;
2828
import static org.openrewrite.maven.Assertions.pomXml;
2929

3030
class JavaxAnnotationMigrationToJakartaAnnotationTest implements RewriteTest {

0 commit comments

Comments
 (0)