[images] platform.images: extract SvgParserDefinition and get rid of xml dependency

GitOrigin-RevId: 18d5caef028c77a362671a489ac4001aa2479eba
This commit is contained in:
Vladimir Koshelev
2024-06-14 16:21:51 +02:00
committed by intellij-monorepo-bot
parent 6ae5a06f0a
commit 265737f489
12 changed files with 83 additions and 24 deletions

1
.idea/modules.xml generated
View File

@@ -633,6 +633,7 @@
<module fileurl="file://$PROJECT_DIR$/platform/ijent/intellij.platform.ijent.iml" filepath="$PROJECT_DIR$/platform/ijent/intellij.platform.ijent.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/ijent/impl/intellij.platform.ijent.community.impl.iml" filepath="$PROJECT_DIR$/platform/ijent/impl/intellij.platform.ijent.community.impl.iml" />
<module fileurl="file://$PROJECT_DIR$/images/intellij.platform.images.iml" filepath="$PROJECT_DIR$/images/intellij.platform.images.iml" />
<module fileurl="file://$PROJECT_DIR$/images/backend.svg/intellij.platform.images.backend.svg.iml" filepath="$PROJECT_DIR$/images/backend.svg/intellij.platform.images.backend.svg.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/build-scripts/icons/intellij.platform.images.build.iml" filepath="$PROJECT_DIR$/platform/build-scripts/icons/intellij.platform.images.build.iml" />
<module fileurl="file://$PROJECT_DIR$/images/intellij.platform.images.copyright/intellij.platform.images.copyright.iml" filepath="$PROJECT_DIR$/images/intellij.platform.images.copyright/intellij.platform.images.copyright.iml" />
<module fileurl="file://$PROJECT_DIR$/platform/indexing-api/intellij.platform.indexing.iml" filepath="$PROJECT_DIR$/platform/indexing-api/intellij.platform.indexing.iml" />

View File

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="com.intellij.platform.images.backend.svg" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="intellij.platform.images" />
<orderEntry type="library" name="kotlin-stdlib" level="project" />
<orderEntry type="module" module-name="intellij.xml.psi.impl" />
<orderEntry type="module" module-name="intellij.platform.lang" />
<orderEntry type="module" module-name="intellij.platform.core.impl" />
</component>
</module>

View File

@@ -0,0 +1,10 @@
<idea-plugin package="com.intellij.platform.images.backend.svg">
<dependencies>
<plugin id="com.intellij.modules.xml"/>
<plugin id="com.intellij.modules.lang"/>
<plugin id="com.intellij.platform.images"/>
</dependencies>
<extensions defaultExtensionNs="com.intellij">
<lang.parserDefinition language="SVG" implementationClass="com.intellij.platform.images.backend.svg.SvgParserDefinition"/>
</extensions>
</idea-plugin>

View File

@@ -0,0 +1,19 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.platform.images.backend.svg
import com.intellij.lang.xml.XMLParserDefinition
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.tree.IFileElementType
import org.intellij.images.fileTypes.impl.SvgLanguage
import org.jetbrains.annotations.NotNull
internal class SvgParserDefinition : XMLParserDefinition() {
override fun getFileNodeType(): IFileElementType = SVG_FILE
override fun createFile(viewProvider: @NotNull FileViewProvider): @NotNull PsiFile = XmlFileImpl(viewProvider, SVG_FILE)
private val SVG_FILE = IFileElementType(SvgLanguage.INSTANCE)
}

View File

@@ -33,7 +33,6 @@
<orderEntry type="module" module-name="intellij.platform.lang" />
<orderEntry type="module" module-name="intellij.platform.lang.impl" />
<orderEntry type="library" name="commons-imaging" level="project" />
<orderEntry type="module" module-name="intellij.xml.psi.impl" />
<orderEntry type="module" module-name="intellij.platform.testFramework" scope="TEST" />
<orderEntry type="module" module-name="intellij.platform.core.ui" />
<orderEntry type="module" module-name="intellij.platform.ide.util.io" />
@@ -41,5 +40,6 @@
<orderEntry type="library" name="jcef" level="project" />
<orderEntry type="library" name="kotlinx-serialization-core" level="project" />
<orderEntry type="library" name="kotlinx-serialization-json" level="project" />
<orderEntry type="module" module-name="intellij.xml.frontback" />
</component>
</module>

View File

