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 package org.jetbrains.kotlin.idea.highlighter
import com.intellij.psi.PsiElement 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.NotUnderContentRootModuleInfo
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink import org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink
@@ -36,12 +37,14 @@ object KotlinHighlightingUtil {
return true return true
} }
if (ktFile.isScript()) { if (OutsidersPsiFileSupportWrapper.isOutsiderFile(ktFile.virtualFile)) {
return shouldHighlightScript(ktFile) 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)) { if (ktFile.isScript()) {
return true return shouldHighlightScript(ktFile)
} }
return ProjectRootsUtil.isInProjectOrLibraryContent(ktFile) && ktFile.getModuleInfo() !is NotUnderContentRootModuleInfo 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.KotlinFileType
import org.jetbrains.kotlin.idea.core.script.dependencies.AsyncScriptDependenciesLoader 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.FromFileAttributeScriptDependenciesLoader
import org.jetbrains.kotlin.idea.core.script.dependencies.OutsiderFileDependenciesLoader
import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -54,6 +55,7 @@ class ScriptDependenciesUpdater(
private val loaders = arrayListOf( private val loaders = arrayListOf(
FromFileAttributeScriptDependenciesLoader(project), FromFileAttributeScriptDependenciesLoader(project),
OutsiderFileDependenciesLoader(project),
AsyncScriptDependenciesLoader(project), AsyncScriptDependenciesLoader(project),
SyncScriptDependenciesLoader(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.project.Project
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.scriptDependencies import org.jetbrains.kotlin.idea.core.script.scriptDependencies
import kotlin.script.experimental.dependencies.ScriptDependencies
class FromFileAttributeScriptDependenciesLoader(project: Project) : ScriptDependenciesLoader(project) { class FromFileAttributeScriptDependenciesLoader(project: Project) : ScriptDependenciesLoader(project) {
@@ -18,15 +17,7 @@ class FromFileAttributeScriptDependenciesLoader(project: Project) : ScriptDepend
override fun loadDependencies(file: VirtualFile) { override fun loadDependencies(file: VirtualFile) {
val deserializedDependencies = file.scriptDependencies ?: return val deserializedDependencies = file.scriptDependencies ?: return
saveToCache(deserializedDependencies, file) saveToCache(file, deserializedDependencies)
}
private fun saveToCache(deserialized: ScriptDependencies, file: VirtualFile) {
val rootsChanged = cache.hasNotCachedRoots(deserialized)
cache.save(file, deserialized)
if (rootsChanged) {
shouldNotifyRootsChanged = true
}
} }
override fun shouldShowNotification(): Boolean = false 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.ScriptReportSink
import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition import org.jetbrains.kotlin.scripting.resolve.adjustByDefinition
import kotlin.script.experimental.dependencies.DependenciesResolver import kotlin.script.experimental.dependencies.DependenciesResolver
import kotlin.script.experimental.dependencies.ScriptDependencies
abstract class ScriptDependenciesLoader(protected val project: Project) { 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 val dependencies = result.dependencies?.adjustByDefinition(scriptDef) ?: return
saveToCache(file, dependencies)
}
protected fun saveToCache(file: VirtualFile, dependencies: ScriptDependencies) {
val rootsChanged = cache.hasNotCachedRoots(dependencies) val rootsChanged = cache.hasNotCachedRoots(dependencies)
if (cache.save(file, dependencies)) { if (cache.save(file, dependencies)) {
file.scriptDependencies = dependencies file.scriptDependencies = dependencies