mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
[java-parser] IDEA-366391 Inconsistent doc comment association after markdown support
(cherry picked from commit 072bc109310e3059f3fab309dbd521ca2caad6e6) GitOrigin-RevId: adabc2d3ad33c5f997f09565ddf24c4ef445290b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b5a53393ed
commit
19af3dce28
@@ -6,6 +6,7 @@ import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.ParentAwareTokenSet;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -65,6 +66,15 @@ public class WhiteSpaceAndCommentSetHolder {
|
||||
if (tokens.isEmpty()) return 0;
|
||||
|
||||
// 1. bind doc comment
|
||||
// now there are markdown comments.
|
||||
// To preserve previous orders, let's try to find the first non-markdown comment (and skip markdown comments).
|
||||
// If there is no non-markdown, take the first markdown
|
||||
for (int idx = tokens.size() - 1; idx >= 0; idx--) {
|
||||
if (BasicJavaAstTreeUtil.is(tokens.get(idx), BASIC_DOC_COMMENT) && !isDocMarkdownComment(idx, getter)) {
|
||||
return idx;
|
||||
}
|
||||
}
|
||||
|
||||
for (int idx = tokens.size() - 1; idx >= 0; idx--) {
|
||||
if (BasicJavaAstTreeUtil.is(tokens.get(idx), BASIC_DOC_COMMENT)) return idx;
|
||||
}
|
||||
@@ -90,6 +100,11 @@ public class WhiteSpaceAndCommentSetHolder {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static boolean isDocMarkdownComment(int idx, @NotNull TokenTextGetter getter) {
|
||||
CharSequence sequence = getter.get(idx);
|
||||
return sequence.length() >= 3 && "///".equals(sequence.subSequence(0, 3).toString());
|
||||
}
|
||||
}
|
||||
|
||||
private static class TrailingWhitespacesAndCommentsBinder implements WhitespacesAndCommentsBinder {
|
||||
|
||||
@@ -213,5 +213,5 @@ public abstract class AbstractBasicJavadocParsingTest extends AbstractBasicJavaP
|
||||
public void testReferenceLinkMarkdown09() { doTest(true); }
|
||||
public void testReferenceLinkMarkdown10() { doTest(true); }
|
||||
public void testReferenceLinkMarkdown11() { doTest(true); }
|
||||
|
||||
public void testMarkdownWithDocComment() { doTest(true);}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package test.pkg;
|
||||
|
||||
/**
|
||||
* Doc
|
||||
*/
|
||||
/// Inline comment as markdown
|
||||
public class Test {}
|
||||
@@ -0,0 +1,46 @@
|
||||
PsiJavaFile:MarkdownWithDocComment.java
|
||||
PsiPackageStatement:test.pkg
|
||||
PsiKeyword:package('package')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiJavaCodeReferenceElement:test.pkg
|
||||
PsiJavaCodeReferenceElement:test
|
||||
PsiIdentifier:test('test')
|
||||
PsiReferenceParameterList
|
||||
<empty list>
|
||||
PsiJavaToken:DOT('.')
|
||||
PsiIdentifier:pkg('pkg')
|
||||
PsiReferenceParameterList
|
||||
<empty list>
|
||||
PsiJavaToken:SEMICOLON(';')
|
||||
PsiWhiteSpace('\n\n')
|
||||
PsiImportList
|
||||
<empty list>
|
||||
PsiClass:Test
|
||||
PsiDocComment
|
||||
PsiDocToken:DOC_COMMENT_START('/**')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('*')
|
||||
PsiDocToken:DOC_COMMENT_DATA(' Doc')
|
||||
PsiWhiteSpace('\n ')
|
||||
PsiDocToken:DOC_COMMENT_END('*/')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiDocComment
|
||||
PsiDocToken:DOC_COMMENT_LEADING_ASTERISKS('///')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiDocToken:DOC_COMMENT_DATA('Inline comment as markdown')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiModifierList:public
|
||||
PsiKeyword:public('public')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiKeyword:class('class')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiIdentifier:Test('Test')
|
||||
PsiTypeParameterList
|
||||
<empty list>
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiJavaToken:LBRACE('{')
|
||||
PsiJavaToken:RBRACE('}')
|
||||
@@ -0,0 +1,46 @@
|
||||
java.FILE
|
||||
PACKAGE_STATEMENT
|
||||
PACKAGE_KEYWORD
|
||||
WHITE_SPACE
|
||||
JAVA_CODE_REFERENCE
|
||||
JAVA_CODE_REFERENCE
|
||||
IDENTIFIER
|
||||
REFERENCE_PARAMETER_LIST
|
||||
<empty list>
|
||||
DOT
|
||||
IDENTIFIER
|
||||
REFERENCE_PARAMETER_LIST
|
||||
<empty list>
|
||||
SEMICOLON
|
||||
WHITE_SPACE
|
||||
IMPORT_LIST
|
||||
<empty list>
|
||||
CLASS
|
||||
DOC_COMMENT
|
||||
DOC_COMMENT_START
|
||||
WHITE_SPACE
|
||||
DOC_COMMENT_LEADING_ASTERISKS
|
||||
DOC_COMMENT_DATA
|
||||
WHITE_SPACE
|
||||
DOC_COMMENT_END
|
||||
WHITE_SPACE
|
||||
DOC_COMMENT
|
||||
DOC_COMMENT_LEADING_ASTERISKS
|
||||
WHITE_SPACE
|
||||
DOC_COMMENT_DATA
|
||||
WHITE_SPACE
|
||||
MODIFIER_LIST
|
||||
PUBLIC_KEYWORD
|
||||
WHITE_SPACE
|
||||
CLASS_KEYWORD
|
||||
WHITE_SPACE
|
||||
IDENTIFIER
|
||||
TYPE_PARAMETER_LIST
|
||||
<empty list>
|
||||
EXTENDS_LIST
|
||||
<empty list>
|
||||
IMPLEMENTS_LIST
|
||||
<empty list>
|
||||
WHITE_SPACE
|
||||
LBRACE
|
||||
RBRACE
|
||||
Reference in New Issue
Block a user