Pass provided script configuration to refining code
when script compilation configuration refinement happening during parsing, the updated configuration passed to the script compiler/REPL compile function is now used. #KT-44580 fixed
This commit is contained in:
+6
@@ -13,6 +13,7 @@ import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.api.valueOrNull
|
||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||
|
||||
@@ -35,6 +36,11 @@ open class ScriptDependenciesProvider constructor(
|
||||
|
||||
open fun getScriptConfigurationResult(file: KtFile): ScriptCompilationConfigurationResult? = null
|
||||
|
||||
// TODO: consider fixing implementations and removing default implementation
|
||||
open fun getScriptConfigurationResult(
|
||||
file: KtFile, providedConfiguration: ScriptCompilationConfiguration?
|
||||
): ScriptCompilationConfigurationResult? = getScriptConfigurationResult(file)
|
||||
|
||||
open fun getScriptConfiguration(file: KtFile): ScriptCompilationConfigurationWrapper? = getScriptConfigurationResult(file)?.valueOrNull()
|
||||
|
||||
companion object {
|
||||
|
||||
+6
-5
@@ -103,7 +103,7 @@ class ScriptLightVirtualFile(name: String, private val _path: String?, text: Str
|
||||
|
||||
override fun getPath(): String = _path ?: if (parent != null) parent.path + "/" + name else name
|
||||
|
||||
override fun getCanonicalPath(): String? = path
|
||||
override fun getCanonicalPath() = path
|
||||
}
|
||||
|
||||
abstract class ScriptCompilationConfigurationWrapper(val script: SourceCode) {
|
||||
@@ -187,8 +187,8 @@ abstract class ScriptCompilationConfigurationWrapper(val script: SourceCode) {
|
||||
override val configuration: ScriptCompilationConfiguration?
|
||||
get() {
|
||||
val legacy = legacyDependencies ?: return null
|
||||
return definition?.compilationConfiguration?.let {
|
||||
ScriptCompilationConfiguration(it) {
|
||||
return definition?.compilationConfiguration?.let { config ->
|
||||
ScriptCompilationConfiguration(config) {
|
||||
updateClasspath(legacy.classpath)
|
||||
defaultImports.append(legacy.imports)
|
||||
importScripts.append(legacy.scripts.map { FileScriptSource(it) })
|
||||
@@ -221,13 +221,14 @@ typealias ScriptCompilationConfigurationResult = ResultWithDiagnostics<ScriptCom
|
||||
fun refineScriptCompilationConfiguration(
|
||||
script: SourceCode,
|
||||
definition: ScriptDefinition,
|
||||
project: Project
|
||||
project: Project,
|
||||
providedConfiguration: ScriptCompilationConfiguration? = null // if null - take from definition
|
||||
): ScriptCompilationConfigurationResult {
|
||||
// TODO: add location information on refinement errors
|
||||
val ktFileSource = script.toKtFileSource(definition, project)
|
||||
val legacyDefinition = definition.asLegacyOrNull<KotlinScriptDefinition>()
|
||||
if (legacyDefinition == null) {
|
||||
val compilationConfiguration = definition.compilationConfiguration
|
||||
val compilationConfiguration = providedConfiguration ?: definition.compilationConfiguration
|
||||
val collectedData =
|
||||
runReadAction {
|
||||
getScriptCollectedData(ktFileSource.ktFile, compilationConfiguration, project, definition.contextClassLoader)
|
||||
|
||||
Reference in New Issue
Block a user