[LL FIR] create separate library session for each library
This commit is contained in:
+2
-1
@@ -12,11 +12,12 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.Stand
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBinaryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
|
||||
data class KtModuleProjectStructure(
|
||||
val mainModules: List<KtModuleWithFiles>,
|
||||
val binaryModules: Iterable<KtBinaryModule>,
|
||||
val stdlibFor: (KtModule) -> KtLibraryModule,
|
||||
val stdlibFor: (TargetPlatform) -> KtLibraryModule,
|
||||
) {
|
||||
fun allKtModules(): List<KtModule> = buildList {
|
||||
mainModules.mapTo(this) { it.ktModule }
|
||||
|
||||
+3
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.psi.psiUtil.contains
|
||||
|
||||
class KtStaticModuleProvider(
|
||||
@@ -23,7 +24,7 @@ class KtStaticModuleProvider(
|
||||
return projectStructure.allKtModules().filterIsInstance<KtBinaryModule>()
|
||||
}
|
||||
|
||||
override fun getStdlibWithBuiltinsModule(module: KtModule): KtLibraryModule {
|
||||
return projectStructure.stdlibFor(module)
|
||||
override fun getStdlibWithBuiltinsModule(platform: TargetPlatform): KtLibraryModule {
|
||||
return projectStructure.stdlibFor(platform)
|
||||
}
|
||||
}
|
||||
+24
-18
@@ -14,6 +14,7 @@ import com.intellij.mock.MockProject
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.roots.PackageIndex
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.psi.PsiDirectory
|
||||
import com.intellij.psi.PsiFileSystemItem
|
||||
@@ -181,6 +182,28 @@ object StandaloneProjectFactory {
|
||||
.filterIsInstance<KtBinaryModule>()
|
||||
.flatMap { it.getJavaRoots(environment) }
|
||||
|
||||
fun getVirtualFilesForLibraryRoots(
|
||||
roots: Collection<Path>,
|
||||
environment: KotlinCoreProjectEnvironment
|
||||
): List<VirtualFile> {
|
||||
return roots.mapNotNull { path ->
|
||||
val pathString = path.toAbsolutePath().toString()
|
||||
when {
|
||||
pathString.endsWith(JAR_PROTOCOL) -> {
|
||||
environment.environment.jarFileSystem.findFileByPath(pathString + JAR_SEPARATOR)
|
||||
}
|
||||
|
||||
pathString.contains(JAR_SEPARATOR) -> {
|
||||
environment.environment.jrtFileSystem?.findFileByPath(adjustModulePath(pathString))
|
||||
}
|
||||
|
||||
else -> {
|
||||
VirtualFileManager.getInstance().findFileByNioPath(path)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun withAllTransitiveDependencies(ktModules: List<KtModule>): List<KtModule> {
|
||||
val visited = hashSetOf<KtModule>()
|
||||
val stack = ktModules.toMutableList()
|
||||
@@ -212,24 +235,7 @@ object StandaloneProjectFactory {
|
||||
private fun KtBinaryModule.getJavaRoots(
|
||||
environment: KotlinCoreProjectEnvironment,
|
||||
): List<JavaRoot> {
|
||||
return buildList {
|
||||
getBinaryRoots().forEach { path ->
|
||||
val pathString = path.toAbsolutePath().toString()
|
||||
when {
|
||||
pathString.endsWith(JAR_PROTOCOL) -> {
|
||||
environment.environment.jarFileSystem.findFileByPath(pathString + JAR_SEPARATOR)
|
||||
}
|
||||
pathString.contains(JAR_SEPARATOR) -> {
|
||||
environment.environment.jrtFileSystem?.findFileByPath(adjustModulePath(pathString))
|
||||
}
|
||||
else -> {
|
||||
VirtualFileManager.getInstance().findFileByNioPath(path)
|
||||
}
|
||||
}?.let { root ->
|
||||
add(JavaRoot(root, JavaRoot.RootType.BINARY))
|
||||
}
|
||||
}
|
||||
}
|
||||
return getVirtualFilesForLibraryRoots(getBinaryRoots(), environment).map { root -> JavaRoot(root, JavaRoot.RootType.BINARY)}
|
||||
}
|
||||
|
||||
private fun adjustModulePath(pathString: String): String {
|
||||
|
||||
Reference in New Issue
Block a user