diff --git a/rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java b/rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java index 76579b8d29..946b62cdaf 100644 --- a/rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java +++ b/rewrite-java-11/src/main/java/org/openrewrite/java/isolated/ReloadableJava11ParserVisitor.java @@ -719,7 +719,12 @@ public J visitIf(IfTree node, Space fmt) { @Override public J visitImport(ImportTree node, Space fmt) { - skip("import"); + Space beforeImport = sourceBefore("import"); + if (!beforeImport.isEmpty()) { + fmt = Space.build( + fmt.getWhitespace() + beforeImport.getWhitespace(), + ListUtils.concatAll(fmt.getComments(), beforeImport.getComments())); + } return new J.Import(randomId(), fmt, Markers.EMPTY, new JLeftPadded<>(node.isStatic() ? sourceBefore("static") : EMPTY, node.isStatic(), Markers.EMPTY), diff --git a/rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17ParserVisitor.java b/rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17ParserVisitor.java index b30d066a75..e3791c91db 100644 --- a/rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17ParserVisitor.java +++ b/rewrite-java-17/src/main/java/org/openrewrite/java/isolated/ReloadableJava17ParserVisitor.java @@ -825,7 +825,12 @@ public J visitIf(IfTree node, Space fmt) { @Override public J visitImport(ImportTree node, Space fmt) { - skip("import"); + Space beforeImport = sourceBefore("import"); + if (!beforeImport.isEmpty()) { + fmt = Space.build( + fmt.getWhitespace() + beforeImport.getWhitespace(), + ListUtils.concatAll(fmt.getComments(), beforeImport.getComments())); + } return new J.Import(randomId(), fmt, Markers.EMPTY, new JLeftPadded<>(node.isStatic() ? sourceBefore("static") : EMPTY, node.isStatic(), Markers.EMPTY), diff --git a/rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21ParserVisitor.java b/rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21ParserVisitor.java index c893474941..65a4603271 100644 --- a/rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21ParserVisitor.java +++ b/rewrite-java-21/src/main/java/org/openrewrite/java/isolated/ReloadableJava21ParserVisitor.java @@ -832,7 +832,12 @@ public J visitIf(IfTree node, Space fmt) { @Override public J visitImport(ImportTree node, Space fmt) { - skip("import"); + Space beforeImport = sourceBefore("import"); + if (!beforeImport.isEmpty()) { + fmt = Space.build( + fmt.getWhitespace() + beforeImport.getWhitespace(), + ListUtils.concatAll(fmt.getComments(), beforeImport.getComments())); + } return new J.Import(randomId(), fmt, Markers.EMPTY, new JLeftPadded<>(node.isStatic() ? sourceBefore("static") : EMPTY, node.isStatic(), Markers.EMPTY), diff --git a/rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java b/rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java index a84cf98885..1ecbc9a476 100644 --- a/rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java +++ b/rewrite-java-25/src/main/java/org/openrewrite/java/isolated/ReloadableJava25ParserVisitor.java @@ -848,7 +848,12 @@ public J visitIf(IfTree node, Space fmt) { @Override public J visitImport(ImportTree node, Space fmt) { - skip("import"); + Space beforeImport = sourceBefore("import"); + if (!beforeImport.isEmpty()) { + fmt = Space.build( + fmt.getWhitespace() + beforeImport.getWhitespace(), + ListUtils.concatAll(fmt.getComments(), beforeImport.getComments())); + } return new J.Import(randomId(), fmt, Markers.EMPTY, new JLeftPadded<>(node.isStatic() ? sourceBefore("static") : EMPTY, node.isStatic(), Markers.EMPTY), diff --git a/rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java b/rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java index 517e1af0f8..d68fc97910 100644 --- a/rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java +++ b/rewrite-java-8/src/main/java/org/openrewrite/java/ReloadableJava8ParserVisitor.java @@ -718,7 +718,12 @@ public J visitIf(IfTree node, Space fmt) { @Override public J visitImport(ImportTree node, Space fmt) { - skip("import"); + Space beforeImport = sourceBefore("import"); + if (!beforeImport.isEmpty()) { + fmt = Space.build( + fmt.getWhitespace() + beforeImport.getWhitespace(), + ListUtils.concatAll(fmt.getComments(), beforeImport.getComments())); + } return new J.Import(randomId(), fmt, Markers.EMPTY, new JLeftPadded<>(node.isStatic() ? sourceBefore("static") : EMPTY, node.isStatic(), Markers.EMPTY), diff --git a/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/ImportTest.java b/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/ImportTest.java index 8771747a89..ab5ec4d9cf 100644 --- a/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/ImportTest.java +++ b/rewrite-java-tck/src/main/java/org/openrewrite/java/tree/ImportTest.java @@ -15,7 +15,6 @@ */ package org.openrewrite.java.tree; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.openrewrite.Issue; import org.openrewrite.test.RewriteTest; @@ -188,7 +187,6 @@ void spaceBeforeSemiColon() { ); } - @Disabled("Parser does not support semicolon after package declaration yet") @Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/396") @Test void semicolonAfterPackage() { @@ -206,7 +204,6 @@ class AfterPackage { } ); } - @Disabled("Parser does not support semicolon between imports yet") @Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/396") @Test void semicolonBetweenImports() { @@ -239,4 +236,25 @@ void semicolonAfterImports() { ) ); } + + @Issue("https://github.com/openrewrite/rewrite/issues/6310") + @Test + void extraSemicolonAfterImportWithComment() { + rewriteRun( + spec -> spec + .typeValidationOptions(TypeValidation.all().allowNonWhitespaceInWhitespace(true)), + java( + """ + import java.util.*;; // Semicolon here + import java.io.*; // Followed by another import + + public class Main { + public static void main(String[] args) { + System.out.printf("Hello and welcome!"); + } + } + """ + ) + ); + } }