mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-194946 DevKit: verify plugin provides pluginIcon.svg
This commit is contained in:
@@ -176,6 +176,7 @@ inspections.plugin.xml.must.not.contain.template.text=Must not contain template
|
||||
inspections.plugin.xml.value.exceeds.max.length=Value exceeds maximum length {0}
|
||||
inspections.plugin.xml.value.must.have.minimum.length=Value must have minimum length of {0}
|
||||
inspections.plugin.xml.product.descriptor.invalid.date=Date must be in YYYYMMDD format
|
||||
inspections.plugin.xml.no.plugin.icon.svg.file=<html>Plugin should provide ''{0}'' (<a href="https://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_icon_file.html">Documentation</a>)</html>
|
||||
|
||||
inspections.registration.problems.name=Component type mismatch
|
||||
inspections.registration.problems.option.check.plugin.xml=Check Plugin Descriptor (plugin.xml)
|
||||
|
||||
@@ -26,6 +26,8 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.NavigatableAdapter;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.light.LightMethodBuilder;
|
||||
import com.intellij.psi.search.FilenameIndex;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiFormatUtilBase;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -55,16 +57,16 @@ import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
|
||||
import javax.swing.*;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class PluginXmlDomInspection extends BasicDomElementsInspection<IdeaPlugin> {
|
||||
private static final Logger LOG = Logger.getInstance(PluginXmlDomInspection.class);
|
||||
|
||||
@NonNls
|
||||
private static final String PLUGIN_ICON_SVG_FILENAME = "pluginIcon.svg";
|
||||
|
||||
public List<String> myRegistrationCheckIgnoreClassList = new ExternalizableStringSet();
|
||||
|
||||
|
||||
@@ -96,6 +98,7 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection<IdeaPlugi
|
||||
if (module != null) {
|
||||
annotateIdeaPlugin((IdeaPlugin)element, holder, module);
|
||||
checkJetBrainsPlugin((IdeaPlugin)element, holder, module);
|
||||
checkPluginIcon((IdeaPlugin)element, holder, module);
|
||||
}
|
||||
}
|
||||
else if (element instanceof Extension) {
|
||||
@@ -222,6 +225,18 @@ public class PluginXmlDomInspection extends BasicDomElementsInspection<IdeaPlugi
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkPluginIcon(IdeaPlugin ideaPlugin, DomElementAnnotationHolder holder, Module module) {
|
||||
if (!hasRealPluginId(ideaPlugin)) return;
|
||||
|
||||
Collection<VirtualFile> pluginIconFiles =
|
||||
FilenameIndex.getVirtualFilesByName(module.getProject(), PLUGIN_ICON_SVG_FILENAME, GlobalSearchScope.moduleScope(module));
|
||||
if (pluginIconFiles.isEmpty()) {
|
||||
holder.createProblem(ideaPlugin, ProblemHighlightType.WEAK_WARNING,
|
||||
DevKitBundle.message("inspections.plugin.xml.no.plugin.icon.svg.file", PLUGIN_ICON_SVG_FILENAME),
|
||||
null);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean hasRealPluginId(IdeaPlugin ideaPlugin) {
|
||||
String pluginId = ideaPlugin.getPluginId();
|
||||
return pluginId != null && !pluginId.equals(PluginManagerCore.CORE_PLUGIN_ID);
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<idea-plugin>
|
||||
<id>plugin.with.icon</id>
|
||||
<name>Icon was found</name>
|
||||
<vendor>Icons Inc.</vendor>
|
||||
<version>1.0</version>
|
||||
</idea-plugin>
|
||||
@@ -0,0 +1,6 @@
|
||||
<<weak_warning descr="Plugin should provide 'pluginIcon.svg' (Documentation)">idea-plugin</weak_warning>>
|
||||
<id>plugin.without.icon</id>
|
||||
<name>No Icon</name>
|
||||
<vendor>Icons Inc.</vendor>
|
||||
<version>1.0</version>
|
||||
</idea-plugin>
|
||||
+42
-29
@@ -229,33 +229,33 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
myFixture.complete(CompletionType.SMART)
|
||||
assertSameElements(myFixture.lookupElementStrings, ['foo.bar.BarAction', 'foo.goo.GooAction'])
|
||||
assertNull(toString(myFixture.lookup.advertisements),
|
||||
myFixture.lookup.advertisements.find { it.contains('to see inheritors of com.intellij.openapi.actionSystem.AnAction') })
|
||||
myFixture.lookup.advertisements.find { it.contains('to see inheritors of com.intellij.openapi.actionSystem.AnAction') })
|
||||
}
|
||||
|
||||
void testExtensionsSpecifyDefaultExtensionNs() {
|
||||
myFixture.testHighlighting("extensionsSpecifyDefaultExtensionNs.xml")
|
||||
doHighlightingTest("extensionsSpecifyDefaultExtensionNs.xml")
|
||||
}
|
||||
|
||||
void testDeprecatedExtensionAttribute() {
|
||||
myFixture.enableInspections(DeprecatedClassUsageInspection.class)
|
||||
myFixture.testHighlighting("deprecatedExtensionAttribute.xml", "MyExtBean.java")
|
||||
doHighlightingTest("deprecatedExtensionAttribute.xml", "MyExtBean.java")
|
||||
}
|
||||
|
||||
void testDeprecatedAttributes() {
|
||||
myFixture.testHighlighting("deprecatedAttributes.xml")
|
||||
doHighlightingTest("deprecatedAttributes.xml")
|
||||
}
|
||||
|
||||
void testExtensionAttributeDeclaredUsingAccessors() {
|
||||
myFixture.testHighlighting("extensionAttributeWithAccessors.xml", "ExtBeanWithAccessors.java")
|
||||
doHighlightingTest("extensionAttributeWithAccessors.xml", "ExtBeanWithAccessors.java")
|
||||
}
|
||||
|
||||
void testExtensionWithInnerTags() {
|
||||
myFixture.testHighlighting("extensionWithInnerTags.xml", "ExtBeanWithInnerTags.java")
|
||||
doHighlightingTest("extensionWithInnerTags.xml", "ExtBeanWithInnerTags.java")
|
||||
}
|
||||
|
||||
void testLanguageAttributeHighlighting() {
|
||||
configureLanguageAttributeTest()
|
||||
myFixture.testHighlighting("languageAttribute.xml", "MyLanguageAttributeEPBean.java")
|
||||
doHighlightingTest("languageAttribute.xml", "MyLanguageAttributeEPBean.java")
|
||||
}
|
||||
|
||||
void testLanguageAttributeCompletion() {
|
||||
@@ -292,36 +292,36 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
"public class MyIcons {" +
|
||||
" public static final javax.swing.Icon MyCustomIcon = null; " +
|
||||
"}")
|
||||
myFixture.testHighlighting("iconAttribute.xml",
|
||||
"MyIconAttributeEPBean.java")
|
||||
doHighlightingTest("iconAttribute.xml",
|
||||
"MyIconAttributeEPBean.java")
|
||||
}
|
||||
|
||||
void testPluginWithModules() {
|
||||
myFixture.testHighlighting("pluginWithModules.xml")
|
||||
doHighlightingTest("pluginWithModules.xml")
|
||||
}
|
||||
|
||||
void testPluginWith99InUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWith99InUntilBuild.xml")
|
||||
doHighlightingTest("pluginWith99InUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testPluginWith9999InUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWith9999InUntilBuild.xml")
|
||||
doHighlightingTest("pluginWith9999InUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testPluginForOldIdeWith9999InUntilBuild() {
|
||||
myFixture.testHighlighting("pluginForOldIdeWith9999InUntilBuild.xml")
|
||||
doHighlightingTest("pluginForOldIdeWith9999InUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testPluginWith10000InUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWith10000InUntilBuild.xml")
|
||||
doHighlightingTest("pluginWith10000InUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testPluginWithStarInUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWithStarInUntilBuild.xml")
|
||||
doHighlightingTest("pluginWithStarInUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testPluginWithBranchNumberInUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWithBranchNumberInUntilBuild.xml")
|
||||
doHighlightingTest("pluginWithBranchNumberInUntilBuild.xml")
|
||||
}
|
||||
|
||||
void testReplaceBigNumberInUntilBuildWithStarQuickFix() {
|
||||
@@ -331,7 +331,7 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
}
|
||||
|
||||
void testPluginWithXInclude() {
|
||||
myFixture.testHighlighting("pluginWithXInclude.xml", "pluginWithXInclude-extensionPoints.xml")
|
||||
doHighlightingTest("pluginWithXInclude.xml", "pluginWithXInclude-extensionPoints.xml")
|
||||
}
|
||||
|
||||
void testPluginXmlInIdeaProjectWithoutVendor() {
|
||||
@@ -364,7 +364,7 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
}
|
||||
|
||||
void testOrderAttributeHighlighting() {
|
||||
myFixture.testHighlighting("orderAttributeHighlighting.xml")
|
||||
doHighlightingTest("orderAttributeHighlighting.xml")
|
||||
}
|
||||
|
||||
// separate tests for 'order' attribute completion because cannot test all cases with completeBasicAllCarets
|
||||
@@ -409,7 +409,7 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
private void testHighlightingInIdeaProject(String path) {
|
||||
PsiUtil.markAsIdeaProject(project, true)
|
||||
try {
|
||||
myFixture.testHighlighting(path)
|
||||
doHighlightingTest(path)
|
||||
}
|
||||
finally {
|
||||
PsiUtil.markAsIdeaProject(project, false)
|
||||
@@ -421,7 +421,7 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase {
|
||||
import com.intellij.openapi.diagnostic.ErrorReportSubmitter;
|
||||
public class MyErrorHandler extends ErrorReportSubmitter {}
|
||||
""")
|
||||
myFixture.testHighlighting("errorHandlerExtensionInJetBrainsPlugin.xml")
|
||||
doHighlightingTest("errorHandlerExtensionInJetBrainsPlugin.xml")
|
||||
}
|
||||
|
||||
void testErrorHandlerExtensionInNonJetBrainsPlugin() {
|
||||
@@ -429,7 +429,7 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
|
||||
import com.intellij.openapi.diagnostic.ErrorReportSubmitter;
|
||||
public class MyErrorHandler extends ErrorReportSubmitter {}
|
||||
""")
|
||||
myFixture.testHighlighting("errorHandlerExtensionInNonJetBrainsPlugin.xml")
|
||||
doHighlightingTest("errorHandlerExtensionInNonJetBrainsPlugin.xml")
|
||||
}
|
||||
|
||||
void testExtensionPointPresentation() {
|
||||
@@ -471,11 +471,11 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
|
||||
}
|
||||
|
||||
void testExtensionPointNameValidity() {
|
||||
myFixture.testHighlighting(getTestName(true) + ".xml")
|
||||
doHighlightingTest(getTestName(true) + ".xml")
|
||||
}
|
||||
|
||||
void testExtensionPointValidity() {
|
||||
myFixture.testHighlighting(getTestName(true) + ".xml")
|
||||
doHighlightingTest(getTestName(true) + ".xml")
|
||||
}
|
||||
|
||||
void testRegistrationCheck() {
|
||||
@@ -522,26 +522,39 @@ public class MyErrorHandler extends ErrorReportSubmitter {}
|
||||
}
|
||||
|
||||
void testValuesMaxLengths() {
|
||||
myFixture.testHighlighting("ValuesMaxLengths.xml")
|
||||
doHighlightingTest("ValuesMaxLengths.xml")
|
||||
}
|
||||
|
||||
void testValuesRequired() {
|
||||
myFixture.testHighlighting("ValuesRequired.xml")
|
||||
doHighlightingTest("ValuesRequired.xml")
|
||||
}
|
||||
|
||||
void testValuesTemplateTexts() {
|
||||
myFixture.testHighlighting("ValuesTemplateTexts.xml")
|
||||
doHighlightingTest("ValuesTemplateTexts.xml")
|
||||
}
|
||||
|
||||
void testPluginWithSinceBuildGreaterThanUntilBuild() {
|
||||
myFixture.testHighlighting("pluginWithSinceBuildGreaterThanUntilBuild.xml")
|
||||
doHighlightingTest("pluginWithSinceBuildGreaterThanUntilBuild.xml")
|
||||
}
|
||||
|
||||
private void doHighlightingTest(String... filePaths) {
|
||||
myFixture.testHighlighting(true, false, false, filePaths)
|
||||
}
|
||||
|
||||
void testProductDescriptor() {
|
||||
myFixture.testHighlighting("productDescriptorInvalid.xml")
|
||||
doHighlightingTest("productDescriptorInvalid.xml")
|
||||
}
|
||||
|
||||
void testProductDescriptorInvalid() {
|
||||
myFixture.testHighlighting("productDescriptorInvalid.xml")
|
||||
doHighlightingTest("productDescriptorInvalid.xml")
|
||||
}
|
||||
|
||||
void testPluginIconFound() {
|
||||
myFixture.addFileToProject("pluginIcon.svg", "fake SVG")
|
||||
myFixture.testHighlighting(true, true, true, "pluginIconFound.xml")
|
||||
}
|
||||
|
||||
void testPluginIconNotFound() {
|
||||
myFixture.testHighlighting(true, true, true, "pluginIconNotFound.xml")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user