diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java index 51ab46a7e..6ac6c6560 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/DetailNodeTreeStringPrinter.java @@ -41,6 +41,9 @@ public final class DetailNodeTreeStringPrinter { /** OS specific line separator. */ private static final String LINE_SEPARATOR = System.getProperty("line.separator"); + /** Symbols with which javadoc starts. */ + private static final String JAVADOC_START = "/**"; + /** Prevent instances. */ private DetailNodeTreeStringPrinter() { // no code @@ -182,13 +185,15 @@ public final class DetailNodeTreeStringPrinter { blockCommentBegin.setType(TokenTypes.BLOCK_COMMENT_BEGIN); blockCommentBegin.setText("/*"); blockCommentBegin.setLineNo(0); - blockCommentBegin.setColumnNo(0); + blockCommentBegin.setColumnNo(-JAVADOC_START.length()); final DetailAST commentContent = new DetailAST(); commentContent.setType(TokenTypes.COMMENT_CONTENT); commentContent.setText("*" + content); commentContent.setLineNo(0); - commentContent.setColumnNo(2); + // javadoc should starts at 0 column, so COMMENT_CONTENT node + // that contains javadoc identificator has -1 column + commentContent.setColumnNo(-1); final DetailAST blockCommentEnd = new DetailAST(); blockCommentEnd.setType(TokenTypes.BLOCK_COMMENT_END); diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java b/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java index 70adc5f87..995ad5f83 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/JavadocDetailNodeParser.java @@ -78,6 +78,9 @@ public class JavadocDetailNodeParser { public static final String MSG_KEY_UNRECOGNIZED_ANTLR_ERROR = "javadoc.unrecognized.antlr.error"; + /** Symbols with which javadoc starts. */ + private static final String JAVADOC_START = "/**"; + /** * Line number of the Block comment AST that is being parsed. */ @@ -96,6 +99,7 @@ public class JavadocDetailNodeParser { */ public ParseStatus parseJavadocAsDetailNode(DetailAST javadocCommentAst) { blockCommentLineNumber = javadocCommentAst.getLineNo(); + final String javadocComment = JavadocUtils.getJavadocCommentContent(javadocCommentAst); // Use a new error listener each time to be able to use @@ -114,6 +118,10 @@ public class JavadocDetailNodeParser { final ParseTree parseTree = parseJavadocAsParseTree(javadocComment); final DetailNode tree = convertParseTreeToDetailNode(parseTree); + // adjust first line to indent of /** + adjustFirstLineToJavadocIndent(tree, + javadocCommentAst.getColumnNo() + + JAVADOC_START.length()); result.setTree(tree); } catch (ParseCancellationException ex) { @@ -303,6 +311,21 @@ public class JavadocDetailNodeParser { return node; } + /** + * Adjust first line nodes to javadoc indent. + * @param tree DetailNode tree root + * @param javadocColumnNumber javadoc indent + */ + private void adjustFirstLineToJavadocIndent(DetailNode tree, int javadocColumnNumber) { + if (tree.getLineNumber() == blockCommentLineNumber) { + ((JavadocNodeImpl) tree).setColumnNumber(tree.getColumnNumber() + javadocColumnNumber); + final DetailNode[] children = tree.getChildren(); + for (DetailNode child : children) { + adjustFirstLineToJavadocIndent(child, javadocColumnNumber); + } + } + } + /** * Gets line number from ParseTree node. * @param tree diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/gui/CodeSelectorPModelTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/gui/CodeSelectorPModelTest.java index 927c36a80..4cc550a9e 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/gui/CodeSelectorPModelTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/gui/CodeSelectorPModelTest.java @@ -101,7 +101,7 @@ public class CodeSelectorPModelTest { .getChild(tree.getFirstChild().getNextSibling().getFirstChild(), 0); final CodeSelectorPModel selector = new CodeSelectorPModel(javadoc, linesToPosition); selector.findSelectionPositions(); - Assert.assertEquals(0, selector.getSelectionStart()); + Assert.assertEquals(3, selector.getSelectionStart()); Assert.assertEquals(25, selector.getSelectionEnd()); } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/gui/ParseTreeTablePModelTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/gui/ParseTreeTablePModelTest.java index 0e9434b60..a6dd24788 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/gui/ParseTreeTablePModelTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/gui/ParseTreeTablePModelTest.java @@ -259,7 +259,7 @@ public class ParseTreeTablePModelTest { Assert.assertNull(treeModel); Assert.assertEquals("JAVADOC", type); Assert.assertEquals(1, line); - Assert.assertEquals(0, column); + Assert.assertEquals(3, column); Assert.assertEquals(expectedText, text); try { diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterAttributesAndMethodsJavadoc.txt b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterAttributesAndMethodsJavadoc.txt index 0da4646f5..4e13da901 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterAttributesAndMethodsJavadoc.txt +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterAttributesAndMethodsJavadoc.txt @@ -2,8 +2,8 @@ CLASS_DEF -> CLASS_DEF [4:0] |--MODIFIERS -> MODIFIERS [4:0] |--BLOCK_COMMENT_BEGIN -> /* [1:0] | |--COMMENT_CONTENT -> *\n* class javadoc\n [1:2] -| | `--JAVADOC -> \n* class javadoc\n [1:0] -| | |--NEWLINE -> \n [1:0] +| | `--JAVADOC -> \n* class javadoc\n [1:3] +| | |--NEWLINE -> \n [1:3] | | |--LEADING_ASTERISK -> * [2:0] | | |--TEXT -> class javadoc [2:1] | | |--NEWLINE -> \n [2:15] @@ -18,9 +18,9 @@ CLASS_DEF -> CLASS_DEF [4:0] | |--TYPE -> TYPE [7:4] | | |--BLOCK_COMMENT_BEGIN -> /* [6:4] | | | |--COMMENT_CONTENT -> * attribute javadoc [6:6] - | | | | `--JAVADOC -> attribute javadoc [6:0] - | | | | |--TEXT -> attribute javadoc [6:0] - | | | | `--EOF -> [6:18] + | | | | `--JAVADOC -> attribute javadoc [6:7] + | | | | |--TEXT -> attribute javadoc [6:7] + | | | | `--EOF -> [6:25] | | | `--BLOCK_COMMENT_END -> */ [6:24] | | `--LITERAL_INT -> int [7:4] | |--IDENT -> attribute [7:8] @@ -29,8 +29,8 @@ CLASS_DEF -> CLASS_DEF [4:0] | |--MODIFIERS -> MODIFIERS [12:4] | | |--BLOCK_COMMENT_BEGIN -> /* [9:4] | | | |--COMMENT_CONTENT -> *\n * method javadoc\n [9:6] - | | | | `--JAVADOC -> \n * method javadoc\n [9:0] - | | | | |--NEWLINE -> \n [9:0] + | | | | `--JAVADOC -> \n * method javadoc\n [9:7] + | | | | |--NEWLINE -> \n [9:7] | | | | |--LEADING_ASTERISK -> * [10:0] | | | | |--TEXT -> method javadoc [10:5] | | | | |--NEWLINE -> \n [10:20] diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavaAndJavadoc.txt b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavaAndJavadoc.txt index 269104565..93be46d81 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavaAndJavadoc.txt +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavaAndJavadoc.txt @@ -2,8 +2,8 @@ CLASS_DEF -> CLASS_DEF [4:0] |--MODIFIERS -> MODIFIERS [4:0] | |--BLOCK_COMMENT_BEGIN -> /* [1:0] | | |--COMMENT_CONTENT -> *\n* some text\n [1:2] -| | | `--JAVADOC -> \n* some text\n [1:0] -| | | |--NEWLINE -> \n [1:0] +| | | `--JAVADOC -> \n* some text\n [1:3] +| | | |--NEWLINE -> \n [1:3] | | | |--LEADING_ASTERISK -> * [2:0] | | | |--TEXT -> some text [2:1] | | | |--NEWLINE -> \n [2:11] diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavadoc.txt b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavadoc.txt index 22f7b9305..63d3eb470 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavadoc.txt +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/astprinter/expectedInputAstTreeStringPrinterJavadoc.txt @@ -12,9 +12,9 @@ CLASS_DEF -> CLASS_DEF [4:0] |--MODIFIERS -> MODIFIERS [4:0] |--BLOCK_COMMENT_BEGIN -> /* [3:0] | |--COMMENT_CONTENT -> *javadoc [3:2] -| | `--JAVADOC -> javadoc [3:0] -| | |--TEXT -> javadoc [3:0] -| | `--EOF -> [3:7] +| | `--JAVADOC -> javadoc [3:3] +| | |--TEXT -> javadoc [3:3] +| | `--EOF -> [3:10] | `--BLOCK_COMMENT_END -> */ [3:9] |--LITERAL_CLASS -> class [4:0] |--IDENT -> InputAstTreeStringPrinterJavadoc [4:6]