[Analysis API Standalone] extract functions for getting GlobalSearchScope by roots to utils

^KT-60884
This commit is contained in:
Ilya Kirillov
2023-08-29 20:19:35 +02:00
committed by Space Team
parent 3f689494ad
commit 97a7c0b6ff
3 changed files with 27 additions and 14 deletions
@@ -31,6 +31,7 @@ import com.intellij.util.io.URLUtil.JAR_PROTOCOL
import com.intellij.util.io.URLUtil.JAR_SEPARATOR
import org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSourceWithSmartPointerFactory
import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProviderCliImpl
@@ -328,6 +329,26 @@ object StandaloneProjectFactory {
.filterIsInstance<KtBinaryModule>()
.flatMap { it.getJavaRoots(environment) }
fun createSearchScopeByLibraryRoots(
roots: Collection<Path>,
environment: KotlinCoreProjectEnvironment,
): GlobalSearchScope {
if (roots.isEmpty()) return GlobalSearchScope.EMPTY_SCOPE
val virtualFiles = getVirtualFilesForLibraryRootsRecursively(roots, environment)
return GlobalSearchScope.filesScope(environment.project, virtualFiles)
}
fun getVirtualFilesForLibraryRootsRecursively(
roots: Collection<Path>,
environment: KotlinCoreProjectEnvironment,
): Collection<VirtualFile> {
val virtualFilesByRoots = getVirtualFilesForLibraryRoots(roots, environment)
return buildList {
addAll(virtualFilesByRoots)
virtualFilesByRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) }
}
}
fun getVirtualFilesForLibraryRoots(
roots: Collection<Path>,
environment: KotlinCoreProjectEnvironment,
@@ -56,7 +56,7 @@ abstract class KtModuleByCompilerConfiguration(
private fun createJdkFromConfiguration(): KtSdkModule? = configuration.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome ->
val jdkHomePaths = StandaloneProjectFactory.getDefaultJdkModulePaths(project, jdkHome.toPath())
val scope = TestModuleStructureFactory.getScopeForLibraryByRoots(jdkHomePaths, project, testServices)
val scope = TestModuleStructureFactory.getScopeForLibraryByRoots(jdkHomePaths, testServices)
KtJdkModuleImpl(
"jdk",
@@ -146,7 +146,7 @@ private class LibraryByRoot(
override val project: Project,
testServices: TestServices,
) : KtLibraryModule {
override val contentScope: GlobalSearchScope = TestModuleStructureFactory.getScopeForLibraryByRoots(listOf(root), project, testServices)
override val contentScope: GlobalSearchScope = TestModuleStructureFactory.getScopeForLibraryByRoots(listOf(root), testServices)
override val libraryName: String get() = "Test Library $root"
override val directRegularDependencies: List<KtModule> get() = emptyList()
override val directDependsOnDependencies: List<KtModule> get() = emptyList()
@@ -9,7 +9,6 @@ import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
@@ -131,7 +130,7 @@ object TestModuleStructureFactory {
return KtLibraryModuleImpl(
libraryName,
JvmPlatforms.defaultJvmPlatform,
getScopeForLibraryByRoots(listOf(jar), project, testServices),
getScopeForLibraryByRoots(listOf(jar), testServices),
project,
listOf(jar),
librarySources = null,
@@ -168,24 +167,17 @@ object TestModuleStructureFactory {
return KtJdkModuleImpl(
"jdk",
JvmPlatforms.defaultJvmPlatform,
getScopeForLibraryByRoots(jdkSourceRoots, project, testServices),
getScopeForLibraryByRoots(jdkSourceRoots, testServices),
project,
jdkSourceRoots
)
}
fun getScopeForLibraryByRoots(roots: Collection<Path>, project: Project, testServices: TestServices): GlobalSearchScope {
val virtualFileRoots = StandaloneProjectFactory.getVirtualFilesForLibraryRoots(
fun getScopeForLibraryByRoots(roots: Collection<Path>, testServices: TestServices): GlobalSearchScope {
return StandaloneProjectFactory.createSearchScopeByLibraryRoots(
roots,
testServices.environmentManager.getProjectEnvironment()
)
return GlobalSearchScope.filesScope(
project,
buildList {
addAll(virtualFileRoots)
virtualFileRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) }
}
)
}
fun createSourcePsiFiles(