[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 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.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibraryModuleImpl import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibraryModuleImpl
@@ -21,6 +22,7 @@ public class KtLibraryModuleBuilder(
public var librarySources: KtLibrarySourceModule? = null public var librarySources: KtLibrarySourceModule? = null
override fun build(): KtLibraryModule { override fun build(): KtLibraryModule {
val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment)
return KtLibraryModuleImpl( return KtLibraryModuleImpl(
directRegularDependencies, directRegularDependencies,
directDependsOnDependencies, directDependsOnDependencies,
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder 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.KtLibraryModule
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibrarySourceModuleImpl import org.jetbrains.kotlin.analysis.project.structure.impl.KtLibrarySourceModuleImpl
@@ -19,6 +20,7 @@ public class KtLibrarySourceModuleBuilder(
) : KtModuleBuilder() { ) : KtModuleBuilder() {
public lateinit var libraryName: String public lateinit var libraryName: String
public lateinit var binaryLibrary: KtLibraryModule public lateinit var binaryLibrary: KtLibraryModule
public lateinit var contentScope: GlobalSearchScope
override fun build(): KtLibrarySourceModule { override fun build(): KtLibrarySourceModule {
return KtLibrarySourceModuleImpl( return KtLibrarySourceModuleImpl(
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.analysis.project.structure.builder 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.analysis.project.structure.KtModule
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
@@ -27,7 +26,6 @@ public abstract class KtModuleBuilder {
directFriendDependencies.add(module) directFriendDependencies.add(module)
} }
public lateinit var contentScope: GlobalSearchScope
public lateinit var platform: TargetPlatform public lateinit var platform: TargetPlatform
public abstract fun build(): KtModule public abstract fun build(): KtModule
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder 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.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
@@ -19,6 +20,8 @@ public class KtSdkModuleBuilder(
public lateinit var sdkName: String public lateinit var sdkName: String
override fun build(): KtSdkModule { override fun build(): KtSdkModule {
val contentScope = StandaloneProjectFactory.createSearchScopeByLibraryRoots(binaryRoots, kotlinCoreProjectEnvironment)
return KtSdkModuleImpl( return KtSdkModuleImpl(
directRegularDependencies, directRegularDependencies,
directDependsOnDependencies, directDependsOnDependencies,
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.project.structure.builder package org.jetbrains.kotlin.analysis.project.structure.builder
import com.intellij.psi.PsiFileSystemItem 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.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl import org.jetbrains.kotlin.analysis.project.structure.impl.KtSourceModuleImpl
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
@@ -19,11 +20,13 @@ import kotlin.contracts.contract
@KtModuleBuilderDsl @KtModuleBuilderDsl
public class KtSourceModuleBuilder( public class KtSourceModuleBuilder(
private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment,
) : KtModuleBuilder() { ) : KtModuleBuilder() {
public lateinit var moduleName: String public lateinit var moduleName: String
public var languageVersionSettings: LanguageVersionSettings = public var languageVersionSettings: LanguageVersionSettings =
LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST) LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST)
public lateinit var contentScope: GlobalSearchScope
private val sourceRoots: MutableList<PsiFileSystemItem> = mutableListOf() private val sourceRoots: MutableList<PsiFileSystemItem> = mutableListOf()
public fun addSourceRoot(file: PsiFileSystemItem) { 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.ide.highlighter.JavaFileType
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiFileSystemItem import com.intellij.psi.PsiFileSystemItem
import com.intellij.psi.PsiManager import com.intellij.psi.PsiManager
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope
import com.intellij.util.io.URLUtil import com.intellij.util.io.URLUtil
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils 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
@@ -163,22 +160,18 @@ internal fun buildKtModuleProviderByCompilerConfiguration(
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
addRegularDependency( addRegularDependency(
buildKtLibraryModule { buildKtLibraryModule {
contentScope = ProjectScope.getLibrariesScope(kotlinCoreProjectEnvironment.project)
this.platform = platform this.platform = platform
binaryRoots = libraryRoots.map { it.toPath() } binaryRoots = libraryRoots.map { it.toPath() }
libraryName = "Library for $moduleName" libraryName = "Library for $moduleName"
} }
) )
compilerConfig.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome -> compilerConfig.get(JVMConfigurationKeys.JDK_HOME)?.let { jdkHome ->
val vfm = VirtualFileManager.getInstance()
val jdkHomePath = jdkHome.toPath() val jdkHomePath = jdkHome.toPath()
val jdkHomeVirtualFile = vfm.findFileByNioPath(jdkHomePath)
val binaryRoots = LibraryUtils.findClassesFromJdkHome(jdkHomePath).map { val binaryRoots = LibraryUtils.findClassesFromJdkHome(jdkHomePath).map {
Paths.get(URLUtil.extractPath(it)) Paths.get(URLUtil.extractPath(it))
} }
addRegularDependency( addRegularDependency(
buildKtSdkModule { buildKtSdkModule {
contentScope = GlobalSearchScope.fileScope(kotlinCoreProjectEnvironment.project, jdkHomeVirtualFile)
this.platform = platform this.platform = platform
this.binaryRoots = binaryRoots this.binaryRoots = binaryRoots
sdkName = "JDK for $moduleName" sdkName = "JDK for $moduleName"