[Analysis API Standalone] do not force users to provide a project for building KtModule as it's already known
^KT-60884
This commit is contained in:
committed by
Space Team
parent
dca4015cba
commit
3f689494ad
+2
-2
@@ -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)),
|
||||
)
|
||||
}
|
||||
|
||||
+7
-4
@@ -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()
|
||||
}
|
||||
+7
-4
@@ -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()
|
||||
}
|
||||
-2
@@ -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
|
||||
}
|
||||
+11
-8
@@ -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<KtModule> = 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()
|
||||
}
|
||||
|
||||
+7
-4
@@ -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()
|
||||
}
|
||||
+7
-4
@@ -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()
|
||||
}
|
||||
+7
-4
@@ -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()
|
||||
}
|
||||
+8
-12
@@ -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 <reified T : PsiFileSystemItem> getPsiFilesFromPaths(
|
||||
}
|
||||
|
||||
internal fun buildKtModuleProviderByCompilerConfiguration(
|
||||
kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment,
|
||||
compilerConfig: CompilerConfiguration,
|
||||
project: Project,
|
||||
ktFiles: List<KtFile>,
|
||||
): 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) ?: "<no module name provided>"
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user