[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 <Pavel.Mikhailovskii@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
b5d8db0267
commit
9670de74f1
+21
-12
@@ -14,6 +14,7 @@ import com.intellij.ide.highlighter.JavaFileType
|
|||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.extensions.PluginDescriptor
|
import com.intellij.openapi.extensions.PluginDescriptor
|
||||||
|
import com.intellij.openapi.module.Module
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.PackageIndex
|
import com.intellij.openapi.roots.PackageIndex
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
@@ -346,22 +347,30 @@ object StandaloneProjectFactory {
|
|||||||
roots: Collection<Path>,
|
roots: Collection<Path>,
|
||||||
environment: KotlinCoreProjectEnvironment,
|
environment: KotlinCoreProjectEnvironment,
|
||||||
): GlobalSearchScope {
|
): GlobalSearchScope {
|
||||||
if (roots.isEmpty()) return GlobalSearchScope.EMPTY_SCOPE
|
val virtualFileUrls = getVirtualFileUrlsForLibraryRootsRecursively(roots, environment)
|
||||||
val virtualFiles = getVirtualFilesForLibraryRootsRecursively(roots, environment)
|
|
||||||
return GlobalSearchScope.filesScope(environment.project, virtualFiles)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getVirtualFilesForLibraryRootsRecursively(
|
return object : GlobalSearchScope(environment.project) {
|
||||||
roots: Collection<Path>,
|
override fun contains(file: VirtualFile): Boolean = file.url in virtualFileUrls
|
||||||
environment: KotlinCoreProjectEnvironment,
|
|
||||||
): Collection<VirtualFile> {
|
override fun isSearchInModuleContent(aModule: Module): Boolean = false
|
||||||
val virtualFilesByRoots = getVirtualFilesForLibraryRoots(roots, environment)
|
|
||||||
return buildList {
|
override fun isSearchInLibraries(): Boolean = true
|
||||||
addAll(virtualFilesByRoots)
|
|
||||||
virtualFilesByRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) }
|
override fun toString(): String = virtualFileUrls.toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getVirtualFileUrlsForLibraryRootsRecursively(
|
||||||
|
roots: Collection<Path>,
|
||||||
|
environment: KotlinCoreProjectEnvironment,
|
||||||
|
): Set<String> =
|
||||||
|
buildSet {
|
||||||
|
for (root in getVirtualFilesForLibraryRoots(roots, environment)) {
|
||||||
|
LibraryUtils.getAllVirtualFilesFromRoot(root, includeRoot = true)
|
||||||
|
.mapTo(this) { it.url }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getVirtualFilesForLibraryRoots(
|
fun getVirtualFilesForLibraryRoots(
|
||||||
roots: Collection<Path>,
|
roots: Collection<Path>,
|
||||||
environment: KotlinCoreProjectEnvironment,
|
environment: KotlinCoreProjectEnvironment,
|
||||||
|
|||||||
Reference in New Issue
Block a user