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
|
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.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
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.psi.KtFile
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||||
import kotlin.script.experimental.api.ScriptDiagnostic
|
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||||
@@ -52,8 +55,36 @@ interface CachedConfigurationInputs {
|
|||||||
override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean = false
|
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 =
|
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 {
|
override fun getInputsStamp(virtualFile: VirtualFile, file: KtFile): CachedConfigurationInputs {
|
||||||
return getGradleScriptInputsStamp(project, file.virtualFile, file) ?: super.getInputsStamp(file)
|
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" }
|
debug(file) { "start dependencies loading" }
|
||||||
|
|
||||||
val inputs = getInputsStamp(file)
|
val inputs = getInputsStamp(virtualFile, file)
|
||||||
val scriptingApiResult = try {
|
val scriptingApiResult = try {
|
||||||
refineScriptCompilationConfiguration(
|
refineScriptCompilationConfiguration(
|
||||||
KtFileScriptSource(file), scriptDefinition, file.project
|
KtFileScriptSource(file), scriptDefinition, file.project
|
||||||
@@ -65,6 +65,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun getInputsStamp(file: KtFile): CachedConfigurationInputs =
|
protected open fun getInputsStamp(virtualFile: VirtualFile, file: KtFile): CachedConfigurationInputs {
|
||||||
CachedConfigurationInputs.PsiModificationStamp(file.modificationStamp)
|
return CachedConfigurationInputs.PsiModificationStamp.get(project, virtualFile, file)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user