DevKit: ComponentRegistrationModuleChecker and registration quickfix test

This commit is contained in:
Yaroslav Pankratyev
2018-05-24 16:00:28 +07:00
parent 5dd19aae2c
commit ca07d3a351
9 changed files with 101 additions and 0 deletions
@@ -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
}
@@ -0,0 +1,3 @@
public class DependencyModuleClass {
}
@@ -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");
}
@@ -0,0 +1,8 @@
<idea-plugin>
<extensionPoints>
<extensionPoint name="myDependencyModuleClassWithEpNameEp" interface="DependencyModuleClassWithEpName"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<myPlugin.myDependencyModuleClassEp implementation="DependencyModuleClass"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,3 @@
public class MainModuleClass {
}
@@ -0,0 +1,16 @@
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.intellij.myPlugin</id>
<xi:include href="/idea/JavaActions.xml" xpointer="xpointer(/idea-plugin/*)"/>
<extensionPoints>
<extensionPoint name="myMainModuleClassEp" interface="MainModuleClass"/>
<extensionPoint name="myDependencyModuleClassEp" interface="DependencyModuleClass"/>
<<error descr="Element should be registered in DependencyModulePlugin.xml">extensionPoint</error> name="myDependencyModuleClassWithEpNameEp" interface="DependencyModuleClassWithEpName"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<myPlugin.myMainModuleClassEp implementation="MainModuleClass"/>
<<error descr="Element should be registered in DependencyModulePlugin.xml">myPlugin.myDependencyModuleClassEp</error> implementation="DependencyModuleClass"/>
</extensions>
</idea-plugin>
@@ -0,0 +1,14 @@
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.intellij.myPlugin</id>
<xi:include href="/idea/JavaActions.xml" xpointer="xpointer(/idea-plugin/*)"/>
<extensionPoints>
<extensionPoint name="myMainModuleClassEp" interface="MainModuleClass"/>
<extensionPoint name="myDependencyModuleClassEp" interface="DependencyModuleClass"/>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<myPlugin.myMainModuleClassEp implementation="MainModuleClass"/>
</extensions>
</idea-plugin>
@@ -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)
}
}