[analysis api fir] put every library into a separate KtModule in tests
This commit is contained in:
+14
@@ -6,8 +6,22 @@
|
||||
package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure
|
||||
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
|
||||
|
||||
data class KtModuleProjectStructure(
|
||||
val mainModules: List<KtModuleWithFiles>,
|
||||
val binaryModules: Iterable<KtBinaryModule>,
|
||||
val stdlibFor: (KtModule) -> KtLibraryModule,
|
||||
) {
|
||||
fun allKtModules(): List<KtModule> = buildList {
|
||||
mainModules.mapTo(this) { it.ktModule }
|
||||
addAll(binaryModules)
|
||||
}
|
||||
}
|
||||
|
||||
data class KtModuleWithFiles(
|
||||
val ktModule: KtModule,
|
||||
val files: List<PsiFile>
|
||||
|
||||
+9
-9
@@ -10,20 +10,20 @@ import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||
|
||||
class KtStaticModuleProvider(
|
||||
private val modules: List<KtModule>,
|
||||
private val stdlibs: Set<KtModule>
|
||||
private val testProjectStructure: KtModuleProjectStructure,
|
||||
) : ProjectStructureProvider() {
|
||||
override fun getKtModuleForKtElement(element: PsiElement): KtModule {
|
||||
return modules.first { module ->
|
||||
module.contentScope.contains(element)
|
||||
}
|
||||
return testProjectStructure.mainModules
|
||||
.first { module ->
|
||||
module.ktModule.contentScope.contains(element)
|
||||
}.ktModule
|
||||
}
|
||||
|
||||
override fun getKtLibraryModules(): Collection<KtLibraryModule> {
|
||||
return modules.filterIsInstance<KtLibraryModule>()
|
||||
return testProjectStructure.allKtModules().filterIsInstance<KtLibraryModule>()
|
||||
}
|
||||
|
||||
override fun getStdlibModule(module: KtModule): KtLibraryModule? {
|
||||
return module.allDirectDependenciesOfType<KtLibraryModule>().firstOrNull { it in stdlibs }
|
||||
override fun getStdlibWithBuiltinsModule(module: KtModule): KtLibraryModule {
|
||||
return testProjectStructure.stdlibFor(module)
|
||||
}
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -46,7 +46,7 @@ object StandaloneProjectFactory {
|
||||
|
||||
fun registerServicesForProjectEnvironment(
|
||||
environment: KotlinCoreProjectEnvironment,
|
||||
modules: List<KtModuleWithFiles>,
|
||||
modules: KtModuleProjectStructure,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
jdkHome: Path?,
|
||||
) {
|
||||
@@ -55,7 +55,7 @@ object StandaloneProjectFactory {
|
||||
KotlinCoreEnvironment.registerProjectExtensionPoints(project.extensionArea)
|
||||
KotlinCoreEnvironment.registerProjectServices(project)
|
||||
|
||||
project.registerService(ProjectStructureProvider::class.java, KtStaticModuleProvider(modules.map { it.ktModule }, emptySet()))
|
||||
project.registerService(ProjectStructureProvider::class.java, KtStaticModuleProvider(modules))
|
||||
initialiseVirtualFinderFinderServices(modules, environment, jdkHome, languageVersionSettings)
|
||||
initialiseAnnotationServices(project)
|
||||
|
||||
@@ -68,7 +68,7 @@ object StandaloneProjectFactory {
|
||||
}
|
||||
|
||||
private fun initialiseVirtualFinderFinderServices(
|
||||
modules: List<KtModuleWithFiles>,
|
||||
modules: KtModuleProjectStructure,
|
||||
environment: KotlinCoreProjectEnvironment,
|
||||
jdkHome: Path?,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
@@ -76,12 +76,12 @@ object StandaloneProjectFactory {
|
||||
val project = environment.project
|
||||
|
||||
val allSourceFiles = buildList {
|
||||
val files = modules.flatMap { it.files }
|
||||
val files = modules.mainModules.flatMap { it.files }
|
||||
addAll(files)
|
||||
addAll(findJvmRootsForJavaFiles(files.filterIsInstance<PsiJavaFile>()))
|
||||
}
|
||||
val allSourceFileRoots = allSourceFiles.map { JavaRoot(it.virtualFile, JavaRoot.RootType.SOURCE) }
|
||||
val libraryRoots = getAllBinaryRoots(modules.map { it.ktModule }, environment)
|
||||
val libraryRoots = getAllBinaryRoots(modules.allKtModules(), environment)
|
||||
libraryRoots.forEach { environment.addSourcesToClasspath(it.file) }
|
||||
|
||||
val sourceAndLibraryRoots = buildList {
|
||||
@@ -133,7 +133,7 @@ object StandaloneProjectFactory {
|
||||
modules: List<KtModule>,
|
||||
environment: KotlinCoreProjectEnvironment
|
||||
): List<JavaRoot> = withAllTransitiveDependencies(modules)
|
||||
.filterIsInstance<KtLibraryModule>()
|
||||
.filterIsInstance<KtBinaryModule>()
|
||||
.flatMap { it.getBinaryRoots() }
|
||||
.map {
|
||||
val jar = environment.environment.jarFileSystem.findFileByPath(it.toAbsolutePath().toString() + "!/")!!
|
||||
|
||||
Reference in New Issue
Block a user