diff --git a/plugins/devkit/devkit-core/src/inspections/ModuleNotRegisteredAsPluginContentInspection.kt b/plugins/devkit/devkit-core/src/inspections/ModuleNotRegisteredAsPluginContentInspection.kt index 9079bf83b8b3..7a6494dd719f 100644 --- a/plugins/devkit/devkit-core/src/inspections/ModuleNotRegisteredAsPluginContentInspection.kt +++ b/plugins/devkit/devkit-core/src/inspections/ModuleNotRegisteredAsPluginContentInspection.kt @@ -15,7 +15,11 @@ import com.intellij.openapi.roots.ModuleRootManager import com.intellij.psi.PsiElementVisitor import com.intellij.psi.XmlElementVisitor import com.intellij.psi.createSmartPointer +import com.intellij.psi.search.searches.ReferencesSearch +import com.intellij.psi.util.parentOfType import com.intellij.psi.xml.XmlFile +import com.intellij.psi.xml.XmlTag +import com.intellij.xml.util.XmlUtil import org.jetbrains.idea.devkit.DevKitBundle import org.jetbrains.idea.devkit.dom.index.PluginIdDependenciesIndex import org.jetbrains.idea.devkit.util.DescriptorUtil @@ -26,7 +30,7 @@ internal class ModuleNotRegisteredAsPluginContentInspection : LocalInspectionToo override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor { return object : XmlElementVisitor() { override fun visitXmlFile(file: XmlFile) { - if (DescriptorUtil.isPluginModuleFile(file) && isNotReferencedAsContentModule(file)) { + if (DescriptorUtil.isPluginModuleFile(file) && isNotReferencedAsContentModule(file) && isNotXIncluded(file)) { val moduleName = getModuleName(file) holder.registerProblem( file, @@ -47,6 +51,13 @@ internal class ModuleNotRegisteredAsPluginContentInspection : LocalInspectionToo return PluginIdDependenciesIndex.findFilesIncludingContentModule(xmlFile.project, moduleVirtualFile).isEmpty() } + private fun isNotXIncluded(file: XmlFile): Boolean { + return !ReferencesSearch.search(file).anyMatch { + val xmlTag = it.element.parentOfType() ?: return@anyMatch false + xmlTag.namespace == XmlUtil.XINCLUDE_URI && xmlTag.localName == "include" + } + } + private fun fixIfPluginXmlFound(file: XmlFile, moduleName: String): Array { val (pluginXmlFile, pluginId) = findParentModuleWithPluginXml(file) ?: return LocalQuickFix.EMPTY_ARRAY return arrayOf(AddAsContentModuleFix(pluginXmlFile.createSmartPointer(), pluginId, moduleName))