From 571fe5666267ef0d27f890a1c64aec9652d8c111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Thu, 22 Jul 2021 17:03:55 +0200 Subject: [PATCH] IDEA-274173 plugin.xml cannot have both dependencies and depends tags GitOrigin-RevId: a8f6254b7b9a3dadede071524b3196500940239a --- .../resources/messages/DevKitBundle.properties | 1 + .../src/inspections/PluginXmlDomInspection.java | 10 ++++++++++ .../testData/codeInsight/ExtensionsDependencies.xml | 6 ++++++ .../devkit/codeInsight/PluginXmlFunctionalTest.groovy | 1 + 4 files changed, 18 insertions(+) diff --git a/plugins/devkit/devkit-core/resources/messages/DevKitBundle.properties b/plugins/devkit/devkit-core/resources/messages/DevKitBundle.properties index d9ba31411872..5ee6aa545a80 100644 --- a/plugins/devkit/devkit-core/resources/messages/DevKitBundle.properties +++ b/plugins/devkit/devkit-core/resources/messages/DevKitBundle.properties @@ -257,6 +257,7 @@ inspections.plugin.xml.module.descriptor.package.does.not.match=Package ''{0}'' inspections.plugin.xml.module.descriptor.at.least.one.dependency=At least one entry must be defined inspections.plugin.xml.dependency.descriptor.at.least.one.dependency=At least one or dependency must be defined inspections.plugin.xml.dependency.class.located.in.wrong.package=Class ''{0}'' must be located in package ''{1}'' +inspections.plugin.xml.dependency.descriptor.cannot.use.depends=Cannot use in addition to inspections.registration.problems.name=Component type mismatch inspections.registration.problems.option.check.plugin.xml=Check Plugin Descriptor (plugin.xml) diff --git a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java index d45f510964c6..9916fd9bead6 100644 --- a/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java +++ b/plugins/devkit/devkit-core/src/inspections/PluginXmlDomInspection.java @@ -253,6 +253,16 @@ public final class PluginXmlDomInspection extends DevKitPluginXmlInspectionBase descriptor.getPlugin().isEmpty()) { holder.createProblem(descriptor, HighlightSeverity.ERROR, DevKitBundle.message("inspections.plugin.xml.dependency.descriptor.at.least.one.dependency")); + return; + } + + final IdeaPlugin ideaPlugin = descriptor.getParentOfType(IdeaPlugin.class, false); + assert ideaPlugin != null; + for (Dependency dependency : ideaPlugin.getDepends()) { + if (dependency.getOptional().getValue() == Boolean.TRUE) continue; + highlightRedundant(dependency, + DevKitBundle.message("inspections.plugin.xml.dependency.descriptor.cannot.use.depends"), + ProblemHighlightType.GENERIC_ERROR, holder); } } diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/ExtensionsDependencies.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/ExtensionsDependencies.xml index cda00961cb9c..502739dc6b52 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/ExtensionsDependencies.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/ExtensionsDependencies.xml @@ -31,4 +31,10 @@ + + + com.intellij.myPlugin + + com.intellij.myPlugin + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy index 01c0c37e1df3..96130b2e7144 100644 --- a/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy +++ b/plugins/devkit/devkit-java-tests/testSrc/org/jetbrains/idea/devkit/codeInsight/PluginXmlFunctionalTest.groovy @@ -205,6 +205,7 @@ class PluginXmlFunctionalTest extends JavaCodeInsightFixtureTestCase { myFixture.copyFileToProject("ExtensionsDependencies-content.subDescriptor.xml", "/ExtensionsDependencies-content/ExtensionsDependencies-content.subDescriptor.xml") + myFixture.addFileToProject("dummy-descriptor.xml","") doHighlightingTest("ExtensionsDependencies.xml", "ExtensionsDependencies-plugin.xml")