diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/cache/ScriptConfigurationCache.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/cache/ScriptConfigurationCache.kt index 786ed46f7ef..710bac51101 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/cache/ScriptConfigurationCache.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/cache/ScriptConfigurationCache.kt @@ -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) + } + } } } \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/gradle.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/gradle.kt index 6502ab2d785..d2edbb4b333 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/gradle.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/gradle.kt @@ -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) } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/loader/DefaultScriptConfigurationLoader.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/loader/DefaultScriptConfigurationLoader.kt index 7afb9447319..9a65b74f2d6 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/loader/DefaultScriptConfigurationLoader.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/loader/DefaultScriptConfigurationLoader.kt @@ -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) + } } \ No newline at end of file