From 530092ee146e439c06d31bf84aaff840d06e073d Mon Sep 17 00:00:00 2001 From: Ilya Korennoy Date: Sat, 14 Feb 2026 09:29:47 +0400 Subject: [PATCH] IJPL-930 Do not cache getIn result for ModuleExportedDependenciesGraph GitOrigin-RevId: 029536e5bb8206a47d9018bf3c8af96f5b8bb7b8 --- .../module/ModuleExportedDependenciesGraph.kt | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/ModuleExportedDependenciesGraph.kt b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/ModuleExportedDependenciesGraph.kt index d7edce472319..fe51a3c2f693 100644 --- a/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/ModuleExportedDependenciesGraph.kt +++ b/platform/projectModel-impl/src/com/intellij/workspaceModel/ide/impl/legacyBridge/module/ModuleExportedDependenciesGraph.kt @@ -14,7 +14,6 @@ import com.intellij.platform.workspace.storage.EntityStorage import com.intellij.platform.workspace.storage.VersionedEntityStorage import com.intellij.util.graph.Graph import org.jetbrains.annotations.ApiStatus -import java.util.concurrent.ConcurrentHashMap /** * [Graph.getIn] returns [ModuleEntity] which depend on the given module taking into account exported dependencies. @@ -42,7 +41,6 @@ class ModuleExportedDependenciesGraph(project: Project) { fun buildGraph(storage: EntityStorage): Graph { return object : Graph { private val directDependents: Map> - private val cache = ConcurrentHashMap>() init { val dependentsMap = HashMap>() @@ -65,23 +63,21 @@ class ModuleExportedDependenciesGraph(project: Project) { } override fun getIn(node: ModuleEntity): Iterator { - return cache.computeIfAbsent(node) { - val result = HashSet() - val queue = ArrayDeque() - queue.add(node) + val result = HashSet() + val queue = ArrayDeque() + queue.add(node) - while (queue.isNotEmpty()) { - val current = queue.removeFirst() - val edges = directDependents[current.symbolicId] ?: emptyList() + while (queue.isNotEmpty()) { + val current = queue.removeFirst() + val edges = directDependents[current.symbolicId] ?: emptyList() - for (edge in edges) { - if (result.add(edge.dependent) && edge.exported) { - queue.add(edge.dependent) - } + for (edge in edges) { + if (result.add(edge.dependent) && edge.exported) { + queue.add(edge.dependent) } } - result - }.iterator() + } + return result.iterator() } override fun getOut(node: ModuleEntity): Iterator {