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 2718c07cbcb..786ed46f7ef 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 @@ -11,6 +11,40 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper import kotlin.script.experimental.api.ScriptDiagnostic +/** + * Cached configurations for the file's specific snapshot state. + * + * The writer should put related inputs snapshot for loaded configuration. + * This would allow making up-to-date checks for existed entry. + * + * The configuration may be loaded but not applied. So, it makes + * sense to do up-to-date check on loaded configuration (not on applied). + * For those reasons, we are storing both for each file. + */ +interface ScriptConfigurationCache { + operator fun get(file: VirtualFile): ScriptConfigurationState? + + fun setApplied(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) + fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) + fun markOutOfDate(file: VirtualFile) + + fun allApplied(): Collection> +} + +data class ScriptConfigurationState( + val applied: ScriptConfigurationSnapshot? = null, + val loaded: ScriptConfigurationSnapshot? = null +) { + fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile? = null): Boolean = + (loaded ?: applied)?.inputs?.isUpToDate(project, file, ktFile) ?: false +} + +data class ScriptConfigurationSnapshot( + val inputs: CachedConfigurationInputs, + val reports: List, + val configuration: ScriptCompilationConfigurationWrapper? +) + interface CachedConfigurationInputs { fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile? = null): Boolean @@ -22,34 +56,4 @@ interface CachedConfigurationInputs { override fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile?): Boolean = ktFile?.modificationStamp == modificationStamp } -} - -data class ScriptConfigurationSnapshot( - val inputs: CachedConfigurationInputs, - val reports: List, - val configuration: ScriptCompilationConfigurationWrapper? -) - -data class ScriptConfigurationState( - val applied: ScriptConfigurationSnapshot? = null, - val loaded: ScriptConfigurationSnapshot? = null -) { - fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile? = null): Boolean = - (loaded ?: applied)?.inputs?.isUpToDate(project, file, ktFile) ?: false -} - -/** - * Cached configurations for file's specific snapshot state. - * - * Writer should put related inputs snapshot for loaded configuration. - * Reader may do up-to-date check for existed entry. - */ -interface ScriptConfigurationCache { - operator fun get(file: VirtualFile): ScriptConfigurationState? - - fun setApplied(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) - fun setLoaded(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) - fun markOutOfDate(file: VirtualFile) - - fun allApplied(): Collection> } \ No newline at end of file