mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 11:20:44 +07:00
fix(JDoc): Formatting and inspections issues
GitOrigin-RevId: 910e9b3335fa7c3967fb79893ecba7c69595a201
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4766dcb03a
commit
abd7b1dded
@@ -850,40 +850,45 @@ class _JavaDocLexer implements FlexLexer {
|
||||
case 43: break;
|
||||
case 4:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.sharp();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
case 44: break;
|
||||
case 5:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.leftParenthesis();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
case 45: break;
|
||||
case 6:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.rightParenthesis();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
case 46: break;
|
||||
case 7:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.leftBracket();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
case 47: break;
|
||||
case 8:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.rightBracket();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
@@ -996,8 +1001,9 @@ class _JavaDocLexer implements FlexLexer {
|
||||
// fall through
|
||||
case 66: break;
|
||||
case 27:
|
||||
{ if (myMarkdownMode)
|
||||
{ if (myMarkdownMode) {
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
return myTokenTypes.commentLeadingAsterisks();
|
||||
}
|
||||
// fall through
|
||||
@@ -1029,8 +1035,9 @@ class _JavaDocLexer implements FlexLexer {
|
||||
// fall through
|
||||
case 71: break;
|
||||
case 32:
|
||||
{ if(myMarkdownMode)
|
||||
{ if(myMarkdownMode) {
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
return myTokenTypes.commentEnd();
|
||||
}
|
||||
// fall through
|
||||
@@ -1041,8 +1048,9 @@ class _JavaDocLexer implements FlexLexer {
|
||||
// fall through
|
||||
case 73: break;
|
||||
case 34:
|
||||
{ if(myMarkdownMode)
|
||||
{ if(myMarkdownMode) {
|
||||
return myTokenTypes.badCharacter();
|
||||
}
|
||||
yybegin(COMMENT_DATA_START);
|
||||
return myTokenTypes.commentStart();
|
||||
}
|
||||
@@ -1059,15 +1067,17 @@ class _JavaDocLexer implements FlexLexer {
|
||||
case 75: break;
|
||||
case 36:
|
||||
{ yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.codeFence();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
case 76: break;
|
||||
case 37:
|
||||
{ if (myMarkdownMode)
|
||||
{ if (myMarkdownMode) {
|
||||
return myTokenTypes.commentLeadingAsterisks();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
// fall through
|
||||
|
||||
@@ -79,8 +79,9 @@ LEADING_TOKEN_MARKDOWN="///"
|
||||
%%
|
||||
|
||||
<YYINITIAL> {START_COMMENT_HTML} {
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.badCharacter();
|
||||
}
|
||||
yybegin(COMMENT_DATA_START);
|
||||
return myTokenTypes.commentStart();
|
||||
}
|
||||
@@ -123,8 +124,9 @@ LEADING_TOKEN_MARKDOWN="///"
|
||||
<COMMENT_DATA_START, COMMENT_DATA> {
|
||||
{CODE_FENCE} {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.codeFence();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
|
||||
@@ -136,33 +138,38 @@ LEADING_TOKEN_MARKDOWN="///"
|
||||
|
||||
"#" {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.sharp();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
|
||||
\[ {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.leftBracket();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
\] {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.rightBracket();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
\( {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.leftParenthesis();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
\) {
|
||||
yybegin(COMMENT_DATA);
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.rightParenthesis();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
}
|
||||
@@ -209,13 +216,15 @@ SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES, SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON> "}"
|
||||
: { yybegin(SNIPPET_TAG_BODY_DATA); return myTokenTypes.tagValueColon(); }
|
||||
|
||||
{LEADING_TOKEN_HTML} {
|
||||
if (myMarkdownMode)
|
||||
if (myMarkdownMode) {
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
return myTokenTypes.commentLeadingAsterisks();
|
||||
}
|
||||
{LEADING_TOKEN_MARKDOWN} {
|
||||
if (myMarkdownMode)
|
||||
if (myMarkdownMode) {
|
||||
return myTokenTypes.commentLeadingAsterisks();
|
||||
}
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
|
||||
@@ -250,8 +259,9 @@ SNIPPET_ATTRIBUTE_VALUE_SINGLE_QUOTES, SNIPPET_TAG_COMMENT_DATA_UNTIL_COLON> "}"
|
||||
<CODE_TAG, CODE_TAG_SPACE> {WHITE_DOC_SPACE_CHAR}+ { yybegin(CODE_TAG); return myTokenTypes.space(); }
|
||||
|
||||
"*"+"/" {
|
||||
if(myMarkdownMode)
|
||||
if(myMarkdownMode) {
|
||||
return myTokenTypes.commentData();
|
||||
}
|
||||
return myTokenTypes.commentEnd();
|
||||
}
|
||||
[^] { return myTokenTypes.badCharacter(); }
|
||||
|
||||
+121
-106
@@ -163,116 +163,124 @@ public final class BasicJavaDocParser {
|
||||
}
|
||||
}
|
||||
else if (tokenType == JavaDocTokenType.DOC_CODE_FENCE) {
|
||||
if (getBraceScope(builder) > 0) {
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
|
||||
char fenceStart = builder.getOriginalText().charAt(builder.getCurrentOffset());
|
||||
PsiBuilder.Marker tag = builder.mark();
|
||||
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
|
||||
if (getTokenType(builder) == JavaDocTokenType.DOC_CODE_FENCE &&
|
||||
builder.getOriginalText().charAt(builder.getCurrentOffset()) == fenceStart) {
|
||||
break;
|
||||
}
|
||||
else {
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
}
|
||||
}
|
||||
|
||||
if (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
}
|
||||
|
||||
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_CODE_BLOCK);
|
||||
parseCodeBlock(builder, javaDocElementTypeContainer);
|
||||
}
|
||||
else if (tokenType == JavaDocTokenType.DOC_LBRACKET) {
|
||||
builder.setDebugMode(true);
|
||||
boolean hasLabel = true;
|
||||
PsiBuilder.Marker tag = builder.mark();
|
||||
|
||||
// Step 1 ensure that we have a label
|
||||
int leftBracketCount = 1;
|
||||
int rightBracketCount = 0;
|
||||
int startLabelOffset = builder.getCurrentOffset();
|
||||
int endLabelOffset;
|
||||
|
||||
while (!builder.eof()) {
|
||||
IElementType token = findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true);
|
||||
if (token == JavaDocTokenType.DOC_LBRACKET) {
|
||||
leftBracketCount++;
|
||||
continue;
|
||||
}
|
||||
if (token == JavaDocTokenType.DOC_RBRACKET) {
|
||||
rightBracketCount++;
|
||||
if (leftBracketCount == rightBracketCount) break;
|
||||
}
|
||||
}
|
||||
|
||||
endLabelOffset = builder.getCurrentOffset();
|
||||
boolean isShortRefEmpty = endLabelOffset - startLabelOffset <= 1;
|
||||
if (leftBracketCount != rightBracketCount || isShortRefEmpty) {
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
|
||||
IElementType firstReferenceToken = findInlineToken(builder, JavaDocTokenType.DOC_LBRACKET, JavaDocTokenType.DOC_SPACE, false);
|
||||
if (firstReferenceToken != JavaDocTokenType.DOC_LBRACKET) {
|
||||
if (leftBracketCount > 1 || firstReferenceToken == JavaDocTokenType.DOC_LPAREN) {
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
|
||||
hasLabel = false;
|
||||
}
|
||||
|
||||
// Step 2 get the reference for full reference link
|
||||
if (hasLabel) {
|
||||
if (findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true) != JavaDocTokenType.DOC_RBRACKET) {
|
||||
if (leftBracketCount > 1) {
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
|
||||
hasLabel = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Step 3, parse the content
|
||||
tag.rollbackTo();
|
||||
tag = builder.mark();
|
||||
if (hasLabel) {
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
if (builder.getCurrentOffset() < endLabelOffset) {
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
builder.advanceLexer();
|
||||
}
|
||||
|
||||
// Parse the reference itself
|
||||
builder.advanceLexer();
|
||||
parseMarkdownReference(builder, javaDocElementTypeContainer);
|
||||
builder.advanceLexer();
|
||||
|
||||
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_REFERENCE_LINK);
|
||||
parseMarkdownReferenceChecked(builder, javaDocElementTypeContainer);
|
||||
}
|
||||
else {
|
||||
remapAndAdvance(builder);
|
||||
}
|
||||
}
|
||||
|
||||
private static void parseCodeBlock(PsiBuilder builder,
|
||||
AbstractBasicJavaDocElementTypeFactory.@NotNull JavaDocElementTypeContainer javaDocElementTypeContainer) {
|
||||
if (getBraceScope(builder) > 0) {
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
// Store the fence type, a fenced code block can only be closed by the same fence type
|
||||
char fenceStart = builder.getTokenText().charAt(0);
|
||||
PsiBuilder.Marker tag = builder.mark();
|
||||
|
||||
// Look for the nearest closing code fence, converting everything inside as comment data
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
if (getTokenType(builder) == JavaDocTokenType.DOC_CODE_FENCE && builder.getTokenText().charAt(0) == fenceStart) {
|
||||
break;
|
||||
}
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
}
|
||||
|
||||
if (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
}
|
||||
|
||||
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_CODE_BLOCK);
|
||||
}
|
||||
|
||||
/** Ensure a reference link is good before parsing it */
|
||||
private static void parseMarkdownReferenceChecked(PsiBuilder builder, @NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
|
||||
boolean hasLabel = true;
|
||||
PsiBuilder.Marker tag = builder.mark();
|
||||
|
||||
// Step 1 ensure that we have a label
|
||||
int leftBracketCount = 1;
|
||||
int rightBracketCount = 0;
|
||||
int startLabelOffset = builder.getCurrentOffset();
|
||||
int endLabelOffset;
|
||||
|
||||
// Labels are allowed balanced brackets, count each side
|
||||
while (!builder.eof()) {
|
||||
IElementType token = findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true);
|
||||
if (token == JavaDocTokenType.DOC_LBRACKET) {
|
||||
leftBracketCount++;
|
||||
continue;
|
||||
}
|
||||
if (token == JavaDocTokenType.DOC_RBRACKET) {
|
||||
rightBracketCount++;
|
||||
if (leftBracketCount == rightBracketCount) break;
|
||||
}
|
||||
}
|
||||
|
||||
endLabelOffset = builder.getCurrentOffset();
|
||||
boolean isShortRefEmpty = endLabelOffset - startLabelOffset <= 1;
|
||||
if (leftBracketCount != rightBracketCount || isShortRefEmpty) {
|
||||
// Stop if unbalanced brackets/empty reference
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
|
||||
IElementType firstReferenceToken = findInlineToken(builder, JavaDocTokenType.DOC_LBRACKET, JavaDocTokenType.DOC_SPACE, false);
|
||||
if (firstReferenceToken != JavaDocTokenType.DOC_LBRACKET) {
|
||||
hasLabel = false;
|
||||
// The label is actually a reference, verify brackets balance or if we have a normal markdown link
|
||||
if (leftBracketCount > 1 || firstReferenceToken == JavaDocTokenType.DOC_LPAREN) {
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Step 2 get the reference for full reference link
|
||||
if (hasLabel) {
|
||||
if (findInlineToken(builder, JavaDocTokenType.DOC_RBRACKET, JavaDocTokenType.DOC_LBRACKET, true) != JavaDocTokenType.DOC_RBRACKET) {
|
||||
hasLabel = false;
|
||||
// The label is actually a reference, verify brackets balance
|
||||
if (leftBracketCount > 1) {
|
||||
tag.rollbackTo();
|
||||
builder.advanceLexer();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Step 3, validity ensured, parse the link
|
||||
tag.rollbackTo();
|
||||
tag = builder.mark();
|
||||
if (hasLabel) {
|
||||
// Label range already known, mark it as comment data
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer();
|
||||
if (builder.getCurrentOffset() < endLabelOffset) {
|
||||
builder.remapCurrentToken(JavaDocTokenType.DOC_COMMENT_DATA);
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
builder.advanceLexer();
|
||||
}
|
||||
|
||||
// Parse the reference itself
|
||||
builder.advanceLexer();
|
||||
parseMarkdownReference(builder, javaDocElementTypeContainer);
|
||||
builder.advanceLexer();
|
||||
|
||||
tag.done(javaDocElementTypeContainer.DOC_MARKDOWN_REFERENCE_LINK);
|
||||
}
|
||||
|
||||
private static void parseMarkdownReference(@NotNull PsiBuilder builder,
|
||||
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
|
||||
PsiBuilder.Marker refStart = builder.mark();
|
||||
@@ -320,12 +328,18 @@ public final class BasicJavaDocParser {
|
||||
refStart.drop();
|
||||
}
|
||||
|
||||
/** Look for the token provided by `needle`, taking into account markdown line break rules */
|
||||
/**
|
||||
* Look for the token provided by `needle`, taking into account markdown line break rules
|
||||
* @param travelToken The token that is either allowed or disallowed to encounter while looking for the `needle`
|
||||
* @param isTravelTokenDisallowed When `true`, the `travelToken` will abort the search
|
||||
* When `false`, encountering something other than `travelToken` or `needle` will abort the search
|
||||
* @return The last token encountered during the search.
|
||||
*/
|
||||
@Contract(mutates = "param1")
|
||||
private static @Nullable IElementType findInlineToken(@NotNull PsiBuilder builder,
|
||||
IElementType needle,
|
||||
IElementType travelToken,
|
||||
boolean areDisallowed) {
|
||||
boolean isTravelTokenDisallowed) {
|
||||
IElementType token = null;
|
||||
IElementType previousToken;
|
||||
while (!builder.eof()) {
|
||||
@@ -336,7 +350,7 @@ public final class BasicJavaDocParser {
|
||||
return token;
|
||||
}
|
||||
boolean travelTokenFound = travelToken == token;
|
||||
if ((areDisallowed && travelTokenFound) || (!areDisallowed && !travelTokenFound)) {
|
||||
if ((isTravelTokenDisallowed && travelTokenFound) || (!isTravelTokenDisallowed && !travelTokenFound)) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -525,7 +539,8 @@ public final class BasicJavaDocParser {
|
||||
refStart.done(javaDocElementTypeContainer.DOC_METHOD_OR_FIELD_REF);
|
||||
}
|
||||
|
||||
private static void parseParameterRef(@NotNull PsiBuilder builder, @NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
|
||||
private static void parseParameterRef(@NotNull PsiBuilder builder,
|
||||
@NotNull AbstractBasicJavaDocElementTypeFactory.JavaDocElementTypeContainer javaDocElementTypeContainer) {
|
||||
PsiBuilder.Marker tagValue = builder.mark();
|
||||
while (TAG_VALUES_SET.contains(getTokenType(builder))) builder.advanceLexer();
|
||||
tagValue.done(javaDocElementTypeContainer.DOC_PARAMETER_REF);
|
||||
|
||||
Reference in New Issue
Block a user