mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 11:20:44 +07:00
fix(JavaDoc): illegal character on escaped array types
GitOrigin-RevId: dd8098159715bd42510d807077d2679b365c546f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
afa40cc6b8
commit
d69bdfe6a4
+44
@@ -0,0 +1,44 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.lang.java.lexer;
|
||||
|
||||
import com.intellij.lexer.Lexer;
|
||||
import com.intellij.lexer.MergeFunction;
|
||||
import com.intellij.lexer.MergingLexerAdapterBase;
|
||||
import com.intellij.psi.TokenType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
|
||||
/**
|
||||
* Lexer to wrap around the Java Lexer when parsing Java types for the markdown JavaDoc (JEP-467)
|
||||
* In reference links, array types are escaped: "char\[\]" which the JavaLexer doesn't like
|
||||
* <p>
|
||||
* It does this by <em>covering up</em> a <i>BAD_CHARACTER</i> token if followed by <i>[</i> or <i>]</i>
|
||||
*/
|
||||
public class JavaTypeEscapeLexer extends MergingLexerAdapterBase {
|
||||
private final MergeFunction myMergeFunction = new EscapeMarkdownFunction();
|
||||
|
||||
public JavaTypeEscapeLexer(BasicJavaLexer original) {
|
||||
super(original);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MergeFunction getMergeFunction() {
|
||||
return myMergeFunction;
|
||||
}
|
||||
|
||||
|
||||
private static class EscapeMarkdownFunction implements MergeFunction {
|
||||
@Override
|
||||
public IElementType merge(IElementType type, Lexer originalLexer) {
|
||||
if(type != TokenType.BAD_CHARACTER) return type;
|
||||
|
||||
CharSequence tokenText = originalLexer.getTokenSequence();
|
||||
if (tokenText.length() != 1 || (tokenText.charAt(0) != '[' && tokenText.charAt(0) != ']')) {
|
||||
return type;
|
||||
}
|
||||
|
||||
type = originalLexer.getTokenType();
|
||||
originalLexer.advance();
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -193,7 +193,7 @@ public final class BasicJavaParserUtil {
|
||||
final boolean eatAll,
|
||||
final LanguageLevel level,
|
||||
Function<LanguageLevel, JavaDocLexer> javaDocLexer,
|
||||
Function<LanguageLevel, BasicJavaLexer> javaLexer) {
|
||||
Function<LanguageLevel, ? extends Lexer> javaLexer) {
|
||||
final PsiElement psi = chameleon.getTreeParent() != null ? chameleon.getTreeParent().getPsi() : chameleon.getPsi();
|
||||
assert psi != null : chameleon;
|
||||
final Project project = psi.getProject();
|
||||
|
||||
+3
-2
@@ -5,6 +5,7 @@ import com.intellij.lang.Language;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.lang.java.lexer.BasicJavaLexer;
|
||||
import com.intellij.lang.java.lexer.JavaDocLexer;
|
||||
import com.intellij.lang.java.lexer.JavaTypeEscapeLexer;
|
||||
import com.intellij.lang.java.parser.BasicJavaDocParser;
|
||||
import com.intellij.lang.java.parser.BasicJavaParser;
|
||||
import com.intellij.lang.java.parser.BasicJavaParserUtil;
|
||||
@@ -125,11 +126,11 @@ public interface BasicJavaDocElementType {
|
||||
|
||||
private final @NotNull Supplier<? extends BasicJavaParser> myJavaThinParser;
|
||||
private final Function<LanguageLevel, JavaDocLexer> javaDocLexer;
|
||||
private final Function<LanguageLevel, BasicJavaLexer> javaLexer;
|
||||
private final Function<LanguageLevel, JavaTypeEscapeLexer> javaLexer;
|
||||
|
||||
public DocTypeHolderElementType(@NotNull Supplier<? extends BasicJavaParser> parser,
|
||||
@NotNull Function<LanguageLevel, JavaDocLexer> docLexerFunction,
|
||||
@NotNull Function<LanguageLevel, BasicJavaLexer> javaLexer) {
|
||||
@NotNull Function<LanguageLevel, JavaTypeEscapeLexer> javaLexer) {
|
||||
super("DOC_TYPE_HOLDER", BASIC_DOC_TYPE_HOLDER);
|
||||
this.myJavaThinParser = parser;
|
||||
this.javaDocLexer = docLexerFunction;
|
||||
|
||||
+2
-2
@@ -251,10 +251,10 @@ public interface BasicJavaElementType {
|
||||
final class JavaDummyElementType extends ILazyParseableElementType implements ICompositeElementType, ParentProviderElementType {
|
||||
private static final Set<IElementType> PARENT_ELEMENT_TYPES = Collections.singleton(BASIC_DUMMY_ELEMENT);
|
||||
private final Function<LanguageLevel, JavaDocLexer> javaDocLexer;
|
||||
private final Function<LanguageLevel, BasicJavaLexer> javaLexer;
|
||||
private final Function<LanguageLevel, ? extends Lexer> javaLexer;
|
||||
|
||||
public JavaDummyElementType(@NotNull Function<LanguageLevel, JavaDocLexer> lexer,
|
||||
@NotNull Function<LanguageLevel, BasicJavaLexer> javaLexer) {
|
||||
@NotNull Function<LanguageLevel, Lexer> javaLexer) {
|
||||
super("DUMMY_ELEMENT", JavaLanguage.INSTANCE);
|
||||
javaDocLexer = lexer;
|
||||
this.javaLexer = javaLexer;
|
||||
|
||||
Reference in New Issue
Block a user