From bed88876d93280ae8ca1a019268a8c475136eb08 Mon Sep 17 00:00:00 2001 From: Artemiy Sartakov Date: Thu, 11 Jul 2019 16:53:18 +0700 Subject: [PATCH] CommentFoldingUtil: fixed folding for case when line with javadoc contains code or another comment (IDEA-218068) GitOrigin-RevId: 254059119248f79716843f217dcdbaabdfef6f47 --- .../folding/impl/CommentFoldingUtil.java | 20 +++++++++++++------ .../codeInsight/folding/JavadocComments.java | 2 ++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/CommentFoldingUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/CommentFoldingUtil.java index c6df1202336f..920b95b79838 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/CommentFoldingUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/folding/impl/CommentFoldingUtil.java @@ -248,7 +248,7 @@ public final class CommentFoldingUtil { final int nFirstCommentLine = document.getLineNumber(commentRange.getStartOffset()); TextRange lineRange = getLineRange(document, nFirstCommentLine); - String line = getCommentLine(document, lineRange, commentPrefix, commentSuffix); + String line = getCommentLine(document, lineRange, commentRange, commentPrefix, commentSuffix); if (line.chars().anyMatch(c -> !StringUtil.isWhiteSpace((char)c))) return line; @@ -257,7 +257,7 @@ public final class CommentFoldingUtil { lineRange = getLineRange(document, nSecondCommentLine); if (lineRange.getEndOffset() > commentRange.getEndOffset()) return ""; - line = getCommentLine(document, lineRange, linePrefix, commentSuffix); + line = getCommentLine(document, lineRange, commentRange, linePrefix, commentSuffix); if (line.chars().anyMatch(c -> !StringUtil.isWhiteSpace((char)c))) return line; @@ -275,12 +275,20 @@ public final class CommentFoldingUtil { @NotNull private static String getCommentLine(@NotNull Document document, @NotNull TextRange lineRange, + @NotNull TextRange commentRange, @NotNull String prefix, @NotNull String suffix) { - String line = document.getText(lineRange); - line = line.trim(); + int startOffset = Math.max(lineRange.getStartOffset(), commentRange.getStartOffset()); + int endOffset = Math.min(lineRange.getEndOffset(), commentRange.getEndOffset()); - line = StringUtil.trimEnd(line, suffix); - return StringUtil.trimStart(line, prefix); + String commentPart = document.getText(new TextRange(startOffset, endOffset)); + + int suffixIdx = commentPart.indexOf(suffix); + if (suffixIdx != -1) commentPart = commentPart.substring(0, suffixIdx).trim(); + + int prefixIdx = commentPart.indexOf(prefix); + if (prefixIdx != -1) commentPart = commentPart.substring(prefixIdx + prefix.length()); + + return commentPart; } } diff --git a/java/java-tests/testData/codeInsight/folding/JavadocComments.java b/java/java-tests/testData/codeInsight/folding/JavadocComments.java index d7398ceebccd..0b4959c13259 100644 --- a/java/java-tests/testData/codeInsight/folding/JavadocComments.java +++ b/java/java-tests/testData/codeInsight/folding/JavadocComments.java @@ -23,6 +23,8 @@ class Test { void bar(char c) { } + boolean b1 = true; /** javadoc with code on the same line */ boolean b2 = false; /** second javadoc with code on the same line */ + /** first line * second line */