From ca07d3a351fabfbcb71f49e526ac4c764848bc55 Mon Sep 17 00:00:00 2001 From: Yaroslav Pankratyev Date: Thu, 24 May 2018 15:57:47 +0700 Subject: [PATCH] DevKit: ComponentRegistrationModuleChecker and registration quickfix test --- .../ComponentModuleRegistrationChecker.kt | 4 ++ .../DependencyModuleClass.java | 3 ++ .../DependencyModuleClassWithEpName.java | 4 ++ .../DependencyModulePlugin.xml | 2 + .../DependencyModulePlugin_after.xml | 8 ++++ .../module/MainModuleClass.java | 3 ++ .../module/MainModulePlugin.xml | 16 +++++++ .../module/MainModulePlugin_after.xml | 14 ++++++ .../PluginXmlFunctionalTest.groovy | 47 +++++++++++++++++++ 9 files changed, 101 insertions(+) create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClass.java create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModuleClass.java create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml create mode 100644 plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml diff --git a/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt b/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt index c55bef204e98..df997ab1fd4c 100644 --- a/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt +++ b/plugins/devkit/devkit-core/src/inspections/ComponentModuleRegistrationChecker.kt @@ -6,6 +6,7 @@ package org.jetbrains.idea.devkit.inspections import com.intellij.codeInspection.LocalQuickFix import com.intellij.codeInspection.ProblemDescriptor import com.intellij.codeInspection.ProblemHighlightType +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager @@ -143,6 +144,9 @@ private fun checkProperXmlFileForDefinition(element: DomElement, } fun isIdeaPlatformModule(module: Module?): Boolean { + if (ApplicationManager.getApplication().isUnitTestMode) { + return true + } if (module == null || !PsiUtil.isIdeaProject(module.project)) { return false } diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClass.java b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClass.java new file mode 100644 index 000000000000..a09a52d2cc38 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClass.java @@ -0,0 +1,3 @@ +public class DependencyModuleClass { + +} \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java new file mode 100644 index 000000000000..ab091f66eced --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java @@ -0,0 +1,4 @@ +public class DependencyModuleClassWithEpName { + public static final com.intellij.openapi.extensions.ExtensionPointName EP_NAME = + com.intellij.openapi.extensions.ExtensionPointName.create("com.intellij.myPlugin.myDependencyModuleClassWithEpNameEp"); +} \ No newline at end of file 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 new file mode 100644 index 000000000000..6fb76a66265d --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin.xml @@ -0,0 +1,2 @@ + + \ 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 new file mode 100644 index 000000000000..d325b961b4b1 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/dependencyModule/DependencyModulePlugin_after.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModuleClass.java b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModuleClass.java new file mode 100644 index 000000000000..089328121306 --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModuleClass.java @@ -0,0 +1,3 @@ +public class MainModuleClass { + +} \ 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 new file mode 100644 index 000000000000..539d3c32715e --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin.xml @@ -0,0 +1,16 @@ + + com.intellij.myPlugin + + + + + + <extensionPoint name="myDependencyModuleClassWithEpNameEp" interface="DependencyModuleClassWithEpName"/> + + + + + <myPlugin.myDependencyModuleClassEp implementation="DependencyModuleClass"/> + + + \ No newline at end of file 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 new file mode 100644 index 000000000000..328428677f8c --- /dev/null +++ b/plugins/devkit/devkit-java-tests/testData/codeInsight/registrationCheck/module/MainModulePlugin_after.xml @@ -0,0 +1,14 @@ + + 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 20530d81da8c..e3d110f9d4fb 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 @@ -11,8 +11,12 @@ import com.intellij.codeInsight.lookup.LookupElementPresentation import com.intellij.codeInspection.xml.DeprecatedClassUsageInspection import com.intellij.diagnostic.ITNReporter import com.intellij.lang.LanguageExtensionPoint +import com.intellij.lang.annotation.HighlightSeverity import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.extensions.LoadingOrder +import com.intellij.openapi.module.Module +import com.intellij.openapi.module.StdModuleTypes +import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.psi.ElementDescriptionUtil import com.intellij.psi.PsiElement import com.intellij.testFramework.PsiTestUtil @@ -468,4 +472,47 @@ public class MyErrorHandler extends ErrorReportSubmitter {} void testExtensionPointNameValidity() { myFixture.testHighlighting(getTestName(true) + ".xml") } + + void testRegistrationCheck() { + Module anotherModule = PsiTestUtil.addModule(getProject(), StdModuleTypes.JAVA, "anotherModule", + myTempDirFixture.findOrCreateDir("../anotherModuleDir")) + ModuleRootModificationUtil.addDependency(myModule, anotherModule) + + def dependencyModuleClass = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModuleClass.java", + "../anotherModuleDir/DependencyModuleClass.java") + def dependencyModuleClassWithEp = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModuleClassWithEpName.java", + "../anotherModuleDir/DependencyModuleClassWithEpName.java") + def dependencyModulePlugin = myFixture.copyFileToProject("registrationCheck/dependencyModule/DependencyModulePlugin.xml", + "../anotherModuleDir/META-INF/DependencyModulePlugin.xml") + def mainModuleClass = myFixture.copyFileToProject("registrationCheck/module/MainModuleClass.java", + "MainModuleClass.java") + def mainModulePlugin = myFixture.copyFileToProject("registrationCheck/module/MainModulePlugin.xml", + "META-INF/MainModulePlugin.xml") + + myFixture.configureFromExistingVirtualFile(dependencyModuleClass) + myFixture.configureFromExistingVirtualFile(dependencyModuleClassWithEp) + myFixture.configureFromExistingVirtualFile(dependencyModulePlugin) + myFixture.configureFromExistingVirtualFile(mainModuleClass) + myFixture.configureFromExistingVirtualFile(mainModulePlugin) + + myFixture.testHighlighting(true, false, false, dependencyModulePlugin) + myFixture.testHighlighting(true, false, false, mainModulePlugin) + def highlightInfos = myFixture.doHighlighting(HighlightSeverity.WARNING) + assertSize(2, highlightInfos) + + for (info in highlightInfos) { + def ranges = info.quickFixActionRanges + assertNotNull(ranges) + assertSize(1, ranges) + def quickFix = ranges.get(0).getFirst().getAction() + myFixture.launchAction(quickFix) + } + + myFixture.checkResultByFile("../anotherModuleDir/META-INF/DependencyModulePlugin.xml", + "registrationCheck/dependencyModule/DependencyModulePlugin_after.xml", + true) + myFixture.checkResultByFile("META-INF/MainModulePlugin.xml", + "registrationCheck/module/MainModulePlugin_after.xml", + true) + } }