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 syncLoader = sync.firstOrNull { it.loadDependencies(isFirstLoad, virtualFile, scriptDefinition, loadingContext) }
val syncLoader = sync.firstOrNull { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) }
if (syncLoader == null) {
// run async loader
if (forceSync) {
async.first { it.loadDependencies(isFirstLoad, virtualFile, scriptDefinition, loadingContext) }
async.first { it.loadDependencies(isFirstLoad, file, scriptDefinition, loadingContext) }
} else {
backgroundExecutor.ensureScheduled(virtualFile) {
val cached = getCachedConfigurationState(virtualFile)
@@ -192,7 +192,7 @@ internal class DefaultScriptConfigurationManager(project: Project) :
// don't start loading if nothing was changed
// (in case we checking for up-to-date and loading concurrently)
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.debug
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.findScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource
@@ -30,12 +31,13 @@ internal class ScriptConfigurationFileAttributeCache(
*/
override fun loadDependencies(
isFirstLoad: Boolean,
virtualFile: VirtualFile,
ktFile: KtFile,
scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext
): Boolean {
if (!isFirstLoad) return false
val virtualFile = ktFile.originalFile.virtualFile
val fromFs = load(virtualFile) ?: return false
val result =
ScriptConfigurationSnapshot(
@@ -58,11 +58,11 @@ class GradleScriptConfigurationLoader(project: Project) : DefaultScriptConfigura
override fun loadDependencies(
isFirstLoad: Boolean,
virtualFile: VirtualFile,
ktFile: KtFile,
scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext
): Boolean {
if (!isGradleKotlinScript(virtualFile)) return false
if (!isGradleKotlinScript(ktFile.originalFile.virtualFile)) return false
if (useProjectImport) {
// 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 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.utils.getKtFile
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition
@@ -33,18 +32,18 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
override fun loadDependencies(
isFirstLoad: Boolean,
virtualFile: VirtualFile,
ktFile: KtFile,
scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext
): 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 {
refineScriptCompilationConfiguration(
KtFileScriptSource(file), scriptDefinition, file.project
KtFileScriptSource(ktFile), scriptDefinition, ktFile.project
)
} catch (e: Throwable) {
if (e is ControlFlowException) throw e
@@ -60,7 +59,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
context.suggestNewConfiguration(virtualFile, result)
debug(file) { "finish dependencies loading" }
debug(ktFile) { "finish dependencies loading" }
return true
}
@@ -5,7 +5,7 @@
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
/**
@@ -23,7 +23,7 @@ internal interface ScriptConfigurationLoader {
*/
fun loadDependencies(
isFirstLoad: Boolean,
virtualFile: VirtualFile,
ktFile: KtFile,
scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext
): Boolean
@@ -6,21 +6,22 @@
package org.jetbrains.kotlin.idea.core.script.configuration.loader
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.highlighter.OutsidersPsiFileSupportUtils
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
internal class ScriptOutsiderFileConfigurationLoader(val project: Project) :
ScriptConfigurationLoader {
override fun loadDependencies(
isFirstLoad: Boolean,
virtualFile: VirtualFile,
ktFile: KtFile,
scriptDefinition: ScriptDefinition,
context: ScriptConfigurationLoadingContext
): Boolean {
if (!isFirstLoad) return false
val virtualFile = ktFile.originalFile.virtualFile
val fileOrigin = OutsidersPsiFileSupportUtils.getOutsiderFileOrigin(
project,
virtualFile