2929import consulo .language .Language ;
3030import consulo .language .ast .*;
3131import consulo .language .lexer .FlexAdapter ;
32- import consulo .language .lexer .Lexer ;
3332import consulo .language .lexer .MergingLexerAdapter ;
3433import consulo .language .parser .ParserDefinition ;
3534import consulo .language .parser .PsiBuilder ;
3938import consulo .project .Project ;
4039import 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}
0 commit comments