diff --git a/src/main/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVar.java b/src/main/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVar.java index 821f9c2f94..39b8c3cc1b 100644 --- a/src/main/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVar.java +++ b/src/main/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVar.java @@ -99,7 +99,9 @@ public J.VariableDeclarations visitVariableDeclarations(J.VariableDeclarations m return varDecls.withTypeExpression(varType); } - if (varDecls.getModifiers().stream().noneMatch(m -> m.getType() == J.Modifier.Type.Final)) { + // Resources of a try-with-resources statement are implicitly final + boolean implicitlyFinal = getCursor().getParentTreeCursor().getValue() instanceof J.Try.Resource; + if (!implicitlyFinal && varDecls.getModifiers().stream().noneMatch(m -> m.getType() == J.Modifier.Type.Final)) { varDecls = varDecls.withModifiers(ListUtils.concat( new J.Modifier(Tree.randomId(), typeExpression.getPrefix(), Markers.EMPTY, null, J.Modifier.Type.Final, emptyList()), diff --git a/src/test/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVarTest.java b/src/test/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVarTest.java index 2a215d0316..4385750983 100755 --- a/src/test/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVarTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lombok/LombokValToFinalVarTest.java @@ -129,6 +129,41 @@ public Function bar(Function keySelector) { ); } + @Test + void doNotUseFinal_TryWithResources_statement() { + //language=java + rewriteRun( + version( + java( + """ + import java.io.StringWriter; + import lombok.val; + + class A { + public void foo(String aaa) { + try (val writer = new StringWriter()) { + writer.append(aaa); + } + } + } + """, + """ + import java.io.StringWriter; + + class A { + public void foo(String aaa) { + try (var writer = new StringWriter()) { + writer.append(aaa); + } + } + } + """ + ), + 17 + ) + ); + } + @Test void preserveStarImport() { //language=java