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 99a09e41db1..3f5fe0c387f 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 @@ -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() .flatMap { it.getJavaRoots(environment) } + fun createSearchScopeByLibraryRoots( + roots: Collection, + 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, + environment: KotlinCoreProjectEnvironment, + ): Collection { + val virtualFilesByRoots = getVirtualFilesForLibraryRoots(roots, environment) + return buildList { + addAll(virtualFilesByRoots) + virtualFilesByRoots.flatMapTo(this) { LibraryUtils.getAllVirtualFilesFromRoot(it, includeRoot = true) } + } + } + fun getVirtualFilesForLibraryRoots( roots: Collection, environment: KotlinCoreProjectEnvironment, diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt index 112a0cd24a9..c4cce5d288c 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/KtSourceModuleByCompilerConfiguration.kt @@ -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 get() = emptyList() override val directDependsOnDependencies: List get() = emptyList() diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt index 3769289e61e..60e53053754 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/project/structure/TestModuleStructureFactory.kt @@ -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, project: Project, testServices: TestServices): GlobalSearchScope { - val virtualFileRoots = StandaloneProjectFactory.getVirtualFilesForLibraryRoots( + fun getScopeForLibraryByRoots(roots: Collection, 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(