From 495d98f99788c3098a889234c36af940ee233c51 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Wed, 27 Mar 2019 14:02:54 +0300 Subject: [PATCH] Fix highlighting for scripts in diff view (KT-30690) ^KT-30690 Fixed --- .../highlighter/KotlinHighlightingUtil.kt | 11 +++++--- .../core/script/ScriptDependenciesUpdater.kt | 2 ++ ...omFileAttributeScriptDependenciesLoader.kt | 11 +------- .../OutsiderFileDependenciesLoader.kt | 25 +++++++++++++++++++ .../dependencies/ScriptDependenciesLoader.kt | 5 ++++ 5 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/OutsiderFileDependenciesLoader.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingUtil.kt index c149c07577c..25cd9a9934e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/highlighter/KotlinHighlightingUtil.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.highlighter import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo import org.jetbrains.kotlin.idea.caches.project.getModuleInfo import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink @@ -36,12 +37,14 @@ object KotlinHighlightingUtil { return true } - if (ktFile.isScript()) { - return shouldHighlightScript(ktFile) + if (OutsidersPsiFileSupportWrapper.isOutsiderFile(ktFile.virtualFile)) { + val origin = OutsidersPsiFileSupportUtils.getOutsiderFileOrigin(ktFile.project, ktFile.virtualFile) ?: return false + val psiFileOrigin = PsiManager.getInstance(ktFile.project).findFile(origin) ?: return false + return shouldHighlight(psiFileOrigin) } - if (OutsidersPsiFileSupportWrapper.isOutsiderFile(ktFile.virtualFile)) { - return true + if (ktFile.isScript()) { + return shouldHighlightScript(ktFile) } return ProjectRootsUtil.isInProjectOrLibraryContent(ktFile) && ktFile.getModuleInfo() !is NotUnderContentRootModuleInfo diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt index 60c217cc915..9b5dac1e1de 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDependenciesUpdater.kt @@ -35,6 +35,7 @@ import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.core.script.dependencies.AsyncScriptDependenciesLoader import org.jetbrains.kotlin.idea.core.script.dependencies.FromFileAttributeScriptDependenciesLoader +import org.jetbrains.kotlin.idea.core.script.dependencies.OutsiderFileDependenciesLoader import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.KtFile @@ -54,6 +55,7 @@ class ScriptDependenciesUpdater( private val loaders = arrayListOf( FromFileAttributeScriptDependenciesLoader(project), + OutsiderFileDependenciesLoader(project), AsyncScriptDependenciesLoader(project), SyncScriptDependenciesLoader(project) ) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/FromFileAttributeScriptDependenciesLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/FromFileAttributeScriptDependenciesLoader.kt index af3dcbfcc79..eeeb77facb1 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/FromFileAttributeScriptDependenciesLoader.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/FromFileAttributeScriptDependenciesLoader.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.core.script.dependencies import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.idea.core.script.scriptDependencies -import kotlin.script.experimental.dependencies.ScriptDependencies class FromFileAttributeScriptDependenciesLoader(project: Project) : ScriptDependenciesLoader(project) { @@ -18,15 +17,7 @@ class FromFileAttributeScriptDependenciesLoader(project: Project) : ScriptDepend override fun loadDependencies(file: VirtualFile) { val deserializedDependencies = file.scriptDependencies ?: return - saveToCache(deserializedDependencies, file) - } - - private fun saveToCache(deserialized: ScriptDependencies, file: VirtualFile) { - val rootsChanged = cache.hasNotCachedRoots(deserialized) - cache.save(file, deserialized) - if (rootsChanged) { - shouldNotifyRootsChanged = true - } + saveToCache(file, deserializedDependencies) } override fun shouldShowNotification(): Boolean = false diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/OutsiderFileDependenciesLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/OutsiderFileDependenciesLoader.kt new file mode 100644 index 00000000000..3ca39444a07 --- /dev/null +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/OutsiderFileDependenciesLoader.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.core.script.dependencies + +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager +import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportUtils +import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportWrapper + +class OutsiderFileDependenciesLoader(project: Project) : ScriptDependenciesLoader(project) { + override fun isApplicable(file: VirtualFile): Boolean { + return OutsidersPsiFileSupportWrapper.isOutsiderFile(file) + } + + override fun loadDependencies(file: VirtualFile) { + val fileOrigin = OutsidersPsiFileSupportUtils.getOutsiderFileOrigin(project, file) ?: return + saveToCache(file, ScriptDependenciesManager.getInstance(project).getScriptDependencies(fileOrigin)) + } + + override fun shouldShowNotification(): Boolean = false +} \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt index 1f673000647..c982e76f7a5 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/ScriptDependenciesLoader.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptContentLoader import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition import kotlin.script.experimental.dependencies.DependenciesResolver +import kotlin.script.experimental.dependencies.ScriptDependencies abstract class ScriptDependenciesLoader(protected val project: Project) { @@ -86,6 +87,10 @@ abstract class ScriptDependenciesLoader(protected val project: Project) { } val dependencies = result.dependencies?.adjustByDefinition(scriptDef) ?: return + saveToCache(file, dependencies) + } + + protected fun saveToCache(file: VirtualFile, dependencies: ScriptDependencies) { val rootsChanged = cache.hasNotCachedRoots(dependencies) if (cache.save(file, dependencies)) { file.scriptDependencies = dependencies