IJPL-189507 Move XML stub-related extensions to intellij.xml.analysis.impl

GitOrigin-RevId: 4340fbdaade3b9f060f3a1c82951c8182ec0ce26
This commit is contained in:
Vyacheslav Karpukhin
2025-06-16 15:15:53 +02:00
committed by intellij-monorepo-bot
parent 8fdb8d1bbd
commit 3acce61116
5 changed files with 53 additions and 53 deletions

View File

@@ -40,9 +40,6 @@
<lang.parserDefinition language="HTML" implementationClass="com.intellij.lang.html.HTMLParserDefinition"/>
<lang.parserDefinition language="XHTML" implementationClass="com.intellij.lang.xhtml.XHTMLParserDefinition"/>
<languageStubDefinition language="HTML" implementationClass="com.intellij.psi.xml.HtmlLanguageStubDefinition"/>
<stubElementRegistryExtension implementation="com.intellij.psi.xml.HtmlStubRegistryExtension"/>
<syntax.elementTypeConverter language="XML" implementationClass="com.intellij.psi.xml.XmlElementTypeConverterExtension"/>
<syntaxHighlighter key="IDEA_PROJECT" implementationClass="com.intellij.ide.highlighter.XmlFileHighlighter"/>

View File

@@ -148,5 +148,8 @@
<fileBasedIndex implementation="com.intellij.xml.index.SchemaTypeInheritanceIndex"/>
<daemon.changeLocalityDetector implementation="com.intellij.xml.XmlChangeLocalityDetector"/>
<languageStubDefinition language="HTML" implementationClass="com.intellij.xml.HtmlLanguageStubDefinition"/>
<stubElementRegistryExtension implementation="com.intellij.xml.HtmlStubRegistryExtension"/>
</extensions>
</idea-plugin>

View File

@@ -0,0 +1,47 @@
// 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.xml
import com.intellij.psi.StubBuilder
import com.intellij.xml.HtmlLanguageStubVersionUtil.getHtmlStubVersion
import com.intellij.psi.stubs.DefaultStubBuilder
import com.intellij.psi.stubs.LanguageStubDefinition
import com.intellij.psi.stubs.StubElementRegistryService
import com.intellij.psi.tree.IElementType
import com.intellij.psi.tree.IFileElementType
class HtmlLanguageStubDefinition : LanguageStubDefinition {
override val stubVersion: Int
get() = getHtmlStubVersion() + 3
override val builder: StubBuilder
get() = DefaultStubBuilder()
}
object HtmlLanguageStubVersionUtil {
@Volatile
private var stubVersion = -1
@JvmStatic
fun getHtmlStubVersion(): Int {
val version = stubVersion
if (version != -1)
return version
val result = IElementType.enumerate { it is IFileElementType && isAcceptable(it) }
.mapNotNull { StubElementRegistryService.getInstance().getStubDescriptor(it.language)?.stubDefinition }
.sumOf { it.stubVersion }
stubVersion = result
return result
}
@JvmStatic
fun isAcceptable(elementType: IElementType): Boolean {
val id = elementType.language.id
//hardcoded values as in BaseHtmlLexer
//js and css dialect uses the same stub id as the parent language
return id == "JavaScript" || id == "CSS"
}
}

View File

@@ -1,5 +1,5 @@
// 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.psi.xml
package com.intellij.xml
import com.intellij.psi.stubs.IndexSink
import com.intellij.psi.stubs.PsiFileStub
@@ -11,11 +11,11 @@ import com.intellij.psi.stubs.StubRegistry
import com.intellij.psi.stubs.StubRegistryExtension
import com.intellij.psi.stubs.StubSerializer
import com.intellij.psi.stubs.StubSerializerId
import com.intellij.psi.xml.XmlElementType.HTML_FILE
import com.intellij.psi.xml.XmlElementType
class HtmlStubRegistryExtension : StubRegistryExtension {
override fun register(registry: StubRegistry) {
registry.registerStubSerializer(HTML_FILE, HtmlFileStubSerializer())
registry.registerStubSerializer(XmlElementType.HTML_FILE, HtmlFileStubSerializer())
}
private class HtmlFileStubSerializer : StubSerializer<PsiFileStub<*>> {

View File

@@ -1,47 +0,0 @@
// 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.psi.xml
import com.intellij.psi.StubBuilder
import com.intellij.psi.stubs.DefaultStubBuilder
import com.intellij.psi.stubs.LanguageStubDefinition
import com.intellij.psi.stubs.StubElementRegistryService
import com.intellij.psi.tree.IElementType
import com.intellij.psi.tree.IElementType.enumerate
import com.intellij.psi.tree.IFileElementType
class HtmlLanguageStubDefinition : LanguageStubDefinition {
override val stubVersion: Int
get() = getHtmlStubVersion() + 3
override val builder: StubBuilder
get() = DefaultStubBuilder()
companion object {
@Volatile
private var stubVersion = -1
@JvmStatic
fun getHtmlStubVersion(): Int {
val version = stubVersion
if (version != -1)
return version
val result = enumerate { it is IFileElementType && isAcceptable(it) }
.mapNotNull { StubElementRegistryService.getInstance().getStubDescriptor(it.language)?.stubDefinition }
.sumOf { it.stubVersion }
stubVersion = result
return result
}
@JvmStatic
fun isAcceptable(elementType: IElementType): Boolean {
val id = elementType.language.id
//hardcoded values as in BaseHtmlLexer
//js and css dialect uses the same stub id as the parent language
return id == "JavaScript" || id == "CSS"
}
}
}