diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java index 48c519a679..e77e89d300 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrintVisitor.java @@ -36,6 +36,7 @@ import com.github.javaparser.ast.type.*; import com.github.javaparser.ast.visitor.Visitable; import com.github.javaparser.ast.visitor.VoidVisitor; +import com.github.javaparser.utils.Utils; import java.util.*; import java.util.stream.Collectors; @@ -304,7 +305,11 @@ public void visit(final ClassOrInterfaceDeclaration n, final Void arg) { @Override public void visit(final JavadocComment n, final Void arg) { printer.print("/**"); - printer.print(n.getContent()); + String commentContent = n.getContent(); + if (configuration.isNormalizeEolInComments()) { + commentContent = Utils.normalizeEolInTextBlock(commentContent, configuration.getEndOfLineCharacter()); + } + printer.print(commentContent); printer.println("*/"); } diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java index 3127076824..704ea2f508 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/PrettyPrinterConfiguration.java @@ -27,6 +27,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull; public class PrettyPrinterConfiguration { + private boolean normalizeEolInComments = false; private boolean printComments = true; private boolean printJavaDoc = true; private boolean columnAlignParameters = false; @@ -44,6 +45,15 @@ public PrettyPrinterConfiguration setIndent(String indent) { return this; } + public boolean isNormalizeEolInComments() { + return normalizeEolInComments; + } + + public PrettyPrinterConfiguration setNormalizeEolInComments(boolean normalizeEolInComments) { + this.normalizeEolInComments = normalizeEolInComments; + return this; + } + public boolean isPrintComments() { return printComments; } @@ -55,7 +65,7 @@ public boolean isIgnoreComments() { public boolean isPrintJavaDoc() { return printJavaDoc; } - + public boolean isColumnAlignParameters() { return columnAlignParameters; } @@ -73,12 +83,12 @@ public PrettyPrinterConfiguration setPrintJavaDoc(boolean printJavaDoc) { this.printJavaDoc = printJavaDoc; return this; } - + public PrettyPrinterConfiguration setColumnAlignParameters(boolean columnAlignParameters) { this.columnAlignParameters = columnAlignParameters; return this; } - + public PrettyPrinterConfiguration setColumnAlignFirstMethodChain(boolean columnAlignFirstMethodChain) { this.columnAlignFirstMethodChain = columnAlignFirstMethodChain; return this; diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java b/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java index 623d702639..d2cdd9d288 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/SourcePrinter.java @@ -27,6 +27,7 @@ import java.util.regex.Pattern; import com.github.javaparser.Position; +import com.github.javaparser.utils.Utils; public class SourcePrinter { @@ -143,4 +144,8 @@ public String getSource() { public String toString() { return getSource(); } + + public String normalizeEolInTextBlock(String content) { + return Utils.normalizeEolInTextBlock(content, endOfLineCharacter); + } } diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/concretesyntaxmodel/CsmComment.java b/javaparser-core/src/main/java/com/github/javaparser/printer/concretesyntaxmodel/CsmComment.java index 848341b99a..8e684c4c53 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/printer/concretesyntaxmodel/CsmComment.java +++ b/javaparser-core/src/main/java/com/github/javaparser/printer/concretesyntaxmodel/CsmComment.java @@ -28,22 +28,21 @@ import com.github.javaparser.ast.comments.LineComment; import com.github.javaparser.printer.SourcePrinter; -import static com.github.javaparser.utils.Utils.EOL; - public class CsmComment implements CsmElement { static void process(Comment comment, SourcePrinter printer) { + String content = printer.normalizeEolInTextBlock(comment.getContent()); if (comment instanceof BlockComment) { printer.print("/*"); - printer.print(comment.getContent()); - printer.print("*/" + EOL); + printer.print(content); + printer.println("*/"); } else if (comment instanceof JavadocComment) { printer.print("/**"); - printer.print(comment.getContent()); - printer.print("*/" + EOL); + printer.print(content); + printer.println("*/"); } else if (comment instanceof LineComment) { printer.print("//"); - printer.print(comment.getContent()); + printer.print(content); printer.println(); } else { throw new UnsupportedOperationException(comment.getClass().getSimpleName()); diff --git a/javaparser-core/src/main/java/com/github/javaparser/utils/Utils.java b/javaparser-core/src/main/java/com/github/javaparser/utils/Utils.java index 6649e41e54..637460e0e4 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/utils/Utils.java +++ b/javaparser-core/src/main/java/com/github/javaparser/utils/Utils.java @@ -220,4 +220,10 @@ public static boolean valueIsNullOrEmpty(Object value) { public static Set set(T... items) { return new HashSet<>(asList(items)); } + + public static String normalizeEolInTextBlock(String content, String endOfLineCharacter) { + content.replaceAll("\\r\\n", "\n"); + content = content.replaceAll("\\r", "\n"); + return content.replaceAll("\\n", endOfLineCharacter); + } } diff --git a/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/PrettyPrintingSteps.java b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/PrettyPrintingSteps.java index b10302c493..83fc3a7ecc 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/PrettyPrintingSteps.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/bdd/steps/PrettyPrintingSteps.java @@ -26,6 +26,7 @@ import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.visitor.ModifierVisitor; +import com.github.javaparser.printer.PrettyPrinterConfiguration; import org.jbehave.core.annotations.Given; import org.jbehave.core.annotations.Then; import org.jbehave.core.annotations.When; @@ -37,6 +38,7 @@ import java.net.URL; import static com.github.javaparser.JavaParser.*; +import static com.github.javaparser.utils.Utils.EOL; import static com.github.javaparser.utils.Utils.readerToString; import static org.junit.Assert.assertEquals; @@ -112,4 +114,9 @@ public void isPrintedAs(String src) { assertEquals(src.trim(), resultNode.toString().trim()); } + @Then("it is printed with normalized EOL in comments as:$src") + public void isPrintedWithEolAs(String src) { + PrettyPrinterConfiguration conf = new PrettyPrinterConfiguration().setNormalizeEolInComments(true); + assertEquals(src.trim(), resultNode.toString(conf).trim()); + } } diff --git a/javaparser-testing/src/test/resources/com/github/javaparser/bdd/pretty_printing_scenarios.story b/javaparser-testing/src/test/resources/com/github/javaparser/bdd/pretty_printing_scenarios.story index 355b6784ea..50bbe1f507 100644 --- a/javaparser-testing/src/test/resources/com/github/javaparser/bdd/pretty_printing_scenarios.story +++ b/javaparser-testing/src/test/resources/com/github/javaparser/bdd/pretty_printing_scenarios.story @@ -472,7 +472,7 @@ public class Abc<@C A, @C X extends @C String & @C Serializable> { Scenario: we can parse a package-info file. Given the class in the file "package-info.java" When the class is parsed by the Java parser -Then it is printed as: +Then it is printed with normalized EOL in comments as: /** * This package contains class for doing some stuff. */