mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
devkit: don't highlight language extensions which use common classes as errors in plugin.xml (IDEA-210145)
This commit is contained in:
@@ -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
|
||||
|
||||
+8
@@ -1,2 +1,10 @@
|
||||
<idea-plugin>
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="com.intellij.myPlugin.lang.myExtPoint" beanClass="com.intellij.lang.LanguageExtensionPoint">
|
||||
<with attribute="implementationClass" implements="MyLanguageExtension"/>
|
||||
</extensionPoint>
|
||||
<extensionPoint qualifiedName="com.intellij.myPlugin.lang.myOwnExtPoint" beanClass="MyLanguageExtensionPoint">
|
||||
<with attribute="implementationClass" implements="MyLanguageExtension"/>
|
||||
</extensionPoint>
|
||||
</extensionPoints>
|
||||
</idea-plugin>
|
||||
+8
@@ -1,8 +1,16 @@
|
||||
<idea-plugin>
|
||||
<extensionPoints>
|
||||
<extensionPoint qualifiedName="com.intellij.myPlugin.lang.myExtPoint" beanClass="com.intellij.lang.LanguageExtensionPoint">
|
||||
<with attribute="implementationClass" implements="MyLanguageExtension"/>
|
||||
</extensionPoint>
|
||||
<extensionPoint qualifiedName="com.intellij.myPlugin.lang.myOwnExtPoint" beanClass="MyLanguageExtensionPoint">
|
||||
<with attribute="implementationClass" implements="MyLanguageExtension"/>
|
||||
</extensionPoint>
|
||||
<extensionPoint name="myDependencyModuleClassWithEpNameEp" interface="DependencyModuleClassWithEpName"/>
|
||||
</extensionPoints>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<myPlugin.lang.myExtPoint language="" implementationClass="MyLanguageExtension"/>
|
||||
<myPlugin.lang.myOwnExtPoint language="" implementationClass="MyLanguageExtension"/>
|
||||
<myPlugin.myDependencyModuleClassEp implementation="DependencyModuleClass"/>
|
||||
</extensions>
|
||||
<actions>
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
public class MyLanguageExtension {}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
public class MyLanguageExtensionPoint extends com.intellij.lang.LanguageExtensionPoint {
|
||||
}
|
||||
+4
@@ -14,6 +14,10 @@
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<myPlugin.myMainModuleClassEp implementation="MainModuleClass"/>
|
||||
<myPlugin.lang.myExtPoint language="MyLanguageID" implementationClass="MyLanguageExtension"/>
|
||||
<myPlugin.lang.myOwnExtPoint language="MyLanguageID" implementationClass="MyLanguageExtension"/>
|
||||
<<error descr="Element should be registered in 'anotherModule' module where its class 'MyLanguageExtension' is defined">myPlugin.lang.myExtPoint</error> language="" implementationClass="MyLanguageExtension"/>
|
||||
<<error descr="Element should be registered in 'anotherModule' module where its class 'MyLanguageExtension' is defined">myPlugin.lang.myOwnExtPoint</error> language="" implementationClass="MyLanguageExtension"/>
|
||||
<<error descr="Element should be registered in 'anotherModule' module where its class 'DependencyModuleClass' is defined">myPlugin.myDependencyModuleClassEp</error> implementation="DependencyModuleClass"/>
|
||||
</extensions>
|
||||
|
||||
|
||||
+2
@@ -13,6 +13,8 @@
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<myPlugin.myMainModuleClassEp implementation="MainModuleClass"/>
|
||||
<myPlugin.lang.myExtPoint language="MyLanguageID" implementationClass="MyLanguageExtension"/>
|
||||
<myPlugin.lang.myOwnExtPoint language="MyLanguageID" implementationClass="MyLanguageExtension"/>
|
||||
</extensions>
|
||||
|
||||
<actions>
|
||||
|
||||
+9
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user