[Analysis API Standalone] automatically collect GlobalSearchScope for KtBinaryModule

^KT-60884
This commit is contained in:
Ilya Kirillov
2023-08-29 20:32:38 +02:00
committed by Space Team
parent 97a7c0b6ff
commit eb2c4e4015
6 changed files with 11 additions and 10 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibraryModuleImpl
@@ -21,6 +22,7 @@ public class KtLibraryModuleBuilder(
public var librarySources: KtLibrarySourceModule? = null
override fun build(): KtLibraryModule {
val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment)
return KtLibraryModuleImpl(
directRegularDependencies,
directDependsOnDependencies,
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibrarySourceModuleImpl
@@ -19,6 +20,7 @@ public class KtLibrarySourceModuleBuilder(
) : KtModuleBuilder() {
public lateinit var libraryName: String
public lateinit var binaryLibrary: KtLibraryModule
public lateinit var contentScope: GlobalSearchScope
override fun build(): KtLibrarySourceModule {
return KtLibrarySourceModuleImpl(
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -27,7 +26,6 @@ public abstract class KtModuleBuilder {
directFriendDependencies.add(module)
}
public lateinit var contentScope: GlobalSearchScope
public lateinit var platform: TargetPlatform
public abstract fun build(): KtModule
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
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.impl.KtSdkModuleImpl
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
@@ -19,6 +20,8 @@ public class KtSdkModuleBuilder(
public lateinit var sdkName: String
override fun build(): KtSdkModule {
val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment)
return KtSdkModuleImpl(
directRegularDependencies,
directDependsOnDependencies,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder
import com.intellij.psi.PsiFileSystemItem
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
@@ -19,11 +20,13 @@ import kotlin.contracts.contract
@KtModuleBuilderDsl
public class KtSourceModuleBuilder(
private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment
private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment,
) : KtModuleBuilder() {
public lateinit var moduleName: String
public var languageVersionSettings: LanguageVersionSettings =
LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST)
public lateinit var contentScope: GlobalSearchScope
private val sourceRoots: MutableList<PsiFileSystemItem> = mutableListOf()
public fun addSourceRoot(file: PsiFileSystemItem) {
@@ -9,11 +9,8 @@ import com.google.common.io.Files.getFileExtension
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiFileSystemItem
import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope
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
@@ -163,22 +160,18 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
addRegularDependency(
buildKtLibraryModule {
contentScope = ProjectScope.getLibrariesScope(kotlinCoreProjectEnvironment.project)
this.platform = platform
binaryRoots = libraryRoots.map { it.toPath() }
libraryName = "Library for $moduleName"
}
)
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))
}
addRegularDependency(
buildKtSdkModule {
contentScope = GlobalSearchScope.fileScope(kotlinCoreProjectEnvironment.project, jdkHomeVirtualFile)
this.platform = platform
this.binaryRoots = binaryRoots
sdkName = "JDK for $moduleName"