diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt index 68ab9005f61..9bbc35e7bf9 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt @@ -75,7 +75,7 @@ public class StandaloneAnalysisAPISessionBuilder( private lateinit var projectStructureProvider: KtStaticProjectStructureProvider public fun buildKtModuleProvider(init: KtModuleProviderBuilder.() -> Unit) { - projectStructureProvider = buildProjectStructureProvider(init) + projectStructureProvider = buildProjectStructureProvider(kotlinCoreProjectEnvironment, init) } @Deprecated( @@ -87,8 +87,8 @@ public class StandaloneAnalysisAPISessionBuilder( ) { val project = kotlinCoreProjectEnvironment.project projectStructureProvider = buildKtModuleProviderByCompilerConfiguration( + kotlinCoreProjectEnvironment, compilerConfiguration, - project, getPsiFilesFromPaths(project, getSourceFilePaths(compilerConfiguration)), ) } diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibraryModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibraryModuleBuilder.kt index 7dbf80130ad..225b18500b1 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibraryModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibraryModuleBuilder.kt @@ -8,12 +8,15 @@ package org.jetbrains.kotlin.analysis.project.structure.builder 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 +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @KtModuleBuilderDsl -public class KtLibraryModuleBuilder : KtBinaryModuleBuilder() { +public class KtLibraryModuleBuilder( + private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) : KtBinaryModuleBuilder() { public lateinit var libraryName: String public var librarySources: KtLibrarySourceModule? = null @@ -24,7 +27,7 @@ public class KtLibraryModuleBuilder : KtBinaryModuleBuilder() { directFriendDependencies, contentScope, platform, - project, + kotlinCoreProjectEnvironment.project, binaryRoots, libraryName, librarySources, @@ -33,9 +36,9 @@ public class KtLibraryModuleBuilder : KtBinaryModuleBuilder() { } @OptIn(ExperimentalContracts::class) -public inline fun buildKtLibraryModule(init: KtLibraryModuleBuilder.() -> Unit): KtLibraryModule { +public inline fun KtModuleProviderBuilder.buildKtLibraryModule(init: KtLibraryModuleBuilder.() -> Unit): KtLibraryModule { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtLibraryModuleBuilder().apply(init).build() + return KtLibraryModuleBuilder(kotlinCoreProjectEnvironment).apply(init).build() } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibrarySourceModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibrarySourceModuleBuilder.kt index 4fdbc05812c..5dc15b66260 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibrarySourceModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtLibrarySourceModuleBuilder.kt @@ -8,12 +8,15 @@ package org.jetbrains.kotlin.analysis.project.structure.builder 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 +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @KtModuleBuilderDsl -public class KtLibrarySourceModuleBuilder : KtModuleBuilder() { +public class KtLibrarySourceModuleBuilder( + private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) : KtModuleBuilder() { public lateinit var libraryName: String public lateinit var binaryLibrary: KtLibraryModule @@ -24,7 +27,7 @@ public class KtLibrarySourceModuleBuilder : KtModuleBuilder() { directFriendDependencies, contentScope, platform, - project, + kotlinCoreProjectEnvironment.project, libraryName, binaryLibrary ) @@ -32,9 +35,9 @@ public class KtLibrarySourceModuleBuilder : KtModuleBuilder() { } @OptIn(ExperimentalContracts::class) -public inline fun buildKtLibrarySourceModule(init: KtLibrarySourceModuleBuilder.() -> Unit): KtLibrarySourceModule { +public inline fun KtModuleProviderBuilder.buildKtLibrarySourceModule(init: KtLibrarySourceModuleBuilder.() -> Unit): KtLibrarySourceModule { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtLibrarySourceModuleBuilder().apply(init).build() + return KtLibrarySourceModuleBuilder(kotlinCoreProjectEnvironment).apply(init).build() } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleBuilder.kt index d8a66830432..5fcd76559cc 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleBuilder.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.analysis.project.structure.builder -import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.platform.TargetPlatform @@ -30,7 +29,6 @@ public abstract class KtModuleBuilder { public lateinit var contentScope: GlobalSearchScope public lateinit var platform: TargetPlatform - public lateinit var project: Project public abstract fun build(): KtModule } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleProviderBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleProviderBuilder.kt index c41f6547628..98e7e6a5b9e 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleProviderBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtModuleProviderBuilder.kt @@ -5,17 +5,18 @@ package org.jetbrains.kotlin.analysis.project.structure.builder -import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.impl.KtModuleProviderImpl +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.platform.TargetPlatform import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract -import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider -@KtModuleBuilderDsl -public class KtModuleProviderBuilder { +public class KtModuleProviderBuilder( + public val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) { private val mainModules: MutableList = mutableListOf() public fun addModule(module: KtModule) { @@ -23,21 +24,23 @@ public class KtModuleProviderBuilder { } public lateinit var platform: TargetPlatform - public lateinit var project: Project public fun build(): KtStaticProjectStructureProvider { return KtModuleProviderImpl( platform, - project, + kotlinCoreProjectEnvironment.project, mainModules, ) } } @OptIn(ExperimentalContracts::class) -public inline fun buildProjectStructureProvider(init: KtModuleProviderBuilder.() -> Unit): KtStaticProjectStructureProvider { +internal inline fun buildProjectStructureProvider( + kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment, + init: KtModuleProviderBuilder.() -> Unit, +): KtStaticProjectStructureProvider { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtModuleProviderBuilder().apply(init).build() + return KtModuleProviderBuilder(kotlinCoreProjectEnvironment).apply(init).build() } diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtScriptModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtScriptModuleBuilder.kt index d9061f5d356..245eeec7e17 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtScriptModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtScriptModuleBuilder.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.project.structure.builder import org.jetbrains.kotlin.analysis.project.structure.KtScriptModule import org.jetbrains.kotlin.analysis.project.structure.impl.KtScriptModuleImpl +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -17,7 +18,9 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract @KtModuleBuilderDsl -public class KtScriptModuleBuilder : KtModuleBuilder() { +public class KtScriptModuleBuilder( + private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) : KtModuleBuilder() { public lateinit var file: KtFile public var languageVersionSettings: LanguageVersionSettings = @@ -29,7 +32,7 @@ public class KtScriptModuleBuilder : KtModuleBuilder() { directDependsOnDependencies, directFriendDependencies, platform, - project, + kotlinCoreProjectEnvironment.project, file, languageVersionSettings ) @@ -37,9 +40,9 @@ public class KtScriptModuleBuilder : KtModuleBuilder() { } @OptIn(ExperimentalContracts::class) -public inline fun buildKtScriptModule(init: KtScriptModuleBuilder.() -> Unit): KtScriptModule { +public inline fun KtModuleProviderBuilder.buildKtScriptModule(init: KtScriptModuleBuilder.() -> Unit): KtScriptModule { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtScriptModuleBuilder().apply(init).build() + return KtScriptModuleBuilder(kotlinCoreProjectEnvironment).apply(init).build() } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSdkModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSdkModuleBuilder.kt index e4ac344dc7d..6e20dba10e7 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSdkModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSdkModuleBuilder.kt @@ -7,12 +7,15 @@ package org.jetbrains.kotlin.analysis.project.structure.builder 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 import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind import kotlin.contracts.contract @KtModuleBuilderDsl -public class KtSdkModuleBuilder : KtBinaryModuleBuilder() { +public class KtSdkModuleBuilder( + private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) : KtBinaryModuleBuilder() { public lateinit var sdkName: String override fun build(): KtSdkModule { @@ -22,7 +25,7 @@ public class KtSdkModuleBuilder : KtBinaryModuleBuilder() { directFriendDependencies, contentScope, platform, - project, + kotlinCoreProjectEnvironment.project, binaryRoots, sdkName ) @@ -30,9 +33,9 @@ public class KtSdkModuleBuilder : KtBinaryModuleBuilder() { } @OptIn(ExperimentalContracts::class) -public inline fun buildKtSdkModule(init: KtSdkModuleBuilder.() -> Unit): KtSdkModule { +public inline fun KtModuleProviderBuilder.buildKtSdkModule(init: KtSdkModuleBuilder.() -> Unit): KtSdkModule { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtSdkModuleBuilder().apply(init).build() + return KtSdkModuleBuilder(kotlinCoreProjectEnvironment).apply(init).build() } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt index 6a7c7ad1765..2408f997f07 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/builder/KtSourceModuleBuilder.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.project.structure.builder import com.intellij.psi.PsiFileSystemItem 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 import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageVersion import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -17,7 +18,9 @@ import kotlin.contracts.InvocationKind import kotlin.contracts.contract @KtModuleBuilderDsl -public class KtSourceModuleBuilder : KtModuleBuilder() { +public class KtSourceModuleBuilder( + private val kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment +) : KtModuleBuilder() { public lateinit var moduleName: String public var languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST) @@ -38,7 +41,7 @@ public class KtSourceModuleBuilder : KtModuleBuilder() { directFriendDependencies, contentScope, platform, - project, + kotlinCoreProjectEnvironment.project, moduleName, languageVersionSettings, sourceRoots, @@ -47,9 +50,9 @@ public class KtSourceModuleBuilder : KtModuleBuilder() { } @OptIn(ExperimentalContracts::class) -public inline fun buildKtSourceModule(init: KtSourceModuleBuilder.() -> Unit): KtSourceModule { +public inline fun KtModuleProviderBuilder.buildKtSourceModule(init: KtSourceModuleBuilder.() -> Unit): KtSourceModule { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } - return KtSourceModuleBuilder().apply(init).build() + return KtSourceModuleBuilder(kotlinCoreProjectEnvironment).apply(init).build() } \ No newline at end of file diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt index 4c0d25f4a10..d7f6f68c480 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/project/structure/impl/KtModuleUtils.kt @@ -16,8 +16,10 @@ 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 import org.jetbrains.kotlin.analysis.project.structure.builder.* import org.jetbrains.kotlin.analyzer.common.CommonPlatformAnalyzerServices +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.cli.jvm.config.javaSourceRoots import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots @@ -43,7 +45,6 @@ import org.jetbrains.kotlin.wasm.resolve.WasmJsPlatformAnalyzerServices import java.io.IOException import java.nio.file.* import java.nio.file.attribute.BasicFileAttributes -import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider internal fun TargetPlatform.getAnalyzerServices(): PlatformDependentAnalyzerServices { return when { @@ -151,10 +152,10 @@ internal inline fun getPsiFilesFromPaths( } internal fun buildKtModuleProviderByCompilerConfiguration( + kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment, compilerConfig: CompilerConfiguration, - project: Project, ktFiles: List, -): KtStaticProjectStructureProvider = buildProjectStructureProvider { +): KtStaticProjectStructureProvider = buildProjectStructureProvider(kotlinCoreProjectEnvironment) { val (scriptFiles, ordinaryFiles) = ktFiles.partition { it.isScript() } val platform = JvmPlatforms.defaultJvmPlatform @@ -162,9 +163,8 @@ internal fun buildKtModuleProviderByCompilerConfiguration( val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots addRegularDependency( buildKtLibraryModule { - contentScope = ProjectScope.getLibrariesScope(project) + contentScope = ProjectScope.getLibrariesScope(kotlinCoreProjectEnvironment.project) this.platform = platform - this.project = project binaryRoots = libraryRoots.map { it.toPath() } libraryName = "Library for $moduleName" } @@ -178,9 +178,8 @@ internal fun buildKtModuleProviderByCompilerConfiguration( } addRegularDependency( buildKtSdkModule { - contentScope = GlobalSearchScope.fileScope(project, jdkHomeVirtualFile) + contentScope = GlobalSearchScope.fileScope(kotlinCoreProjectEnvironment.project, jdkHomeVirtualFile) this.platform = platform - this.project = project this.binaryRoots = binaryRoots sdkName = "JDK for $moduleName" } @@ -193,7 +192,6 @@ internal fun buildKtModuleProviderByCompilerConfiguration( for (scriptFile in scriptFiles) { buildKtScriptModule { configLanguageVersionSettings?.let { this.languageVersionSettings = it } - this.project = project this.platform = platform this.file = scriptFile @@ -203,16 +201,15 @@ internal fun buildKtModuleProviderByCompilerConfiguration( buildKtSourceModule { configLanguageVersionSettings?.let { this.languageVersionSettings = it } - this.project = project this.platform = platform this.moduleName = compilerConfig.get(CommonConfigurationKeys.MODULE_NAME) ?: "" addModuleDependencies(moduleName) - contentScope = TopDownAnalyzerFacadeForJVM.newModuleSearchScope(project, ordinaryFiles) + contentScope = TopDownAnalyzerFacadeForJVM.newModuleSearchScope(kotlinCoreProjectEnvironment.project, ordinaryFiles) addSourceRoots( getPsiFilesFromPaths( - project, + kotlinCoreProjectEnvironment.project, getSourceFilePaths(compilerConfig, includeDirectoryRoot = true) ) ) @@ -220,5 +217,4 @@ internal fun buildKtModuleProviderByCompilerConfiguration( this.platform = platform - this.project = project }