mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Java doc parsing: add lazy parsers for doc comments
GitOrigin-RevId: c39a77d27e6d1e8c8ab484c9fcc95f5c3c30a614
This commit is contained in:
committed by
intellij-monorepo-bot
parent
073b78b70a
commit
520aff6ccf
@@ -1,6 +1,8 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.syntax.element
|
||||
|
||||
import com.intellij.java.syntax.element.lazyParser.JavaDocCommentParser
|
||||
import com.intellij.java.syntax.element.lazyParser.JavaDocTypeParser
|
||||
import com.intellij.platform.syntax.SyntaxElementType
|
||||
import kotlin.jvm.JvmField
|
||||
|
||||
@@ -22,9 +24,9 @@ object JavaDocSyntaxElementType {
|
||||
|
||||
@JvmField val DOC_REFERENCE_HOLDER: SyntaxElementType = SyntaxElementType("DOC_REFERENCE_HOLDER")
|
||||
|
||||
@JvmField val DOC_TYPE_HOLDER: SyntaxElementType = SyntaxElementType("DOC_TYPE_HOLDER")
|
||||
@JvmField val DOC_TYPE_HOLDER: SyntaxElementType = SyntaxElementType("DOC_TYPE_HOLDER", lazyParser = JavaDocTypeParser())
|
||||
|
||||
@JvmField val DOC_COMMENT: SyntaxElementType = SyntaxElementType("DOC_COMMENT")
|
||||
@JvmField val DOC_COMMENT: SyntaxElementType = SyntaxElementType("DOC_COMMENT", lazyParser = JavaDocCommentParser())
|
||||
@JvmField val DOC_MARKDOWN_CODE_BLOCK: SyntaxElementType = SyntaxElementType("DOC_CODE_BLOCK")
|
||||
@JvmField val DOC_MARKDOWN_REFERENCE_LINK: SyntaxElementType = SyntaxElementType("DOC_REFERENCE_LINK")
|
||||
@JvmField val DOC_MARKDOWN_REFERENCE_LABEL: SyntaxElementType = SyntaxElementType("DOC_REFERENCE_LABEL")
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.syntax.element.lazyParser
|
||||
|
||||
import com.intellij.java.syntax.element.JavaDocSyntaxElementType
|
||||
import com.intellij.java.syntax.parser.JavaDocParser
|
||||
import com.intellij.platform.syntax.LazyParser
|
||||
import com.intellij.platform.syntax.LazyParsingContext
|
||||
import com.intellij.platform.syntax.parser.ProductionResult
|
||||
import com.intellij.platform.syntax.parser.prepareProduction
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
|
||||
internal class JavaDocCommentParser : LazyParser {
|
||||
override fun parse(parsingContext: LazyParsingContext): ProductionResult {
|
||||
val syntaxTreeBuilder = parsingContext.syntaxTreeBuilder
|
||||
JavaDocParser(syntaxTreeBuilder, LanguageLevel.HIGHEST).parseDocCommentText()
|
||||
return prepareProduction(syntaxTreeBuilder)
|
||||
}
|
||||
|
||||
override fun canBeReparsedIncrementally(parsingContext: LazyParsingContext): Boolean {
|
||||
val newText = parsingContext.text
|
||||
val tokenList = parsingContext.tokenList
|
||||
|
||||
return tokenList.tokenCount == 1 &&
|
||||
tokenList.getTokenType(0) == JavaDocSyntaxElementType.DOC_COMMENT &&
|
||||
newText.startsWith("/**") &&
|
||||
newText.endsWith("*/")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.syntax.element.lazyParser
|
||||
|
||||
import com.intellij.java.syntax.lexer.JavaLexer
|
||||
import com.intellij.java.syntax.lexer.JavaTypeEscapeLexer
|
||||
import com.intellij.java.syntax.parser.JavaDocParser
|
||||
import com.intellij.java.syntax.parser.JavaParser
|
||||
import com.intellij.platform.syntax.LazyLexingContext
|
||||
import com.intellij.platform.syntax.LazyParser
|
||||
import com.intellij.platform.syntax.LazyParsingContext
|
||||
import com.intellij.platform.syntax.lexer.Lexer
|
||||
import com.intellij.platform.syntax.parser.ProductionResult
|
||||
import com.intellij.platform.syntax.parser.prepareProduction
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
|
||||
internal class JavaDocTypeParser : LazyParser {
|
||||
override fun parse(parsingContext: LazyParsingContext): ProductionResult {
|
||||
val syntaxTreeBuilder = parsingContext.syntaxTreeBuilder
|
||||
JavaDocParser(syntaxTreeBuilder, languageLevel).parseJavadocType(JavaParser(languageLevel))
|
||||
return prepareProduction(syntaxTreeBuilder)
|
||||
}
|
||||
|
||||
override fun createLexer(lexingContext: LazyLexingContext): Lexer =
|
||||
JavaTypeEscapeLexer(JavaLexer(languageLevel))
|
||||
|
||||
private val languageLevel get() = LanguageLevel.JDK_1_3
|
||||
}
|
||||
Reference in New Issue
Block a user