mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-10 13:17:09 +07:00
fix lazy parsers for doc comments
- forgot to close the root marker in the prev commit - use JavaDocLexer GitOrigin-RevId: 400206b6588a16b8ba2396c69b055bb491eda942
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f2e0836de5
commit
4682103c9d
+11
-1
@@ -2,9 +2,12 @@
|
||||
package com.intellij.java.syntax.element.lazyParser
|
||||
|
||||
import com.intellij.java.syntax.element.JavaDocSyntaxElementType
|
||||
import com.intellij.java.syntax.lexer.JavaDocLexer
|
||||
import com.intellij.java.syntax.parser.JavaDocParser
|
||||
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
|
||||
@@ -12,7 +15,9 @@ 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()
|
||||
parseFragment(syntaxTreeBuilder, JavaDocSyntaxElementType.DOC_COMMENT, false) {
|
||||
JavaDocParser(syntaxTreeBuilder, languageLevel).parseDocCommentText()
|
||||
}
|
||||
return prepareProduction(syntaxTreeBuilder)
|
||||
}
|
||||
|
||||
@@ -25,4 +30,9 @@ internal class JavaDocCommentParser : LazyParser {
|
||||
newText.startsWith("/**") &&
|
||||
newText.endsWith("*/")
|
||||
}
|
||||
|
||||
override fun createLexer(lexingContext: LazyLexingContext): Lexer =
|
||||
JavaDocLexer(languageLevel)
|
||||
|
||||
private val languageLevel get() = LanguageLevel.HIGHEST
|
||||
}
|
||||
+4
-1
@@ -1,6 +1,7 @@
|
||||
// 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.lexer.JavaLexer
|
||||
import com.intellij.java.syntax.lexer.JavaTypeEscapeLexer
|
||||
import com.intellij.java.syntax.parser.JavaDocParser
|
||||
@@ -16,7 +17,9 @@ 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))
|
||||
parseFragment(syntaxTreeBuilder, JavaDocSyntaxElementType.DOC_TYPE_HOLDER, false) {
|
||||
JavaDocParser(syntaxTreeBuilder, languageLevel).parseJavadocType(JavaParser(languageLevel))
|
||||
}
|
||||
return prepareProduction(syntaxTreeBuilder)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:JvmName("ParsingUtil")
|
||||
|
||||
package com.intellij.java.syntax.element.lazyParser
|
||||
|
||||
import com.intellij.java.syntax.JavaSyntaxBundle
|
||||
import com.intellij.platform.syntax.SyntaxElementType
|
||||
import com.intellij.platform.syntax.parser.SyntaxTreeBuilder
|
||||
import kotlin.jvm.JvmName
|
||||
|
||||
inline fun parseFragment(
|
||||
builder: SyntaxTreeBuilder,
|
||||
type: SyntaxElementType,
|
||||
eatAll: Boolean = false,
|
||||
block: () -> Unit,
|
||||
) {
|
||||
val root = builder.mark()
|
||||
block()
|
||||
if (!builder.eof()) {
|
||||
if (!eatAll) throw IncompleteFragmentParsingException("Unexpected token: '${builder.tokenText}'")
|
||||
val extras = builder.mark()
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer()
|
||||
}
|
||||
extras.error(JavaSyntaxBundle.message("unexpected.tokens"))
|
||||
}
|
||||
root.done(type)
|
||||
}
|
||||
|
||||
class IncompleteFragmentParsingException(message: String) : RuntimeException(message)
|
||||
Reference in New Issue
Block a user