Scripting: pass KtFile to ScriptConfigurationLoader

This commit is contained in:
Sergey Rostov
2019-11-13 10:23:28 +03:00
parent 9a231bbbfa
commit a84e948051
6 changed files with 20 additions and 18 deletions
@@ -175,11 +175,11 @@ internal class DefaultScriptConfigurationManager(project: Project) :
val (async, sync) = loaders.partition { it.shouldRunInBackground(scriptDefinition) } val (async, sync) = loaders.partition { it.shouldRunInBackground(scriptDefinition) }
val syncLoader = sync.firstOrNull { it.loadDependencies(isFirstLoad, virtualFile, scriptDefinition, loadingContext) } val syncLoader = sync.firstOrNull { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) }
if (syncLoader == null) { if (syncLoader == null) {
// run async loader // run async loader
if (forceSync) { if (forceSync) {
async.first { it.loadDependencies(isFirstLoad, virtualFile, scriptDefinition, loadingContext) } async.first { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) }
} else { } else {
backgroundExecutor.ensureScheduled(virtualFile) { backgroundExecutor.ensureScheduled(virtualFile) {
val cached = getCachedConfigurationState(virtualFile) val cached = getCachedConfigurationState(virtualFile)
@@ -192,7 +192,7 @@ internal class DefaultScriptConfigurationManager(project: Project) :
// don't start loading if nothing was changed // don't start loading if nothing was changed
// (in case we checking for up-to-date and loading concurrently) // (in case we checking for up-to-date and loading concurrently)
val actualIsFirstLoad = cached == null val actualIsFirstLoad = cached == null
async.first { it.loadDependencies(actualIsFirstLoad, virtualFile, scriptDefinition, loadingContext) } async.first { it.loadDependencies(actualIsFirstLoad, file, scriptDefinition, loadingContext) }
} }
} }
} }
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigur
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.util.* import org.jetbrains.kotlin.idea.core.util.*
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource
@@ -30,12 +31,13 @@ internal class ScriptConfigurationFileAttributeCache(
*/ */
override fun loadDependencies( override fun loadDependencies(
isFirstLoad: Boolean, isFirstLoad: Boolean,
virtualFile: VirtualFile, ktFile: KtFile,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext context: ScriptConfigurationLoadingContext
): Boolean { ): Boolean {
if (!isFirstLoad) return false if (!isFirstLoad) return false
val virtualFile = ktFile.originalFile.virtualFile
val fromFs = load(virtualFile) ?: return false val fromFs = load(virtualFile) ?: return false
val result = val result =
ScriptConfigurationSnapshot( ScriptConfigurationSnapshot(
@@ -58,11 +58,11 @@ class GradleScriptConfigurationLoader(project: Project) : DefaultScriptConfigura
override fun loadDependencies( override fun loadDependencies(
isFirstLoad: Boolean, isFirstLoad: Boolean,
virtualFile: VirtualFile, ktFile: KtFile,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext context: ScriptConfigurationLoadingContext
): Boolean { ): Boolean {
if (!isGradleKotlinScript(virtualFile)) return false if (!isGradleKotlinScript(ktFile.originalFile.virtualFile)) return false
if (useProjectImport) { if (useProjectImport) {
// do nothing, project import notification will be already showed // do nothing, project import notification will be already showed
@@ -78,7 +78,7 @@ class GradleScriptConfigurationLoader(project: Project) : DefaultScriptConfigura
} }
} }
return super.loadDependencies(isFirstLoad, virtualFile, scriptDefinition, context) return super.loadDependencies(isFirstLoad, ktFile, scriptDefinition, context)
} }
} }
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
import org.jetbrains.kotlin.idea.core.script.debug import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
@@ -33,18 +32,18 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
override fun loadDependencies( override fun loadDependencies(
isFirstLoad: Boolean, isFirstLoad: Boolean,
virtualFile: VirtualFile, ktFile: KtFile,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext context: ScriptConfigurationLoadingContext
): Boolean { ): Boolean {
val file = project.getKtFile(virtualFile) ?: return false val virtualFile = ktFile.originalFile.virtualFile
debug(file) { "start dependencies loading" } debug(ktFile) { "start dependencies loading" }
val inputs = getInputsStamp(virtualFile, file) val inputs = getInputsStamp(virtualFile, ktFile)
val scriptingApiResult = try { val scriptingApiResult = try {
refineScriptCompilationConfiguration( refineScriptCompilationConfiguration(
KtFileScriptSource(file), scriptDefinition, file.project KtFileScriptSource(ktFile), scriptDefinition, ktFile.project
) )
} catch (e: Throwable) { } catch (e: Throwable) {
if (e is ControlFlowException) throw e if (e is ControlFlowException) throw e
@@ -60,7 +59,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
context.suggestNewConfiguration(virtualFile, result) context.suggestNewConfiguration(virtualFile, result)
debug(file) { "finish dependencies loading" } debug(ktFile) { "finish dependencies loading" }
return true return true
} }
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.idea.core.script.configuration.loader package org.jetbrains.kotlin.idea.core.script.configuration.loader
import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
/** /**
@@ -23,7 +23,7 @@ internal interface ScriptConfigurationLoader {
*/ */
fun loadDependencies( fun loadDependencies(
isFirstLoad: Boolean, isFirstLoad: Boolean,
virtualFile: VirtualFile, ktFile: KtFile,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext context: ScriptConfigurationLoadingContext
): Boolean ): Boolean
@@ -6,21 +6,22 @@
package org.jetbrains.kotlin.idea.core.script.configuration.loader package org.jetbrains.kotlin.idea.core.script.configuration.loader
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportUtils import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportUtils
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
internal class ScriptOutsiderFileConfigurationLoader(val project: Project) : internal class ScriptOutsiderFileConfigurationLoader(val project: Project) :
ScriptConfigurationLoader { ScriptConfigurationLoader {
override fun loadDependencies( override fun loadDependencies(
isFirstLoad: Boolean, isFirstLoad: Boolean,
virtualFile: VirtualFile, ktFile: KtFile,
scriptDefinition: ScriptDefinition, scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext context: ScriptConfigurationLoadingContext
): Boolean { ): Boolean {
if (!isFirstLoad) return false if (!isFirstLoad) return false
val virtualFile = ktFile.originalFile.virtualFile
val fileOrigin = OutsidersPsiFileSupportUtils.getOutsiderFileOrigin( val fileOrigin = OutsidersPsiFileSupportUtils.getOutsiderFileOrigin(
project, project,
virtualFile virtualFile