Skip to content

Commit 5f40320

Browse files
committed
Issue #124: Implement recipe for NewlineAtEndOfFile
1 parent bb2e6c3 commit 5f40320

21 files changed

+584
-42
lines changed

.gitattributes

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Test resources that need specific eol
2+
src/test/resources/org/checkstyle/autofix/recipe/newlineatendoffile/** -text
3+
4+
# Force LF line endings for diff test files
5+
*.diff text eol=lf

config/pitest-suppressions.xml

Lines changed: 208 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -460,15 +460,6 @@
460460
<lineContent>header = config.getProperty(HEADER_PROPERTY);</lineContent>
461461
</mutation>
462462

463-
<mutation unstable="false">
464-
<sourceFile>Header.java</sourceFile>
465-
<mutatedClass>org.checkstyle.autofix.recipe.Header</mutatedClass>
466-
<mutatedMethod>extractLicenseHeader</mutatedMethod>
467-
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.ArgumentPropagationMutator</mutator>
468-
<description>replaced call to org/checkstyle/autofix/recipe/Header::toLfLineEnding with argument</description>
469-
<lineContent>header = toLfLineEnding(Files.readString(Path.of(headerFilePath), charsetToUse));</lineContent>
470-
</mutation>
471-
472463
<mutation unstable="false">
473464
<sourceFile>Header.java</sourceFile>
474465
<mutatedClass>org.checkstyle.autofix.recipe.Header</mutatedClass>
@@ -505,15 +496,6 @@
505496
<lineContent>return &quot;Header recipe&quot;;</lineContent>
506497
</mutation>
507498

508-
<mutation unstable="false">
509-
<sourceFile>Header.java</sourceFile>
510-
<mutatedClass>org.checkstyle.autofix.recipe.Header</mutatedClass>
511-
<mutatedMethod>toLfLineEnding</mutatedMethod>
512-
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.NakedReceiverMutator</mutator>
513-
<description>replaced call to java/lang/String::replaceAll with receiver</description>
514-
<lineContent>return text.replaceAll(&quot;(?x)\\\\r(?=\\\\n)|\\r(?=\\n)&quot;, &quot;&quot;);</lineContent>
515-
</mutation>
516-
517499
<mutation unstable="false">
518500
<sourceFile>Header.java</sourceFile>
519501
<mutatedClass>org.checkstyle.autofix.recipe.Header$HeaderVisitor</mutatedClass>
@@ -523,22 +505,13 @@
523505
<lineContent>return violations.removeIf(violation -&gt; {</lineContent>
524506
</mutation>
525507

526-
<mutation unstable="false">
527-
<sourceFile>Header.java</sourceFile>
528-
<mutatedClass>org.checkstyle.autofix.recipe.Header$HeaderVisitor</mutatedClass>
529-
<mutatedMethod>lambda$extractCurrentHeader$0</mutatedMethod>
530-
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.ArgumentPropagationMutator</mutator>
531-
<description>replaced call to org/checkstyle/autofix/recipe/Header::toLfLineEnding with argument</description>
532-
<lineContent>+ toLfLineEnding(comment.getSuffix());</lineContent>
533-
</mutation>
534-
535508
<mutation unstable="false">
536509
<sourceFile>Header.java</sourceFile>
537510
<mutatedClass>org.checkstyle.autofix.recipe.Header$HeaderVisitor</mutatedClass>
538511
<mutatedMethod>lambda$extractCurrentHeader$0</mutatedMethod>
539512
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
540513
<description>removed call to org/checkstyle/autofix/recipe/Header$HeaderVisitor::getCursor</description>
541-
<lineContent>return comment.printComment(getCursor())</lineContent>
514+
<lineContent>return comment.printComment(getCursor()) + comment.getSuffix();</lineContent>
542515
</mutation>
543516

544517
<mutation unstable="false">
@@ -730,6 +703,213 @@
730703
<lineContent>J.Literal result = super.visitLiteral(literal, executionContext);</lineContent>
731704
</mutation>
732705

706+
<mutation unstable="false">
707+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
708+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile</mutatedClass>
709+
<mutatedMethod>getDescription</mutatedMethod>
710+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator</mutator>
711+
<description>replaced return value with &quot;&quot; for org/checkstyle/autofix/recipe/NewlineAtEndOfFile::getDescription</description>
712+
<lineContent>return &quot;Some tools work better when files end with an empty line.&quot;;</lineContent>
713+
</mutation>
714+
715+
<mutation unstable="false">
716+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
717+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile</mutatedClass>
718+
<mutatedMethod>getDisplayName</mutatedMethod>
719+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator</mutator>
720+
<description>replaced return value with &quot;&quot; for org/checkstyle/autofix/recipe/NewlineAtEndOfFile::getDisplayName</description>
721+
<lineContent>return &quot;End files with a single newline&quot;;</lineContent>
722+
</mutation>
723+
724+
<mutation unstable="false">
725+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
726+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
727+
<mutatedMethod>determineLineEnding</mutatedMethod>
728+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
729+
<description>removed call to org/checkstyle/autofix/recipe/NewlineAtEndOfFile$NewLineAtEndOfFileVisitor::getAutodetectedLineEnding</description>
730+
<lineContent>case &quot;lf_cr_crlf&quot; -&gt; getAutodetectedLineEnding(sourceFile);</lineContent>
731+
</mutation>
732+
733+
<mutation unstable="false">
734+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
735+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
736+
<mutatedMethod>determineLineEnding</mutatedMethod>
737+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
738+
<description>removed call to java/lang/System::lineSeparator</description>
739+
<lineContent>case &quot;system&quot; -&gt; System.lineSeparator();</lineContent>
740+
</mutation>
741+
742+
<mutation unstable="false">
743+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
744+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
745+
<mutatedMethod>determineLineEnding</mutatedMethod>
746+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.RemoveSwitchMutator_2</mutator>
747+
<description>RemoveSwitch 2 (case value 2)</description>
748+
<lineContent>return switch (lineSeparatorConfig) {</lineContent>
749+
</mutation>
750+
751+
<mutation unstable="false">
752+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
753+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
754+
<mutatedMethod>determineLineEnding</mutatedMethod>
755+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.RemoveSwitchMutator_3</mutator>
756+
<description>RemoveSwitch 3 (case value 3)</description>
757+
<lineContent>return switch (lineSeparatorConfig) {</lineContent>
758+
</mutation>
759+
760+
<mutation unstable="false">
761+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
762+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
763+
<mutatedMethod>determineLineEnding</mutatedMethod>
764+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.RemoveSwitchMutator_4</mutator>
765+
<description>RemoveSwitch 4 (case value 4)</description>
766+
<lineContent>return switch (lineSeparatorConfig) {</lineContent>
767+
</mutation>
768+
769+
<mutation unstable="false">
770+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
771+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
772+
<mutatedMethod>getAutodetectedLineEnding</mutatedMethod>
773+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
774+
<description>removed call to org/openrewrite/style/Style::from</description>
775+
<lineContent>Style.from(GeneralFormatStyle.class, sourceFile, () -&gt; {</lineContent>
776+
</mutation>
777+
778+
<mutation unstable="false">
779+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
780+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
781+
<mutatedMethod>getAutodetectedLineEnding</mutatedMethod>
782+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
783+
<description>removed call to org/openrewrite/style/GeneralFormatStyle::newLine</description>
784+
<lineContent>return generalFormatStyle.newLine();</lineContent>
785+
</mutation>
786+
787+
<mutation unstable="false">
788+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
789+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
790+
<mutatedMethod>getAutodetectedLineEnding</mutatedMethod>
791+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.EmptyObjectReturnValsMutator</mutator>
792+
<description>replaced return value with &quot;&quot; for org/checkstyle/autofix/recipe/NewlineAtEndOfFile$NewLineAtEndOfFileVisitor::getAutodetectedLineEnding</description>
793+
<lineContent>return generalFormatStyle.newLine();</lineContent>
794+
</mutation>
795+
796+
<mutation unstable="false">
797+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
798+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
799+
<mutatedMethod>hasViolation</mutatedMethod>
800+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator</mutator>
801+
<description>replaced boolean return with true for org/checkstyle/autofix/recipe/NewlineAtEndOfFile$NewLineAtEndOfFileVisitor::hasViolation</description>
802+
<lineContent>return violations.stream()</lineContent>
803+
</mutation>
804+
805+
<mutation unstable="false">
806+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
807+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
808+
<mutatedMethod>lambda$getAutodetectedLineEnding$1</mutatedMethod>
809+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
810+
<description>removed call to org/openrewrite/java/format/AutodetectGeneralFormatStyle::autodetectGeneralFormatStyle</description>
811+
<lineContent>.autodetectGeneralFormatStyle(sourceFile);</lineContent>
812+
</mutation>
813+
814+
<mutation unstable="false">
815+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
816+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
817+
<mutatedMethod>lambda$getAutodetectedLineEnding$1</mutatedMethod>
818+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.NullReturnValsMutator</mutator>
819+
<description>replaced return value with null for org/checkstyle/autofix/recipe/NewlineAtEndOfFile$NewLineAtEndOfFileVisitor::lambda$getAutodetectedLineEnding$1</description>
820+
<lineContent>return AutodetectGeneralFormatStyle</lineContent>
821+
</mutation>
822+
823+
<mutation unstable="false">
824+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
825+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
826+
<mutatedMethod>lambda$hasViolation$2</mutatedMethod>
827+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.returns.BooleanTrueReturnValsMutator</mutator>
828+
<description>replaced boolean return with true for org/checkstyle/autofix/recipe/NewlineAtEndOfFile$NewLineAtEndOfFileVisitor::lambda$hasViolation$2</description>
829+
<lineContent>.anyMatch(violation -&gt; violation.getFilePath().endsWith(filePath));</lineContent>
830+
</mutation>
831+
832+
<mutation unstable="false">
833+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
834+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
835+
<mutatedMethod>mapLast</mutatedMethod>
836+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
837+
<description>removed call to java/util/List::isEmpty</description>
838+
<lineContent>if (comments != null &amp;&amp; !comments.isEmpty()) {</lineContent>
839+
</mutation>
840+
841+
<mutation unstable="false">
842+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
843+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
844+
<mutatedMethod>mapLast</mutatedMethod>
845+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_IF</mutator>
846+
<description>removed conditional - replaced equality check with true</description>
847+
<lineContent>if (comments != null &amp;&amp; !comments.isEmpty()) {</lineContent>
848+
</mutation>
849+
850+
<mutation unstable="false">
851+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
852+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
853+
<mutatedMethod>mapLast</mutatedMethod>
854+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_IF</mutator>
855+
<description>removed conditional - replaced equality check with true</description>
856+
<lineContent>if (last != newLast) {</lineContent>
857+
</mutation>
858+
859+
<mutation unstable="false">
860+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
861+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
862+
<mutatedMethod>visit</mutatedMethod>
863+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.experimental.NakedReceiverMutator</mutator>
864+
<description>replaced call to java/nio/file/Path::toAbsolutePath with receiver</description>
865+
<lineContent>final Path filePath = sourceFile.getSourcePath().toAbsolutePath();</lineContent>
866+
</mutation>
867+
868+
<mutation unstable="false">
869+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
870+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
871+
<mutatedMethod>visit</mutatedMethod>
872+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
873+
<description>removed call to org/openrewrite/java/tree/Space::getLastWhitespace</description>
874+
<lineContent>final String lastWhitespace = eof.getLastWhitespace();</lineContent>
875+
</mutation>
876+
877+
<mutation unstable="false">
878+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
879+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
880+
<mutatedMethod>visit</mutatedMethod>
881+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.NonVoidMethodCallMutator</mutator>
882+
<description>removed call to java/lang/String::equals</description>
883+
<lineContent>if (!expectedLineEnding.equals(lastWhitespace)) {</lineContent>
884+
</mutation>
885+
886+
<mutation unstable="false">
887+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
888+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
889+
<mutatedMethod>visit</mutatedMethod>
890+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_IF</mutator>
891+
<description>removed conditional - replaced equality check with true</description>
892+
<lineContent>if (!expectedLineEnding.equals(lastWhitespace)) {</lineContent>
893+
</mutation>
894+
895+
<mutation unstable="false">
896+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
897+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
898+
<mutatedMethod>visit</mutatedMethod>
899+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_IF</mutator>
900+
<description>removed conditional - replaced equality check with true</description>
901+
<lineContent>if (hasViolation(filePath)) {</lineContent>
902+
</mutation>
903+
904+
<mutation unstable="false">
905+
<sourceFile>NewlineAtEndOfFile.java</sourceFile>
906+
<mutatedClass>org.checkstyle.autofix.recipe.NewlineAtEndOfFile$NewLineAtEndOfFileVisitor</mutatedClass>
907+
<mutatedMethod>visit</mutatedMethod>
908+
<mutator>org.pitest.mutationtest.engine.gregor.mutators.RemoveConditionalMutator_EQUAL_IF</mutator>
909+
<description>removed conditional - replaced equality check with true</description>
910+
<lineContent>if (tree instanceof JavaSourceFile sourceFile) {</lineContent>
911+
</mutation>
912+
733913
<mutation unstable="false">
734914
<sourceFile>PositionHelper.java</sourceFile>
735915
<mutatedClass>org.checkstyle.autofix.PositionHelper</mutatedClass>

src/main/java/org/checkstyle/autofix/CheckstyleCheck.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
public enum CheckstyleCheck {
2424
FINAL_LOCAL_VARIABLE("com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck"),
2525
HEADER("com.puppycrawl.tools.checkstyle.checks.header.HeaderCheck"),
26+
NEWLINE_AT_END_OF_FILE("com.puppycrawl.tools.checkstyle.checks.NewlineAtEndOfFileCheck"),
2627
UPPER_ELL("com.puppycrawl.tools.checkstyle.checks.UpperEllCheck"),
2728
HEX_LITERAL_CASE("com.puppycrawl.tools.checkstyle.checks.HexLiteralCaseCheck"),
2829
REDUNDANT_IMPORT("com.puppycrawl.tools.checkstyle.checks.imports.RedundantImportCheck");

src/main/java/org/checkstyle/autofix/CheckstyleRecipeRegistry.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.checkstyle.autofix.recipe.FinalLocalVariable;
3131
import org.checkstyle.autofix.recipe.Header;
3232
import org.checkstyle.autofix.recipe.HexLiteralCase;
33+
import org.checkstyle.autofix.recipe.NewlineAtEndOfFile;
3334
import org.checkstyle.autofix.recipe.RedundantImport;
3435
import org.checkstyle.autofix.recipe.UpperEll;
3536
import org.openrewrite.Recipe;
@@ -48,6 +49,7 @@ public final class CheckstyleRecipeRegistry {
4849
RECIPE_MAP.put(CheckstyleCheck.HEX_LITERAL_CASE, HexLiteralCase::new);
4950
RECIPE_MAP.put(CheckstyleCheck.FINAL_LOCAL_VARIABLE, FinalLocalVariable::new);
5051
RECIPE_MAP_WITH_CONFIG.put(CheckstyleCheck.HEADER, Header::new);
52+
RECIPE_MAP_WITH_CONFIG.put(CheckstyleCheck.NEWLINE_AT_END_OF_FILE, NewlineAtEndOfFile::new);
5153
RECIPE_MAP.put(CheckstyleCheck.REDUNDANT_IMPORT, RedundantImport::new);
5254
}
5355

src/main/java/org/checkstyle/autofix/recipe/Header.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public class Header extends Recipe {
3939
private static final String HEADER_PROPERTY = "header";
4040
private static final String HEADER_FILE_PROPERTY = "headerFile";
4141
private static final String CHARSET_PROPERTY = "charset";
42-
private static final String LINE_SEPARATOR = "\n";
42+
private static final String LINE_SEPARATOR = System.lineSeparator();
4343

4444
private final List<CheckstyleViolation> violations;
4545
private final CheckConfiguration config;
@@ -75,7 +75,7 @@ private static String extractLicenseHeader(CheckConfiguration config) {
7575
.getPropertyOrDefault(CHARSET_PROPERTY, Charset.defaultCharset().name()));
7676
final String headerFilePath = config.getProperty(HEADER_FILE_PROPERTY);
7777
try {
78-
header = toLfLineEnding(Files.readString(Path.of(headerFilePath), charsetToUse));
78+
header = Files.readString(Path.of(headerFilePath), charsetToUse);
7979
}
8080
catch (IOException exception) {
8181
throw new IllegalArgumentException("Failed to extract header from config",
@@ -85,10 +85,6 @@ private static String extractLicenseHeader(CheckConfiguration config) {
8585
return header;
8686
}
8787

88-
private static String toLfLineEnding(String text) {
89-
return text.replaceAll("(?x)\\\\r(?=\\\\n)|\\r(?=\\n)", "");
90-
}
91-
9288
private static class HeaderVisitor extends JavaIsoVisitor<ExecutionContext> {
9389
private final List<CheckstyleViolation> violations;
9490
private final String licenseHeader;
@@ -121,8 +117,7 @@ public J visit(Tree tree, ExecutionContext executionContext) {
121117
private String extractCurrentHeader(JavaSourceFile sourceFile) {
122118
return sourceFile.getComments().stream()
123119
.map(comment -> {
124-
return comment.printComment(getCursor())
125-
+ toLfLineEnding(comment.getSuffix());
120+
return comment.printComment(getCursor()) + comment.getSuffix();
126121
})
127122
.collect(Collectors.joining(""));
128123
}

0 commit comments

Comments
 (0)