AA: add JDK_HOME as dependent SDK module

This commit is contained in:
Jinseong Jeon
2022-05-03 23:24:47 -07:00
committed by Ilya Kirillov
parent af32a65c78
commit 3f05ba04a9
6 changed files with 92 additions and 19 deletions
@@ -19,8 +19,8 @@ class KtStaticModuleProvider(
}.ktModule
}
override fun getKtLibraryModules(): Collection<KtLibraryModule> {
return testProjectStructure.allKtModules().filterIsInstance<KtLibraryModule>()
override fun getKtBinaryModules(): Collection<KtBinaryModule> {
return testProjectStructure.allKtModules().filterIsInstance<KtBinaryModule>()
}
override fun getStdlibWithBuiltinsModule(module: KtModule): KtLibraryModule {
@@ -6,12 +6,13 @@
package org.jetbrains.kotlin.analysis.project.structure.impl
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import com.intellij.util.io.URLUtil
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.project.structure.*
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
import org.jetbrains.kotlin.cli.jvm.config.jvmModularRoots
@@ -22,6 +23,7 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import java.nio.file.Path
import java.nio.file.Paths
internal abstract class BaseKtModuleByCompilerConfiguration(
private val compilerConfig: CompilerConfiguration,
@@ -51,7 +53,7 @@ internal class KtSourceModuleByCompilerConfiguration(
project: Project,
ktFiles: List<KtFile>,
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSourceModule {
override val directRegularDependencies: List<KtLibraryModule> by lazy {
override val directRegularDependencies: List<KtBinaryModule> by lazy {
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
val libraryRootsByType = libraryRoots.groupBy { it.isDirectory }
buildList {
@@ -69,6 +71,15 @@ internal class KtSourceModuleByCompilerConfiguration(
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, root))
}
}
compilerConfig.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome ->
val vfm = VirtualFileManager.getInstance()
val jdkHomePath = jdkHome.toPath()
val jdkHomeVirtualFile = vfm.findFileByNioPath(jdkHomePath)
val binaryRoots = LibraryUtils.findClassesFromJdkHome(jdkHomePath).map {
Paths.get(URLUtil.extractPath(it))
}
add(KtSdkModuleByCompilerConfiguration(compilerConfig, project, "JDK", jdkHomeVirtualFile, binaryRoots))
}
}
}
@@ -98,3 +109,18 @@ internal class KtLibraryModuleByCompilerConfiguration(
override fun getBinaryRoots(): Collection<Path> = binaryRoots
}
internal class KtSdkModuleByCompilerConfiguration(
compilerConfig: CompilerConfiguration,
project: Project,
override val sdkName: String,
sdkHome: VirtualFile?,
private val binaryRoots: Collection<Path>
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSdkModule {
override val directRegularDependencies: List<KtModule> get() = emptyList()
override val contentScope: GlobalSearchScope =
GlobalSearchScope.fileScope(project, sdkHome)
override fun getBinaryRoots(): Collection<Path> = binaryRoots
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.project.structure.impl
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
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.analysis.project.structure.ProjectStructureProvider
@@ -20,7 +21,7 @@ internal class KtModuleProviderByCompilerConfiguration(
) : ProjectStructureProvider() {
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles)
private val libraryModules: Collection<KtLibraryModule> by lazy {
private val binaryModules: Collection<KtBinaryModule> by lazy {
sourceModule.directRegularDependencies
}
@@ -34,8 +35,8 @@ internal class KtModuleProviderByCompilerConfiguration(
}
}
override fun getKtLibraryModules(): Collection<KtLibraryModule> {
return libraryModules
override fun getKtBinaryModules(): Collection<KtBinaryModule> {
return binaryModules
}
override fun getStdlibWithBuiltinsModule(module: KtModule): KtLibraryModule? {