From 3166bc2b01db21bfe4917e02254b43aca8c5e2f8 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Mon, 1 Sep 2025 17:19:28 +0200 Subject: [PATCH] [devkit] IJPL-194034: Do not report descriptor included via xi:included GitOrigin-RevId: 85716b6370296b21f8feb51cb821c3bde94a783f --- .../ModuleNotRegisteredAsPluginContentInspection.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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))