mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
DevKit: ComponentRegistrationModuleChecker and registration quickfix test
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class DependencyModuleClass {
|
||||
|
||||
}
|
||||
+4
@@ -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");
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
<idea-plugin>
|
||||
</idea-plugin>
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
<idea-plugin>
|
||||
<extensionPoints>
|
||||
<extensionPoint name="myDependencyModuleClassWithEpNameEp" interface="DependencyModuleClassWithEpName"/>
|
||||
</extensionPoints>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<myPlugin.myDependencyModuleClassEp implementation="DependencyModuleClass"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
public class MainModuleClass {
|
||||
|
||||
}
|
||||
+16
@@ -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>
|
||||
+14
@@ -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>
|
||||
+47
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user