diff options
author | Danny van Bruggen <hexagonaal@gmail.com> | 2018-01-29 20:53:04 +0100 |
---|---|---|
committer | Danny van Bruggen <hexagonaal@gmail.com> | 2018-01-29 20:53:04 +0100 |
commit | 1c2f5c6b653cc7dc72681cfd4b46eb5e33df01de (patch) | |
tree | 0c9b1a2444a277fc49cd5325038e1c02ac0276b0 | |
parent | a3d8a24c8c2becb0790b0c7cfca03171c39c2f4b (diff) | |
download | platform_external_javaparser-1c2f5c6b653cc7dc72681cfd4b46eb5e33df01de.tar.gz platform_external_javaparser-1c2f5c6b653cc7dc72681cfd4b46eb5e33df01de.tar.bz2 platform_external_javaparser-1c2f5c6b653cc7dc72681cfd4b46eb5e33df01de.zip |
Redo Javadoc formatting
7 files changed, 56 insertions, 31 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/JavadocParser.java b/javaparser-core/src/main/java/com/github/javaparser/JavadocParser.java index 94ff436fe..e942bb86d 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/JavadocParser.java +++ b/javaparser-core/src/main/java/com/github/javaparser/JavadocParser.java @@ -25,13 +25,13 @@ import com.github.javaparser.ast.comments.JavadocComment; import com.github.javaparser.javadoc.Javadoc; import com.github.javaparser.javadoc.JavadocBlockTag; import com.github.javaparser.javadoc.description.JavadocDescription; -import com.github.javaparser.utils.Utils; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; +import static com.github.javaparser.utils.Utils.*; import static com.github.javaparser.utils.Utils.nextWord; /** @@ -67,13 +67,13 @@ class JavadocParser { .stream() .collect(Collectors.joining("\n")); - //Split up the entire tag black again, considering now that some lines belong to the same block tag. - //The pattern used splits the block at each new line starting with the '@' symbol, thus the symbol + //Split up the entire tag back again, considering now that some lines belong to the same block tag. + //The pattern splits the block at each new line starting with the '@' symbol, thus the symbol //then needs to be added again so that the block parsers handles everything correctly. blockLines = BLOCK_PATTERN .splitAsStream(tagBlock) - .filter(Utils.STRING_NOT_EMPTY) - .map(s -> BLOCK_TAG_PREFIX + s.replace("\n", " ").trim()) + .filter(STRING_NOT_EMPTY) + .map(s -> BLOCK_TAG_PREFIX + s) .collect(Collectors.toList()); } Javadoc document = new Javadoc(JavadocDescription.parseText(descriptionText)); diff --git a/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java b/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java index 3239997cd..41ed01bdc 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java +++ b/javaparser-core/src/main/java/com/github/javaparser/javadoc/Javadoc.java @@ -27,6 +27,8 @@ import com.github.javaparser.javadoc.description.JavadocDescription; import java.util.LinkedList; import java.util.List; +import static com.github.javaparser.utils.Utils.*; + /** * The structured content of a single Javadoc comment. * <p> @@ -66,14 +68,14 @@ public class Javadoc { StringBuilder sb = new StringBuilder(); if (!description.isEmpty()) { sb.append(description.toText()); - sb.append("\n"); + sb.append(EOL); } if (!blockTags.isEmpty()) { - sb.append("\n"); + sb.append(EOL); } blockTags.forEach(bt -> { sb.append(bt.toText()); - sb.append("\n"); + sb.append(EOL); }); return sb.toString(); } @@ -88,13 +90,14 @@ public class Javadoc { } } StringBuilder sb = new StringBuilder(); - sb.append("\n"); - if (!toText().isEmpty()) { - for (String line : toText().split("\n")) { + sb.append(EOL); + final String text = toText(); + if (!text.isEmpty()) { + for (String line : text.split(EOL)) { sb.append(indentation); sb.append(" * "); sb.append(line); - sb.append("\n"); + sb.append(EOL); } } sb.append(indentation); 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 b771c8eea..a7b7fa772 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 @@ -44,6 +44,7 @@ import static com.github.javaparser.ast.Node.Parsedness.UNPARSABLE; import static com.github.javaparser.utils.PositionUtils.sortByBeginPosition; import static com.github.javaparser.utils.Utils.isNullOrEmpty; import static com.github.javaparser.utils.Utils.normalizeEolInTextBlock; +import static com.github.javaparser.utils.Utils.trimTrailingSpaces; /** * Outputs the AST as formatted Java source code. @@ -328,10 +329,11 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> { boolean skippingLeadingEmptyLines = true; boolean prependEmptyLine = false; for (String line : lines) { - line = line.trim(); - if (line.startsWith("*")) { - line = line.substring(1).trim(); + final String trimmedLine = line.trim(); + if (trimmedLine.startsWith("*")) { + line = trimmedLine.substring(1); } + line = trimTrailingSpaces(line); if (line.isEmpty()) { if (!skippingLeadingEmptyLines) { prependEmptyLine = true; @@ -342,7 +344,7 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> { printer.println(" *"); prependEmptyLine = false; } - printer.println(" * " + line); + printer.println(" *" + line); } } printer.println(" */"); @@ -484,7 +486,7 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> { if (!n.getVariables().isEmpty()) { Optional<Type> maximumCommonType = n.getMaximumCommonType(); maximumCommonType.ifPresent(t -> t.accept(this, arg)); - if(!maximumCommonType.isPresent()){ + if (!maximumCommonType.isPresent()) { printer.print("???"); } } @@ -507,10 +509,9 @@ public class PrettyPrintVisitor implements VoidVisitor<Void> { n.getName().accept(this, arg); n.getAncestorOfType(NodeWithVariables.class).ifPresent(ancestor -> { - Optional<Type> maximumCommonType = ancestor.getMaximumCommonType(); - maximumCommonType.ifPresent(commonType -> { + ((NodeWithVariables<?>) ancestor).getMaximumCommonType().ifPresent(commonType -> { - Type type = n.getType(); + final Type type = n.getType(); ArrayType arrayType = null; 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 7319ff4af..2db00e522 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 @@ -49,7 +49,7 @@ public class Utils { public static <E> boolean isNullOrEmpty(Collection<E> collection) { return collection == null || collection.isEmpty(); } - + public static <T> T assertNotNull(T o) { if (o == null) { throw new AssertionError("A reference was unexpectedly null."); @@ -239,4 +239,15 @@ public class Utils { return filename.substring(0, extensionIndex); } + + /** + * Like {@link String#trim()}, but only the trailing spaces. + */ + public static String trimTrailingSpaces(String line) { + while (line.length() > 0 && line.charAt(line.length() - 1) <= 0x20) { + line = line.substring(0, line.length() - 1); + } + return line; + } + } diff --git a/javaparser-testing/src/test/java/com/github/javaparser/JavadocParserTest.java b/javaparser-testing/src/test/java/com/github/javaparser/JavadocParserTest.java index 9458ec37e..8cd0ede01 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/JavadocParserTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/JavadocParserTest.java @@ -130,20 +130,19 @@ public class JavadocParserTest { " * Add a field to this and automatically add the import of the type if needed\n" + " *\n" + " * @param typeClass the type of the field\n" + - " * continued in a second line\n" + + " * continued in a second line\n" + " * @param name the name of the field\n" + " * @param modifiers the modifiers like {@link Modifier#PUBLIC}\n" + " * @return the {@link FieldDeclaration} created\n" + " "; Javadoc res = JavadocParser.parse(text); assertEquals(new Javadoc(JavadocDescription.parseText("Add a field to this and automatically add the import of the type if needed")) - .addBlockTag(JavadocBlockTag.createParamBlockTag("typeClass", "the type of the field continued in a second line")) - .addBlockTag(JavadocBlockTag.createParamBlockTag("name", "the name of the field")) - .addBlockTag(JavadocBlockTag.createParamBlockTag("modifiers", "the modifiers like {@link Modifier#PUBLIC}")) - .addBlockTag(new JavadocBlockTag(JavadocBlockTag.Type.RETURN, "the {@link FieldDeclaration} created")), res); + .addBlockTag(JavadocBlockTag.createParamBlockTag("typeClass", "the type of the field\n continued in a second line")) + .addBlockTag(JavadocBlockTag.createParamBlockTag("name", "the name of the field")) + .addBlockTag(JavadocBlockTag.createParamBlockTag("modifiers", "the modifiers like {@link Modifier#PUBLIC}")) + .addBlockTag(new JavadocBlockTag(JavadocBlockTag.Type.RETURN, "the {@link FieldDeclaration} created")), res); } - @Test public void startsWithAsteriskEmpty() { assertEquals(-1, JavadocParser.startsWithAsterisk("")); diff --git a/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrintVisitorTest.java b/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrintVisitorTest.java index dd8738ab0..2360d0ce0 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrintVisitorTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/printer/PrettyPrintVisitorTest.java @@ -178,13 +178,13 @@ public class PrettyPrintVisitorTest { @Test public void multilineJavadocGetsFormatted() { CompilationUnit cu = new CompilationUnit(); - cu.addClass("X").addMethod("abc").setJavadocComment("line1\n line2 *\n * line3"); + cu.addClass("X").addMethod("abc").setJavadocComment(" line1\n line2 *\n * line3"); assertEqualsNoEol("public class X {\n" + "\n" + " /**\n" + " * line1\n" + - " * line2 *\n" + + " * line2 *\n" + " * line3\n" + " */\n" + " void abc() {\n" + @@ -209,7 +209,7 @@ public class PrettyPrintVisitorTest { @Test public void multilineJavadocWithLotsOfEmptyLinesGetsFormattedNeatly() { CompilationUnit cu = new CompilationUnit(); - cu.addClass("X").addMethod("abc").setJavadocComment("\n\n\nab\n\n\ncd\n\n\n"); + cu.addClass("X").addMethod("abc").setJavadocComment("\n\n\n ab\n\n\n cd\n\n\n"); assertEqualsNoEol("public class X {\n" + "\n" + @@ -226,7 +226,7 @@ public class PrettyPrintVisitorTest { @Test public void singlelineJavadocGetsFormatted() { CompilationUnit cu = new CompilationUnit(); - cu.addClass("X").addMethod("abc").setJavadocComment("line1"); + cu.addClass("X").addMethod("abc").setJavadocComment(" line1"); assertEqualsNoEol("public class X {\n" + "\n" + diff --git a/javaparser-testing/src/test/java/com/github/javaparser/utils/UtilsTest.java b/javaparser-testing/src/test/java/com/github/javaparser/utils/UtilsTest.java index ad31ed523..21ecf4cc2 100644 --- a/javaparser-testing/src/test/java/com/github/javaparser/utils/UtilsTest.java +++ b/javaparser-testing/src/test/java/com/github/javaparser/utils/UtilsTest.java @@ -78,4 +78,15 @@ public class UtilsTest { String result = Utils.normalizeEolInTextBlock("\r\n \r \n", "Q"); assertEquals("Q Q Q", result); } + + @Test + public void testTrimTrailingSpaces() { + assertEquals("abc", trimTrailingSpaces("abc")); + assertEquals(" abc", trimTrailingSpaces(" abc")); + assertEquals("abc", trimTrailingSpaces("abc ")); + assertEquals(" abc", trimTrailingSpaces(" abc ")); + assertEquals("abc", trimTrailingSpaces("abc\t\0")); + assertEquals("", trimTrailingSpaces(" ")); + assertEquals("", trimTrailingSpaces("")); + } } |