From 9670de74f113809d63f57ed6733e59a353d4fbe4 Mon Sep 17 00:00:00 2001 From: strangepleasures Date: Tue, 12 Dec 2023 14:05:53 +0000 Subject: [PATCH] [AA] KT-61776 Use an implementation of library scope that is immune to Jar cache invalidations Merge-request: KT-MR-13356 Merged-by: Pavel Mikhailovskii --- .../structure/StandaloneProjectFactory.kt | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt index 96542a37b4b..76c7c4c98bf 100644 --- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt @@ -14,6 +14,7 @@ import com.intellij.ide.highlighter.JavaFileType import com.intellij.mock.MockProject import com.intellij.openapi.Disposable import com.intellij.openapi.extensions.PluginDescriptor +import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.roots.PackageIndex import com.intellij.openapi.util.io.FileUtil @@ -346,22 +347,30 @@ object StandaloneProjectFactory { roots: Collection, environment: KotlinCoreProjectEnvironment, ): GlobalSearchScope { - if (roots.isEmpty()) return GlobalSearchScope.EMPTY_SCOPE - val virtualFiles = getVirtualFilesForLibraryRootsRecursively(roots, environment) - return GlobalSearchScope.filesScope(environment.project, virtualFiles) - } + val virtualFileUrls = getVirtualFileUrlsForLibraryRootsRecursively(roots, environment) - fun getVirtualFilesForLibraryRootsRecursively( - roots: Collection, - environment: KotlinCoreProjectEnvironment, - ): Collection { - val virtualFilesByRoots = getVirtualFilesForLibraryRoots(roots, environment) - return buildList { - addAll(virtualFilesByRoots) - virtualFilesByRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) } + return object : GlobalSearchScope(environment.project) { + override fun contains(file: VirtualFile): Boolean = file.url in virtualFileUrls + + override fun isSearchInModuleContent(aModule: Module): Boolean = false + + override fun isSearchInLibraries(): Boolean = true + + override fun toString(): String = virtualFileUrls.toString() } } + private fun getVirtualFileUrlsForLibraryRootsRecursively( + roots: Collection, + environment: KotlinCoreProjectEnvironment, + ): Set = + buildSet { + for (root in getVirtualFilesForLibraryRoots(roots, environment)) { + LibraryUtils.getAllVirtualFilesFromRoot(root, includeRoot = true) + .mapTo(this) { it.url } + } + } + fun getVirtualFilesForLibraryRoots( roots: Collection, environment: KotlinCoreProjectEnvironment,