From 5bec3ab17700929656eaddf88587cde33a970f51 Mon Sep 17 00:00:00 2001 From: Yuriy Artamonov Date: Tue, 2 Dec 2025 16:57:10 +0100 Subject: [PATCH] [devkit] IJPL-204967 False-positive errors in injected fragments with DOM model (cherry picked from commit 21eaad352df56c7d1b6ada045f4c6f052351f4ed) IJ-CR-184592 GitOrigin-RevId: 6c03092db3b50968beb02e56c10f57ae076579dd --- .../src/dom/impl/ExtensionsDomExtender.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/plugins/devkit/devkit-core/src/dom/impl/ExtensionsDomExtender.java b/plugins/devkit/devkit-core/src/dom/impl/ExtensionsDomExtender.java index 07901961dad6..6832b22f001d 100644 --- a/plugins/devkit/devkit-core/src/dom/impl/ExtensionsDomExtender.java +++ b/plugins/devkit/devkit-core/src/dom/impl/ExtensionsDomExtender.java @@ -2,6 +2,7 @@ package org.jetbrains.idea.devkit.dom.impl; import com.intellij.ide.plugins.PluginManagerCore; +import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -30,6 +31,8 @@ import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import java.util.*; import java.util.function.Supplier; +import static java.util.Collections.singleton; + public final class ExtensionsDomExtender extends DomExtender { private static final DomExtender EXTENSION_EXTENDER = new ExtensionDomExtender(); @@ -42,9 +45,20 @@ public final class ExtensionsDomExtender extends DomExtender { public void registerExtensions(final @NotNull Extensions extensions, final @NotNull DomExtensionsRegistrar registrar) { Project project = extensions.getManager().getProject(); VirtualFile currentFile = getVirtualFile(extensions); + if (currentFile == null || DumbService.isDumb(project)) return; - Set files = getVisibleFiles(project, currentFile); + Set files; + if (currentFile instanceof VirtualFileWithId) { + files = getVisibleFiles(project, currentFile); + } + else if (currentFile instanceof VirtualFileWindow) { + // injected code, consider it the context of all project files + files = new HashSet<>(PluginIdModuleIndex.getFiles(project, "")); + } + else { + return; + } String epPrefix = extensions.getEpPrefix(); Map> points = ExtensionPointIndex.getExtensionPoints(project, files, epPrefix); @@ -60,8 +74,7 @@ public final class ExtensionsDomExtender extends DomExtender { } private static @Nullable VirtualFile getVirtualFile(DomElement domElement) { - final VirtualFile file = DomUtil.getFile(domElement).getOriginalFile().getVirtualFile(); - return file instanceof VirtualFileWithId ? file : null; + return DomUtil.getFile(domElement).getOriginalFile().getVirtualFile(); } private static Set getVisibleFiles(Project project, @NotNull VirtualFile file) { @@ -98,7 +111,7 @@ public final class ExtensionsDomExtender extends DomExtender { Set result = new HashSet<>(); result.add(PluginManagerCore.CORE_PLUGIN_ID); - result.addAll(PluginIdDependenciesIndex.getPluginAndDependsIds(project, Collections.singleton(currentFile))); + result.addAll(PluginIdDependenciesIndex.getPluginAndDependsIds(project, singleton(currentFile))); final String pluginId = PluginIdDependenciesIndex.getPluginId(project, currentFile); if (pluginId != null) {