diff --git a/.idea/modules.xml b/.idea/modules.xml index 56a614dd0437..df415fce7604 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -1194,6 +1194,7 @@ + diff --git a/xml/xml-frontend-split/BUILD.bazel b/xml/xml-frontend-split/BUILD.bazel new file mode 100644 index 000000000000..aba1a9f31e61 --- /dev/null +++ b/xml/xml-frontend-split/BUILD.bazel @@ -0,0 +1,29 @@ +### auto-generated section `build intellij.xml.frontend.split` start +load("@rules_jvm//:jvm.bzl", "jvm_library", "jvm_resources") + +jvm_resources( + name = "frontend-split_resources", + files = glob(["resources/**/*"]), + strip_prefix = "resources" +) + +jvm_library( + name = "frontend-split", + module_name = "intellij.xml.frontend.split", + visibility = ["//visibility:public"], + srcs = glob(["src/**/*.kt", "src/**/*.java"], allow_empty = True), + deps = [ + "@lib//:kotlin-stdlib", + "//platform/core-api:core", + "//platform/core-impl", + "//platform/util/base", + "//xml/xml-parser:parser", + "//platform/projectModel-api:projectModel", + "//platform/analysis-api:analysis", + "//platform/util", + "//platform/editor-ui-api:editor-ui", + "//xml/xml-frontback-impl:frontback-impl", + ], + runtime_deps = [":frontend-split_resources"] +) +### auto-generated section `build intellij.xml.frontend.split` end \ No newline at end of file diff --git a/xml/xml-frontend-split/intellij.xml.frontend.split.iml b/xml/xml-frontend-split/intellij.xml.frontend.split.iml new file mode 100644 index 000000000000..969d86c816cc --- /dev/null +++ b/xml/xml-frontend-split/intellij.xml.frontend.split.iml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml b/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml new file mode 100644 index 000000000000..ff343bd90e40 --- /dev/null +++ b/xml/xml-frontend-split/resources/intellij.xml.frontend.split.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt new file mode 100644 index 000000000000..fc990c16925c --- /dev/null +++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendFileImpl.kt @@ -0,0 +1,21 @@ +// 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.frontend.split.editor + +import com.intellij.openapi.fileTypes.FileType +import com.intellij.psi.FileViewProvider +import com.intellij.psi.PsiElementVisitor +import com.intellij.psi.impl.source.PsiFileImpl +import com.intellij.psi.tree.IElementType + +abstract class FrontendFileImpl( + viewProvider: FileViewProvider, + elementType: IElementType, +) : PsiFileImpl(elementType, elementType, viewProvider) { + + override fun getFileType(): FileType = + viewProvider.fileType + + override fun accept(visitor: PsiElementVisitor) { + visitor.visitFile(this) + } +} diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt new file mode 100644 index 000000000000..477e21fc32a3 --- /dev/null +++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlElementFactory.kt @@ -0,0 +1,23 @@ +package com.intellij.xml.frontend.split.editor + +import com.intellij.extapi.psi.ASTWrapperPsiElement +import com.intellij.html.embedding.BasicHtmlRawTextElementFactory +import com.intellij.lang.ASTNode +import com.intellij.lang.html.BasicHtmlElementFactory +import com.intellij.psi.FileViewProvider +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile + +class FrontendHtmlElementFactory : + BasicHtmlElementFactory, + BasicHtmlRawTextElementFactory { + + override fun createFile(viewProvider: FileViewProvider): PsiFile = + FrontendHtmlFileImpl(viewProvider) + + override fun createElement(node: ASTNode): PsiElement = + ASTWrapperPsiElement(node) + + override fun createRawTextElement(node: ASTNode): PsiElement = + ASTWrapperPsiElement(node) +} diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt new file mode 100644 index 000000000000..d98a5df8a2a2 --- /dev/null +++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendHtmlFileImpl.kt @@ -0,0 +1,12 @@ +package com.intellij.xml.frontend.split.editor + +import com.intellij.psi.FileViewProvider +import com.intellij.psi.xml.XmlElementType + +class FrontendHtmlFileImpl( + viewProvider: FileViewProvider, +) : FrontendFileImpl(viewProvider, XmlElementType.HTML_FILE) { + + override fun toString(): String = + "HtmlFile:$name" +} diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt new file mode 100644 index 000000000000..2faeec045b8e --- /dev/null +++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlElementFactory.kt @@ -0,0 +1,22 @@ +package com.intellij.xml.frontend.split.editor + +import com.intellij.extapi.psi.ASTWrapperPsiElement +import com.intellij.lang.ASTNode +import com.intellij.lang.xml.BasicXmlElementFactory +import com.intellij.psi.FileViewProvider +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.tree.IElementType +import com.intellij.psi.tree.IFileElementType + +class FrontendXmlElementFactory : + BasicXmlElementFactory { + override fun createFile( + viewProvider: FileViewProvider, + elementType: IElementType, + ): PsiFile = + FrontendXmlFileImpl(viewProvider, IFileElementType(viewProvider.baseLanguage)) + + override fun createElement(node: ASTNode): PsiElement = + ASTWrapperPsiElement(node) +} diff --git a/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt new file mode 100644 index 000000000000..0c9816ee16d9 --- /dev/null +++ b/xml/xml-frontend-split/src/com/intellij/xml/frontend/split/editor/FrontendXmlFileImpl.kt @@ -0,0 +1,13 @@ +package com.intellij.xml.frontend.split.editor + +import com.intellij.psi.FileViewProvider +import com.intellij.psi.tree.IElementType + +class FrontendXmlFileImpl( + viewProvider: FileViewProvider, + elementType: IElementType, +) : FrontendFileImpl(viewProvider, elementType) { + + override fun toString(): String = + "XmlFile:$name" +}