@@ -1,4 +1,4 @@
<idea-plugin implementation-detail="true" package="org.intellij.images">
<idea-plugin implementation-detail="true">
<vendor>JetBrains</vendor>
<name>Images</name>
<id>com.intellij.platform.images</id>
@@ -12,7 +12,6 @@
<dependencies>
<plugin id="com.intellij.modules.lang"/>
<plugin id="com.intellij.modules.xml"/>
</dependencies>
<extensions defaultExtensionNs="com.intellij">
@@ -29,7 +28,6 @@
<!-- ImageIO.getReaderFormatNames() -->
<fileType name="Image" implementationClass="org.intellij.images.fileTypes.impl.ImageFileType" fieldName="INSTANCE" extensions="bigtiff;bmp;dcx;gif;icns;ico;jbig2;jpeg;jpg;pam;pbm;pcx;pgm;png;pnm;ppm;psd;rgbe;tga;tif;tiff;wbmp;xbm;xpm" />
<fileType name="SVG" implementationClass="org.intellij.images.fileTypes.impl.SvgFileType" fieldName="INSTANCE" extensions="svg" language="SVG"/>
<lang.parserDefinition language="SVG" implementationClass="org.intellij.images.fileTypes.impl.SvgParserDefinition"/>
<fileLookupInfoProvider implementation="org.intellij.images.completion.ImageLookupInfoProvider"/>
<documentationProvider implementation="org.intellij.images.fileTypes.ImageDocumentationProvider"/>

View File

@@ -1,25 +1,52 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.intellij.images.fileTypes.impl;
import com.intellij.icons.AllIcons;
import com.intellij.ide.IdeBundle;
import com.intellij.ide.highlighter.XmlLikeFileType;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.UIBasedFileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.text.XmlCharsetDetector;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* @author Konstantin Bulenkov
*/
public final class SvgFileType extends XmlLikeFileType implements UIBasedFileType {
public final class SvgFileType extends LanguageFileType implements UIBasedFileType {
public static final SvgFileType INSTANCE = new SvgFileType();
private SvgFileType() {
super(SvgLanguage.INSTANCE);
}
// copy-pasted from XmlLikeFileType
@Override
public String getCharset(@NotNull VirtualFile file, final byte @NotNull [] content) {
LoadTextUtil.DetectResult guessed = LoadTextUtil.guessFromContent(file, content);
String charset =
guessed.hardCodedCharset != null
? guessed.hardCodedCharset.name()
: XmlCharsetDetector.extractXmlEncodingFromProlog(content);
return charset == null ? CharsetToolkit.UTF8 : charset;
}
// copy-pasted from XmlLikeFileType
@Override
public Charset extractCharsetFromFileContent(final Project project, final @Nullable VirtualFile file, final @NotNull CharSequence content) {
String name = XmlCharsetDetector.extractXmlEncodingFromProlog(content);
Charset charset = CharsetToolkit.forName(name);
return charset == null ? StandardCharsets.UTF_8 : charset;
}
@NotNull
@Override
public String getName() {

View File

@@ -2,26 +2,10 @@
package org.intellij.images.fileTypes.impl
import com.intellij.lang.xml.XMLLanguage
import com.intellij.lang.xml.XMLParserDefinition
import com.intellij.psi.FileViewProvider
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.source.xml.XmlFileImpl
import com.intellij.psi.tree.IFileElementType
import org.jetbrains.annotations.NotNull
class SvgLanguage private constructor(): XMLLanguage(XMLLanguage.INSTANCE, "SVG", "image/svg+xml") {
companion object {
@JvmField
val INSTANCE = SvgLanguage()
}
}
internal class SvgParserDefinition : XMLParserDefinition() {
override fun getFileNodeType(): IFileElementType = SVG_FILE
override fun createFile(viewProvider: @NotNull FileViewProvider): @NotNull PsiFile = XmlFileImpl(viewProvider, SVG_FILE)
private val SVG_FILE = IFileElementType(SvgLanguage.INSTANCE)
}
}

View File

@@ -3,6 +3,7 @@
<content>
<module name="intellij.platform.images.copyright"/>
<module name="intellij.platform.images.backend.svg"/>
<module name="intellij.platform.lvcs.impl"/>
<module name="intellij.platform.smRunner.vcs"/>
<module name="intellij.platform.collaborationTools"/>

View File

@@ -158,5 +158,6 @@
<orderEntry type="library" scope="TEST" name="assertJ" level="project" />
<orderEntry type="module" module-name="intellij.platform.testFramework.junit5" scope="TEST" />
<orderEntry type="module" module-name="intellij.tools.ide.metrics.benchmark" scope="TEST" />
<orderEntry type="module" module-name="intellij.platform.images.backend.svg" scope="TEST" />
</component>
</module>

View File

@@ -28,6 +28,7 @@
<orderEntry type="library" scope="TEST" name="Guava" level="project" />
<orderEntry type="library" scope="TEST" name="jackson" level="project" />
<orderEntry type="module" module-name="intellij.tools.ide.metrics.benchmark" scope="TEST" />
<orderEntry type="module" module-name="intellij.platform.images.backend.svg" scope="TEST" />
</component>
<component name="copyright">
<Base>