Skip to content

Commit

Permalink
Normalize EOL inside comment contents
Browse files Browse the repository at this point in the history
  • Loading branch information
Leonardo Herrera committed Oct 19, 2017
1 parent 372f169 commit 8b36245
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 12 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -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("*/");
}

Expand Down
Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -55,7 +65,7 @@ public boolean isIgnoreComments() {
public boolean isPrintJavaDoc() {
return printJavaDoc;
}

public boolean isColumnAlignParameters() {
return columnAlignParameters;
}
Expand All @@ -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;
Expand Down
Expand Up @@ -27,6 +27,7 @@
import java.util.regex.Pattern;

import com.github.javaparser.Position;
import com.github.javaparser.utils.Utils;

public class SourcePrinter {

Expand Down Expand Up @@ -143,4 +144,8 @@ public String getSource() {
public String toString() {
return getSource();
}

public String normalizeEolInTextBlock(String content) {
return Utils.normalizeEolInTextBlock(content, endOfLineCharacter);
}
}
Expand Up @@ -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());
Expand Down
Expand Up @@ -220,4 +220,10 @@ public static boolean valueIsNullOrEmpty(Object value) {
public static <T> Set<T> 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);
}
}
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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());
}
}
Expand Up @@ -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.
*/
Expand Down

0 comments on commit 8b36245

Please sign in to comment.