Fix highlighting for scripts in diff view (KT-30690)
^KT-30690 Fixed
This commit is contained in:
+7
-4
@@ -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)
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-10
@@ -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
|
||||||
|
|||||||
+25
@@ -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
|
||||||
|
}
|
||||||
+5
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user