scripting: PsiModificationStamp add virtual file modification stamp

This commit is contained in:
Sergey Rostov
2019-11-06 13:13:41 +03:00
committed by Natalia Selezneva
parent 789ad23e8d
commit 2499c42ac4
3 changed files with 39 additions and 7 deletions
@@ -5,8 +5,11 @@
package org.jetbrains.kotlin.idea.core.script.configuration.cache
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
import kotlin.script.experimental.api.ScriptDiagnostic
@@ -52,8 +55,36 @@ interface CachedConfigurationInputs {
override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean = false
}
data class PsiModificationStamp(val modificationStamp: Long) : CachedConfigurationInputs {
data class PsiModificationStamp(
val fileModificationStamp: Long,
val psiModificationStamp: Long
) : CachedConfigurationInputs {
override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean =
ktFile?.modificationStamp == modificationStamp
get(project, file, ktFile) == this
companion object {
fun get(project: Project, file: VirtualFile, ktFile: KtFile?): PsiModificationStamp {
val actualKtFile = project.getKtFile(file, ktFile)
return PsiModificationStamp(
file.modificationStamp,
actualKtFile?.modificationStamp ?: 0
)
}
}
}
data class SourceContentsStamp(val source: String) : CachedConfigurationInputs {
override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean =
get(project, file, ktFile) == this
companion object {
fun get(project: Project, file: VirtualFile, ktFile: KtFile?): SourceContentsStamp {
val text = runReadAction {
FileDocumentManager.getInstance().getDocument(file)!!.text
}
return SourceContentsStamp(text)
}
}
}
}
@@ -82,8 +82,8 @@ class GradleScriptConfigurationLoader(project: Project) : DefaultScriptConfigura
}
}
override fun getInputsStamp(file: KtFile): CachedConfigurationInputs {
return getGradleScriptInputsStamp(project, file.virtualFile, file) ?: super.getInputsStamp(file)
override fun getInputsStamp(virtualFile: VirtualFile, file: KtFile): CachedConfigurationInputs {
return getGradleScriptInputsStamp(project, virtualFile, file) ?: super.getInputsStamp(virtualFile, file)
}
}
@@ -41,7 +41,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
debug(file) { "start dependencies loading" }
val inputs = getInputsStamp(file)
val inputs = getInputsStamp(virtualFile, file)
val scriptingApiResult = try {
refineScriptCompilationConfiguration(
KtFileScriptSource(file), scriptDefinition, file.project
@@ -65,6 +65,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
return true
}
protected open fun getInputsStamp(file: KtFile): CachedConfigurationInputs =
CachedConfigurationInputs.PsiModificationStamp(file.modificationStamp)
protected open fun getInputsStamp(virtualFile: VirtualFile, file: KtFile): CachedConfigurationInputs {
return CachedConfigurationInputs.PsiModificationStamp.get(project, virtualFile, file)
}
}