[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 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.java.source.JavaElementSourceWithSmartPointerFactory
import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService 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.api.resolve.extensions.KtResolveExtensionProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProviderCliImpl import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProviderCliImpl
@@ -328,6 +329,26 @@ object StandaloneProjectFactory {
.filterIsInstance<KtBinaryModule>() .filterIsInstance<KtBinaryModule>()
.flatMap { it.getJavaRoots(environment) } .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( fun getVirtualFilesForLibraryRoots(
roots: Collection<Path>, roots: Collection<Path>,
environment: KotlinCoreProjectEnvironment, environment: KotlinCoreProjectEnvironment,
@@ -56,7 +56,7 @@ abstract class KtModuleByCompilerConfiguration(
private fun createJdkFromConfiguration(): KtSdkModule? = configuration.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome -> private fun createJdkFromConfiguration(): KtSdkModule? = configuration.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome ->
val jdkHomePaths = StandaloneProjectFactory.getDefaultJdkModulePaths(project, jdkHome.toPath()) val jdkHomePaths = StandaloneProjectFactory.getDefaultJdkModulePaths(project, jdkHome.toPath())
val scope = TestModuleStructureFactory.getScopeForLibraryByRoots(jdkHomePaths, project, testServices) val scope = TestModuleStructureFactory.getScopeForLibraryByRoots(jdkHomePaths, testServices)
KtJdkModuleImpl( KtJdkModuleImpl(
"jdk", "jdk",
@@ -146,7 +146,7 @@ private class LibraryByRoot(
override val project: Project, override val project: Project,
testServices: TestServices, testServices: TestServices,
) : KtLibraryModule { ) : 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 libraryName: String get() = "Test Library $root"
override val directRegularDependencies: List<KtModule> get() = emptyList() override val directRegularDependencies: List<KtModule> get() = emptyList()
override val directDependsOnDependencies: 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.PsiFile
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope 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.KtModuleProjectStructure
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleWithFiles
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
@@ -131,7 +130,7 @@ object TestModuleStructureFactory {
return KtLibraryModuleImpl( return KtLibraryModuleImpl(
libraryName, libraryName,
JvmPlatforms.defaultJvmPlatform, JvmPlatforms.defaultJvmPlatform,
getScopeForLibraryByRoots(listOf(jar), project, testServices), getScopeForLibraryByRoots(listOf(jar), testServices),
project, project,
listOf(jar), listOf(jar),
librarySources = null, librarySources = null,
@@ -168,24 +167,17 @@ object TestModuleStructureFactory {
return KtJdkModuleImpl( return KtJdkModuleImpl(
"jdk", "jdk",
JvmPlatforms.defaultJvmPlatform, JvmPlatforms.defaultJvmPlatform,
getScopeForLibraryByRoots(jdkSourceRoots, project, testServices), getScopeForLibraryByRoots(jdkSourceRoots, testServices),
project, project,
jdkSourceRoots jdkSourceRoots
) )
} }
fun getScopeForLibraryByRoots(roots: Collection<Path>, project: Project, testServices: TestServices): GlobalSearchScope { fun getScopeForLibraryByRoots(roots: Collection<Path>, testServices: TestServices): GlobalSearchScope {
val virtualFileRoots = StandaloneProjectFactory.getVirtualFilesForLibraryRoots( return StandaloneProjectFactory.createSearchScopeByLibraryRoots(
roots, roots,
testServices.environmentManager.getProjectEnvironment() testServices.environmentManager.getProjectEnvironment()
) )
return GlobalSearchScope.filesScope(
project,
buildList {
addAll(virtualFileRoots)
virtualFileRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) }
}
)
} }
fun createSourcePsiFiles( fun createSourcePsiFiles(