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