Fix highlighting for scripts in diff view (KT-30690)

^KT-30690 Fixed
This commit is contained in:
Natalia Selezneva
2019-03-27 14:02:54 +03:00
parent 88c6ecbbdf
commit 495d98f997
5 changed files with 40 additions and 14 deletions
@@ -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
@@ -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)
)
@@ -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
@@ -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
}
@@ -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