WEB-73962: drop BasicHtmlElementFactory & BasicXmlElementFactory

GitOrigin-RevId: 87279905bca461f4cc5b8c9cb72a9fe65d5f2ccb
This commit is contained in:
Maria Filipanova
2025-07-14 19:02:36 +00:00
committed by intellij-monorepo-bot
parent 37d75e736d
commit dfe90475a3
11 changed files with 59 additions and 146 deletions
@@ -2,10 +2,7 @@
package com.intellij.xml.testFramework
import com.intellij.html.embedding.BasicHtmlRawTextElementFactory
import com.intellij.lang.html.BackendHtmlElementFactory
import com.intellij.lang.html.BasicHtmlElementFactory
import com.intellij.lang.xml.BackendXmlElementFactory
import com.intellij.lang.xml.BasicXmlElementFactory
import com.intellij.lang.html.HtmlRawTextElementFactoryImpl
import com.intellij.mock.MockApplication
import com.intellij.openapi.Disposable
@@ -15,21 +12,9 @@ object XmlElementTypeServiceHelper {
application: MockApplication,
testRootDisposable: Disposable,
) {
application.registerService(
BasicXmlElementFactory::class.java,
BackendXmlElementFactory(),
testRootDisposable,
)
application.registerService(
BasicHtmlElementFactory::class.java,
BackendHtmlElementFactory(),
testRootDisposable,
)
application.registerService(
BasicHtmlRawTextElementFactory::class.java,
BackendHtmlElementFactory(),
HtmlRawTextElementFactoryImpl(),
testRootDisposable,
)
}
@@ -1,12 +0,0 @@
package com.intellij.lang.html
import com.intellij.lang.ASTNode
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
interface BasicHtmlElementFactory {
fun createFile(viewProvider: FileViewProvider): PsiFile
fun createElement(node: ASTNode): PsiElement
}
@@ -1,16 +0,0 @@
package com.intellij.lang.xml
import com.intellij.lang.ASTNode
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.tree.IElementType
interface BasicXmlElementFactory {
fun createFile(
viewProvider: FileViewProvider,
elementType: IElementType,
): PsiFile
fun createElement(node: ASTNode): PsiElement
}
@@ -31,12 +31,8 @@
<lang.parserDefinition language="HTML" implementationClass="com.intellij.lang.html.HTMLParserDefinition"/>
<lang.parserDefinition language="XHTML" implementationClass="com.intellij.lang.xhtml.XHTMLParserDefinition"/>
<applicationService serviceInterface="com.intellij.lang.xml.BasicXmlElementFactory"
serviceImplementation="com.intellij.lang.xml.BackendXmlElementFactory"/>
<applicationService serviceInterface="com.intellij.lang.html.BasicHtmlElementFactory"
serviceImplementation="com.intellij.lang.html.BackendHtmlElementFactory"/>
<applicationService serviceInterface="com.intellij.html.embedding.BasicHtmlRawTextElementFactory"
serviceImplementation="com.intellij.lang.html.BackendHtmlElementFactory"/>
serviceImplementation="com.intellij.lang.html.HtmlRawTextElementFactoryImpl"/>
<lang.elementManipulator forClass="com.intellij.psi.xml.XmlAttributeValue"
implementationClass="com.intellij.psi.impl.source.resolve.reference.impl.manipulators.XmlAttributeValueManipulator"/>
@@ -12,6 +12,7 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.parsing.xml.DtdParsing
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.tree.IFileElementType
import com.intellij.psi.xml.XmlElementType
import com.intellij.psi.xml.XmlEntityContextType
@@ -22,8 +23,7 @@ class DTDParserDefinition :
override fun spaceExistenceTypeBetweenTokens(left: ASTNode, right: ASTNode): SpaceRequirements =
LanguageUtil.canStickTokensTogetherByLexer(left, right, DtdLexer(false))
override fun createFile(viewProvider: FileViewProvider): PsiFile =
elementFactory.createFile(viewProvider, XmlElementType.DTD_FILE)
override fun createFile(viewProvider: FileViewProvider): PsiFile = XmlFileImpl(viewProvider, XmlElementType.DTD_FILE)
override fun createParser(project: Project?): PsiParser =
PsiParser { root, builder ->
@@ -1,42 +0,0 @@
package com.intellij.lang.html
import com.intellij.html.embedding.BasicHtmlRawTextElementFactory
import com.intellij.html.embedding.HtmlCustomEmbeddedContentTokenType
import com.intellij.lang.ASTNode
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.html.HtmlEmbeddedContentImpl
import com.intellij.psi.impl.source.html.HtmlFileImpl
import com.intellij.psi.impl.source.html.HtmlRawTextImpl
import com.intellij.psi.impl.source.xml.stub.XmlStubBasedElementType
import com.intellij.psi.util.UnsupportedNodeElementTypeException
import com.intellij.psi.xml.XmlElementType
class BackendHtmlElementFactory:
BasicHtmlElementFactory,
BasicHtmlRawTextElementFactory {
override fun createFile(viewProvider: FileViewProvider): PsiFile =
HtmlFileImpl(viewProvider)
override fun createElement(node: ASTNode): PsiElement {
val elementType = node.elementType
return when {
elementType is XmlStubBasedElementType<*>
-> elementType.createPsi(node)
elementType is HtmlCustomEmbeddedContentTokenType
-> elementType.createPsi(node)
elementType === XmlElementType.HTML_EMBEDDED_CONTENT
-> HtmlEmbeddedContentImpl(node)
else -> throw UnsupportedNodeElementTypeException(node)
}
}
override fun createRawTextElement(node: ASTNode): PsiElement =
HtmlRawTextImpl(node)
}
@@ -1,6 +1,9 @@
// 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.lang.html
import com.intellij.extapi.psi.ASTWrapperPsiElement
import com.intellij.html.embedding.HtmlCustomEmbeddedContentTokenType
import com.intellij.idea.AppModeAssertions
import com.intellij.lang.ASTNode
import com.intellij.lang.ParserDefinition
import com.intellij.lang.ParserDefinition.SpaceRequirements
@@ -8,23 +11,22 @@ import com.intellij.lang.PsiParser
import com.intellij.lang.xml.canStickTokensTogether
import com.intellij.lexer.HtmlLexer
import com.intellij.lexer.Lexer
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.html.HtmlEmbeddedContentImpl
import com.intellij.psi.impl.source.html.HtmlFileImpl
import com.intellij.psi.impl.source.xml.stub.XmlStubBasedElementType
import com.intellij.psi.tree.IFileElementType
import com.intellij.psi.tree.TokenSet
import com.intellij.psi.util.UnsupportedNodeElementTypeException
import com.intellij.psi.xml.XmlElementType
import com.intellij.psi.xml.XmlTokenType
open class HTMLParserDefinition :
ParserDefinition {
private val elementFactory: BasicHtmlElementFactory by lazy {
service<BasicHtmlElementFactory>()
}
override fun createLexer(project: Project?): Lexer =
HtmlLexer()
@@ -43,11 +45,23 @@ open class HTMLParserDefinition :
override fun createParser(project: Project?): PsiParser =
HTMLParser()
override fun createElement(node: ASTNode): PsiElement =
elementFactory.createElement(node)
override fun createElement(node: ASTNode): PsiElement {
val elementType = node.elementType
override fun createFile(viewProvider: FileViewProvider): PsiFile =
elementFactory.createFile(viewProvider)
return when {
elementType is XmlStubBasedElementType<*> -> elementType.createPsi(node)
elementType is HtmlCustomEmbeddedContentTokenType -> elementType.createPsi(node)
elementType === XmlElementType.HTML_EMBEDDED_CONTENT -> HtmlEmbeddedContentImpl(node)
AppModeAssertions.isFrontend() -> ASTWrapperPsiElement(node)
else -> throw UnsupportedNodeElementTypeException(node)
}
}
override fun createFile(viewProvider: FileViewProvider): PsiFile = HtmlFileImpl(viewProvider)
override fun spaceExistenceTypeBetweenTokens(left: ASTNode, right: ASTNode): SpaceRequirements =
canStickTokensTogether(left, right)
@@ -0,0 +1,10 @@
package com.intellij.lang.html
import com.intellij.html.embedding.BasicHtmlRawTextElementFactory
import com.intellij.lang.ASTNode
import com.intellij.psi.PsiElement
import com.intellij.psi.impl.source.html.HtmlRawTextImpl
class HtmlRawTextElementFactoryImpl: BasicHtmlRawTextElementFactory {
override fun createRawTextElement(node: ASTNode): PsiElement = HtmlRawTextImpl(node)
}
@@ -7,6 +7,7 @@ import com.intellij.lexer.XHtmlLexer
import com.intellij.openapi.project.Project
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.xml.XmlElementType
class XHTMLParserDefinition :
@@ -15,6 +16,7 @@ class XHTMLParserDefinition :
override fun createLexer(project: Project?): Lexer =
XHtmlLexer()
override fun createFile(viewProvider: FileViewProvider): PsiFile =
elementFactory.createFile(viewProvider, XmlElementType.XHTML_FILE)
override fun createFile(viewProvider: FileViewProvider): PsiFile {
return XmlFileImpl(viewProvider, XmlElementType.XHTML_FILE)
}
}
@@ -1,31 +0,0 @@
package com.intellij.lang.xml
import com.intellij.lang.ASTNode
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.impl.source.xml.stub.XmlStubBasedElementType
import com.intellij.psi.tree.IElementType
import com.intellij.psi.util.UnsupportedNodeElementTypeException
class BackendXmlElementFactory :
BasicXmlElementFactory {
override fun createFile(
viewProvider: FileViewProvider,
elementType: IElementType,
): PsiFile =
XmlFileImpl(viewProvider, elementType)
override fun createElement(node: ASTNode): PsiElement {
val elementType = node.elementType
return when (elementType) {
is XmlStubBasedElementType<*>,
-> elementType.createPsi(node)
else -> throw UnsupportedNodeElementTypeException(node)
}
}
}
@@ -1,30 +1,30 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// 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.lang.xml
import com.intellij.extapi.psi.ASTWrapperPsiElement
import com.intellij.idea.AppModeAssertions
import com.intellij.lang.ASTNode
import com.intellij.lang.ParserDefinition
import com.intellij.lang.ParserDefinition.SpaceRequirements
import com.intellij.lang.PsiParser
import com.intellij.lexer.Lexer
import com.intellij.lexer.XmlLexer
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.parsing.xml.XmlParser
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.impl.source.xml.stub.XmlStubBasedElementType
import com.intellij.psi.tree.IFileElementType
import com.intellij.psi.tree.TokenSet
import com.intellij.psi.util.UnsupportedNodeElementTypeException
import com.intellij.psi.xml.XmlElementType
import com.intellij.psi.xml.XmlTokenType
open class XMLParserDefinition :
ParserDefinition {
protected val elementFactory: BasicXmlElementFactory by lazy {
service<BasicXmlElementFactory>()
}
override fun createLexer(project: Project?): Lexer =
XmlLexer()
@@ -43,11 +43,18 @@ open class XMLParserDefinition :
override fun createParser(project: Project?): PsiParser =
XmlParser()
override fun createElement(node: ASTNode): PsiElement =
elementFactory.createElement(node)
override fun createElement(node: ASTNode): PsiElement {
val elementType = node.elementType
override fun createFile(viewProvider: FileViewProvider): PsiFile =
elementFactory.createFile(viewProvider, XmlElementType.XML_FILE)
return when {
elementType is XmlStubBasedElementType<*> -> elementType.createPsi(node)
AppModeAssertions.isFrontend() -> ASTWrapperPsiElement(node)
else -> throw UnsupportedNodeElementTypeException(node)
}
}
override fun createFile(viewProvider: FileViewProvider): PsiFile = XmlFileImpl(viewProvider, XmlElementType.XML_FILE)
override fun spaceExistenceTypeBetweenTokens(left: ASTNode, right: ASTNode): SpaceRequirements =
canStickTokensTogether(left, right)