Skip to content

Commit 449dc13

Browse files
committed
fix cce while parsing jsdoc
1 parent 33e810d commit 449dc13

2 files changed

Lines changed: 26 additions & 43 deletions

File tree

base-impl/src/main/java/com/intellij/lang/javascript/JSTokenTypes.java

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import consulo.language.Language;
3030
import consulo.language.ast.*;
3131
import consulo.language.lexer.FlexAdapter;
32-
import consulo.language.lexer.Lexer;
3332
import consulo.language.lexer.MergingLexerAdapter;
3433
import consulo.language.parser.ParserDefinition;
3534
import consulo.language.parser.PsiBuilder;
@@ -39,8 +38,6 @@
3938
import consulo.project.Project;
4039
import consulo.xml.psi.xml.XmlTokenType;
4140

42-
import org.jspecify.annotations.Nullable;
43-
4441
/**
4542
* @author max, maxim.mossienko
4643
*/
@@ -61,16 +58,19 @@ public interface JSTokenTypes {
6158
@DeprecationInfo("old xml parsing, es4")
6259
IElementType XML_STYLE_COMMENT_START = new JSElementType("XML_STYLE_COMMENT_START");
6360

64-
IElementType DOC_COMMENT = new JSChameleonElementType("DOC_COMMENT") {
61+
IElementType DOC_COMMENT = new ILazyParseableElementType("DOC_COMMENT", JavaScriptLanguage.INSTANCE) {
6562
@Override
66-
protected void doParse(JavaScriptParsingContext context, PsiBuilder builder) {
63+
@RequiredReadAction
64+
protected ASTNode doParseContents(ASTNode chameleon, PsiElement psi) {
65+
Project project = psi.getProject();
66+
Language languageForParser = getLanguageForParser(psi);
67+
LanguageVersion tempLanguageVersion = chameleon.getUserData(LanguageVersion.KEY);
68+
LanguageVersion languageVersion = tempLanguageVersion == null ? psi.getLanguageVersion() : tempLanguageVersion;
69+
MergingLexerAdapter lexer = new MergingLexerAdapter(new FlexAdapter(new _JSDocLexer(false)), JSDocTokenTypes.TOKENS_TO_MERGE);
70+
PsiBuilder builder = PsiBuilderFactory.getInstance()
71+
.createBuilder(project, chameleon, lexer, languageForParser, languageVersion, chameleon.getChars());
6772
JSDocParsing.parseJSDoc(builder);
68-
}
69-
70-
@Override
71-
@Nullable
72-
protected Lexer createLexer() {
73-
return new MergingLexerAdapter(new FlexAdapter(new _JSDocLexer(false)), JSDocTokenTypes.TOKENS_TO_MERGE);
73+
return builder.getTreeBuilt();
7474
}
7575
};
7676

@@ -149,10 +149,21 @@ protected Lexer createLexer() {
149149
IElementType XML_ATTR_VALUE = XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN;
150150
IElementType XML_ATTR_VALUE_START = XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER;
151151
IElementType XML_ATTR_VALUE_END = XmlTokenType.XML_ATTRIBUTE_VALUE_END_DELIMITER;
152-
IElementType XML_JS_SCRIPT = new JSChameleonElementType("XML_JS_SCRIPT") {
152+
IElementType XML_JS_SCRIPT = new ILazyParseableElementType("XML_JS_SCRIPT") {
153153
@Override
154-
protected void doParse(JavaScriptParsingContext context, PsiBuilder builder) {
155-
parseScriptExpression(context, builder);
154+
@RequiredReadAction
155+
protected ASTNode doParseContents(ASTNode chameleon, PsiElement psi) {
156+
Project project = psi.getProject();
157+
Language languageForParser = getLanguageForParser(psi);
158+
LanguageVersion tempLanguageVersion = chameleon.getUserData(LanguageVersion.KEY);
159+
LanguageVersion languageVersion = tempLanguageVersion == null ? psi.getLanguageVersion() : tempLanguageVersion;
160+
PsiBuilder builder = PsiBuilderFactory.getInstance()
161+
.createBuilder(project, chameleon, null, languageForParser, languageVersion, chameleon.getChars());
162+
JavaScriptParser parser = (JavaScriptParser) ParserDefinition.forLanguage(languageForParser).createParser(languageVersion);
163+
164+
JavaScriptParsingContext parsingContext = parser.createParsingContext();
165+
parseScriptExpression(parsingContext, builder);
166+
return builder.getTreeBuilt();
156167
}
157168

158169
public void parseScriptExpression(JavaScriptParsingContext context, PsiBuilder builder) {
@@ -437,32 +448,4 @@ public void parseScriptExpression(JavaScriptParsingContext context, PsiBuilder b
437448

438449
@Deprecated
439450
TokenSet IDENTIFIER_TOKENS_SET = TokenSet.create(IDENTIFIER);
440-
441-
abstract class JSChameleonElementType extends ILazyParseableElementType {
442-
public JSChameleonElementType(String name) {
443-
super(name, JavaScriptLanguage.INSTANCE);
444-
}
445-
446-
protected abstract void doParse(JavaScriptParsingContext context, PsiBuilder builder);
447-
448-
@Override
449-
@RequiredReadAction
450-
protected ASTNode doParseContents(ASTNode chameleon, PsiElement psi) {
451-
Project project = psi.getProject();
452-
Language languageForParser = getLanguageForParser(psi);
453-
LanguageVersion tempLanguageVersion = chameleon.getUserData(LanguageVersion.KEY);
454-
LanguageVersion languageVersion = tempLanguageVersion == null ? psi.getLanguageVersion() : tempLanguageVersion;
455-
PsiBuilder builder = PsiBuilderFactory.getInstance()
456-
.createBuilder(project, chameleon, createLexer(), languageForParser, languageVersion, chameleon.getChars());
457-
JavaScriptParser parser = (JavaScriptParser)ParserDefinition.forLanguage(languageForParser).createParser(languageVersion);
458-
459-
JavaScriptParsingContext parsingContext = parser.createParsingContext();
460-
doParse(parsingContext, builder);
461-
return builder.getTreeBuilt();
462-
}
463-
464-
protected Lexer createLexer() {
465-
return null;
466-
}
467-
}
468451
}

lang-version-impl/typescript-impl/src/main/java/consulo/typescript/version/BaseTypeScriptLanguageVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package consulo.typescript.version;
22

33
import consulo.javascript.ecmascript.lang.BaseEcmaScriptJavaScriptVersion;
4+
import consulo.javascript.ide.hightlight.JavaScriptHighlighter;
45
import consulo.javascript.language.JavaScriptFeature;
56
import consulo.javascript.language.StandardJavaScriptVersion;
6-
import consulo.javascript.ide.hightlight.JavaScriptHighlighter;
77
import consulo.language.editor.highlight.SyntaxHighlighter;
88
import consulo.language.lexer.Lexer;
99
import consulo.language.parser.PsiParser;

0 commit comments

Comments
 (0)