[Analysis API Standalone] simplify initializing KtSdkModuleBuilder with JDK

^KT-60884
This commit is contained in:
Ilya Kirillov
2023-08-30 09:24:28 +02:00
committed by Space Team
parent 1f290828e5
commit fcf062a252
2 changed files with 8 additions and 7 deletions
@@ -5,10 +5,12 @@
package org.jetbrains.kotlin.analysis.project.structure.builder package org.jetbrains.kotlin.analysis.project.structure.builder
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
import org.jetbrains.kotlin.analysis.project.structure.KtSdkModule import org.jetbrains.kotlin.analysis.project.structure.KtSdkModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtSdkModuleImpl import org.jetbrains.kotlin.analysis.project.structure.impl.KtSdkModuleImpl
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
import java.nio.file.Path
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
@@ -19,6 +21,11 @@ public class KtSdkModuleBuilder(
) : KtBinaryModuleBuilder() { ) : KtBinaryModuleBuilder() {
public lateinit var sdkName: String public lateinit var sdkName: String
public fun addBinaryRootsFromJdkHome(jdkHome: Path, isJre: Boolean) {
val jdkRoots = LibraryUtils.findClassesFromJdkHome(jdkHome, isJre)
addBinaryRoots(jdkRoots)
}
override fun build(): KtSdkModule { override fun build(): KtSdkModule {
val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment) val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment)
@@ -9,8 +9,6 @@ import com.google.common.io.Files.getFileExtension
import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.highlighter.JavaFileType
import com.intellij.psi.PsiFileSystemItem import com.intellij.psi.PsiFileSystemItem
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.util.io.URLUtil
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider
import org.jetbrains.kotlin.analysis.project.structure.builder.* import org.jetbrains.kotlin.analysis.project.structure.builder.*
import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices
@@ -162,14 +160,10 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
} }
) )
compilerConfig.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome -> compilerConfig.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome ->
val jdkHomePath = jdkHome.toPath()
val binaryRoots = LibraryUtils.findClassesFromJdkHome(jdkHomePath).map {
Paths.get(URLUtil.extractPath(it))
}
addRegularDependency( addRegularDependency(
buildKtSdkModule { buildKtSdkModule {
this.platform = platform this.platform = platform
addBinaryRoots(binaryRoots) addBinaryRootsFromJdkHome(jdkHome.toPath(), isJre = false)
sdkName = "JDK for $moduleName" sdkName = "JDK for $moduleName"
} }
) )