scripting: PsiModificationStamp add virtual file modification stamp
This commit is contained in:
committed by
Natalia Selezneva
parent
789ad23e8d
commit
2499c42ac4
+33
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user