Don't highlight scripts if resolver returns Failure.

Note that we don't highlight script when ScriptDependenciesFileAttribute is not set.
This commit is contained in:
Natalia Selezneva
2018-03-02 14:30:44 +03:00
parent 4b4acfee2c
commit 5f1118e820
4 changed files with 7 additions and 23 deletions
@@ -63,17 +63,9 @@ class ScriptDefinitionsManager(private val project: Project): ScriptDefinitionPr
if (contributor !in definitionsByContributor) error("Unknown contributor: ${contributor.id}") if (contributor !in definitionsByContributor) error("Unknown contributor: ${contributor.id}")
if (contributor.isError()) return emptyList()
return definitionsByContributor[contributor] ?: emptyList() return definitionsByContributor[contributor] ?: emptyList()
} }
fun getContributorForDefinition(scriptDefinition: KotlinScriptDefinition): ScriptDefinitionContributor {
for ((contributor, definitions) in definitionsByContributor) {
if (definitions.contains(scriptDefinition)) return contributor
}
throw error("Unknown definition: ${scriptDefinition.name}")
}
private fun currentDefinitions(): List<KotlinScriptDefinition> { private fun currentDefinitions(): List<KotlinScriptDefinition> {
val hasDefinitions = definitions.isNotEmpty() val hasDefinitions = definitions.isNotEmpty()
when { when {
@@ -170,8 +162,6 @@ interface ScriptDefinitionContributor {
fun getDefinitions(): List<KotlinScriptDefinition> fun getDefinitions(): List<KotlinScriptDefinition>
fun isError(): Boolean = false
companion object { companion object {
val EP_NAME: ExtensionPointName<ScriptDefinitionContributor> = val EP_NAME: ExtensionPointName<ScriptDefinitionContributor> =
ExtensionPointName.create<ScriptDefinitionContributor>("org.jetbrains.kotlin.scriptDefinitionContributor") ExtensionPointName.create<ScriptDefinitionContributor>("org.jetbrains.kotlin.scriptDefinitionContributor")
@@ -30,7 +30,7 @@ import kotlin.reflect.KProperty
import kotlin.script.experimental.dependencies.ScriptDependencies import kotlin.script.experimental.dependencies.ScriptDependencies
var VirtualFile.scriptDependencies: ScriptDependencies? by ScriptDependenciesProperty() var VirtualFile.scriptDependencies: ScriptDependencies? by ScriptDependenciesProperty()
private val scriptDependencies = FileAttribute("kotlin-script-dependencies", 2, false) private val scriptDependencies = FileAttribute("kotlin-script-dependencies", 3, false)
private class ScriptDependenciesProperty { private class ScriptDependenciesProperty {
@@ -206,8 +206,8 @@ class ScriptDependenciesUpdater(
requests.replace(file.path, lastRequest, ModStampedRequest(lastRequest.modificationStamp, job = null)) requests.replace(file.path, lastRequest, ModStampedRequest(lastRequest.modificationStamp, job = null))
} }
ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports) ServiceManager.getService(project, ScriptReportSink::class.java)?.attachReports(file, result.reports)
val resultingDependencies = (result.dependencies ?: ScriptDependencies.Empty).adjustByDefinition(scriptDef) val resultingDependencies = result.dependencies?.adjustByDefinition(scriptDef) ?: return
if (saveNewDependencies(resultingDependencies, file, scriptDef)) { if (saveNewDependencies(resultingDependencies, file)) {
notifyRootsChanged() notifyRootsChanged()
} }
} }
@@ -215,17 +215,13 @@ class ScriptDependenciesUpdater(
fun updateSync(file: VirtualFile, scriptDef: KotlinScriptDefinition): Boolean { fun updateSync(file: VirtualFile, scriptDef: KotlinScriptDefinition): Boolean {
val newDeps = contentLoader.loadContentsAndResolveDependencies(scriptDef, file) ?: ScriptDependencies.Empty val newDeps = contentLoader.loadContentsAndResolveDependencies(scriptDef, file) ?: return false
return saveNewDependencies(newDeps, file, scriptDef) return saveNewDependencies(newDeps, file)
} }
private fun saveNewDependencies( private fun saveNewDependencies(new: ScriptDependencies, file: VirtualFile): Boolean {
new: ScriptDependencies,
file: VirtualFile,
scriptDef: KotlinScriptDefinition
): Boolean {
val rootsChanged = cache.hasNotCachedRoots(new) val rootsChanged = cache.hasNotCachedRoots(new)
if (cache.save(file, new) && !ScriptDefinitionsManager.getInstance(project).getContributorForDefinition(scriptDef).isError()) { if (cache.save(file, new)) {
file.scriptDependencies = new file.scriptDependencies = new
} }
return rootsChanged return rootsChanged
@@ -88,8 +88,6 @@ class GradleScriptDefinitionsContributor(private val project: Project) : ScriptD
return loadDefinitions() return loadDefinitions()
} }
override fun isError() = failedToLoad.get()
// NOTE: control flow here depends on suppressing exceptions from loadGradleTemplates calls // NOTE: control flow here depends on suppressing exceptions from loadGradleTemplates calls
// TODO: possibly combine exceptions from every loadGradleTemplates call, be mindful of KT-19276 // TODO: possibly combine exceptions from every loadGradleTemplates call, be mindful of KT-19276
private fun loadDefinitions(): List<KotlinScriptDefinition> { private fun loadDefinitions(): List<KotlinScriptDefinition> {