From 2d6fe7b7f40bfe24b087f607836b5e603cb00ec0 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 1 Apr 2019 16:05:53 +0300 Subject: [PATCH] devkit: don't highlight language extensions which use common classes as errors in plugin.xml (IDEA-210145) --- .../inspections/ComponentModuleRegistrationChecker.kt | 8 ++++++++ .../dependencyModule/DependencyModulePlugin.xml | 8 ++++++++ .../dependencyModule/DependencyModulePlugin_after.xml | 8 ++++++++ .../dependencyModule/MyLanguageExtension.java | 1 + .../dependencyModule/MyLanguageExtensionPoint.java | 2 ++ .../registrationCheck/module/MainModulePlugin.xml | 4 ++++ .../module/MainModulePlugin_after.xml | 2 ++ .../devkit/codeInsight/PluginXmlFunctionalTest.groovy | 10 +++++++++- 8 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtension.java create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtensionPoint.java diff --git a/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt b/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt index dd4adf21834d..9236cb502f61 100644 --- a/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt +++ b/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt @@ -20,6 +20,7 @@ import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.PsiSearchHelper import com.intellij.psi.search.UsageSearchContext +import com.intellij.psi.util.InheritanceUtil import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.xml.XmlFile import com.intellij.psi.xml.XmlTag @@ -86,6 +87,13 @@ class ComponentModuleRegistrationChecker(private val moduleToModuleSet: AtomicCl } fun checkProperXmlFileForExtension(element: Extension) { + if (!element.xmlTag.getAttributeValue("language").isNullOrEmpty()) { + val beanClass = element.extensionPoint?.beanClass?.value + if (beanClass != null && InheritanceUtil.isInheritor(beanClass, "com.intellij.lang.LanguageExtensionPoint")) { + return + } + } + for (attributeDescription in element.genericInfo.attributeChildrenDescriptions) { val attributeName = attributeDescription.name if (attributeName == "forClass") continue diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml index 6fb76a66265d..7c4937a7ef1c 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml @@ -1,2 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml index 97e155872dfb..233138e2baad 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml @@ -1,8 +1,16 @@ + + + + + + + + diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtension.java b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtension.java new file mode 100644 index 000000000000..961e28384332 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtension.java @@ -0,0 +1 @@ +public class MyLanguageExtension {} \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtensionPoint.java b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtensionPoint.java new file mode 100644 index 000000000000..dbd1b415e922 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/MyLanguageExtensionPoint.java @@ -0,0 +1,2 @@ +public class MyLanguageExtensionPoint extends com.intellij.lang.LanguageExtensionPoint { +} \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml index 70e4391614cb..f9bf9a1945a9 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml @@ -14,6 +14,10 @@ + + + <myPlugin.lang.myExtPoint language="" implementationClass="MyLanguageExtension"/> + <myPlugin.lang.myOwnExtPoint language="" implementationClass="MyLanguageExtension"/> <myPlugin.myDependencyModuleClassEp implementation="DependencyModuleClass"/> diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml index 9b8f37c712a0..3f8a5363d5a5 100644 --- a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml @@ -13,6 +13,8 @@ + + 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 76c021b9e83d..0508da4fbdf3 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 @@ -545,11 +545,13 @@ public class MyErrorHandler extends ErrorReportSubmitter {} } void testRegistrationCheck() { + configureLanguageAttributeTest() Module anotherModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, "anotherModule", myTempDirFixture.findOrCreateDir("../anotherModuleDir")) ModuleRootModificationUtil.addModuleLibrary(anotherModule, VfsUtil.getUrlForLibraryRoot(new File(PathUtil.getJarPathForClass(AnAction.class)))) Module additionalModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, "additionalModule", myTempDirFixture.findOrCreateDir("../additionalModuleDir")) + ModuleRootModificationUtil.addModuleLibrary(anotherModule, VfsUtil.getUrlForLibraryRoot(new File(PathUtil.getJarPathForClass(LanguageExtensionPoint.class)))) ModuleRootModificationUtil.addDependency(myModule, anotherModule) ModuleRootModificationUtil.addDependency(myModule, additionalModule) def moduleSet = new PluginXmlDomInspection.PluginModuleSet() @@ -559,6 +561,10 @@ public class MyErrorHandler extends ErrorReportSubmitter {} def dependencyModuleClass = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModuleClass.java", "../anotherModuleDir/DependencyModuleClass.java") + def dependencyModuleLanguageExtensionClass = myFixture.copyFileToProject("registrationCheck/dependencyModule/MyLanguageExtension.java", + "../anotherModuleDir/MyLanguageExtension.java") + def dependencyModuleLanguageExtensionPointClass = myFixture.copyFileToProject("registrationCheck/dependencyModule/MyLanguageExtensionPoint.java", + "../anotherModuleDir/MyLanguageExtensionPoint.java") def dependencyModuleActionClass = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModuleAction.java", "../anotherModuleDir/DependencyModuleAction.java") def dependencyModuleClassWithEp = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java", @@ -573,6 +579,8 @@ public class MyErrorHandler extends ErrorReportSubmitter {} "META-INF/MainModulePlugin.xml") myFixture.configureFromExistingVirtualFile(dependencyModuleClass) + myFixture.configureFromExistingVirtualFile(dependencyModuleLanguageExtensionClass) + myFixture.configureFromExistingVirtualFile(dependencyModuleLanguageExtensionPointClass) myFixture.configureFromExistingVirtualFile(dependencyModuleActionClass) myFixture.configureFromExistingVirtualFile(dependencyModuleClassWithEp) myFixture.configureFromExistingVirtualFile(dependencyModulePlugin) @@ -583,7 +591,7 @@ public class MyErrorHandler extends ErrorReportSubmitter {} myFixture.testHighlighting(true, false, false, dependencyModulePlugin) myFixture.testHighlighting(true, false, false, mainModulePlugin) def highlightInfos = myFixture.doHighlighting(HighlightSeverity.WARNING) - assertSize(3, highlightInfos) + assertSize(5, highlightInfos) for (info in highlightInfos) { def ranges = info.quickFixActionRanges