@@ -51,12 +51,16 @@ internal class ScriptDependenciesUpdater(
5151 listenToVfsChanges()
5252 }
5353
54- private class TimeStampedRequest (val job : Job , val timeStamp : TimeStamp )
54+ private class TimeStampedJob (val actualJob : Job , val timeStamp : TimeStamp ) {
55+ fun stampBy (virtualFile : VirtualFile ) = ModStampedRequest (virtualFile.modificationStamp, this )
56+ }
5557
5658 private class ModStampedRequest (
5759 val modificationStamp : Long ,
58- val request : TimeStampedRequest ? = null
59- )
60+ val job : TimeStampedJob ? = null
61+ ) {
62+ fun cancel () = job?.actualJob?.cancel()
63+ }
6064
6165 fun getCurrentDependencies (file : VirtualFile ): ScriptDependencies {
6266 cache[file]?.let { return it }
@@ -108,14 +112,9 @@ internal class ScriptDependenciesUpdater(
108112 return
109113 }
110114
111- lastRequest?.request?.job?.cancel()
112-
113- val (currentTimeStamp, newJob) = sendRequest(file, scriptDefinition)
115+ lastRequest?.cancel()
114116
115- requests[path] = ModStampedRequest (
116- file.modificationStamp,
117- TimeStampedRequest (newJob, currentTimeStamp)
118- )
117+ requests[path] = sendRequest(file, scriptDefinition).stampBy(file)
119118 return
120119 }
121120
@@ -127,13 +126,13 @@ internal class ScriptDependenciesUpdater(
127126 return true
128127 }
129128
130- return previousRequest.request == null
129+ return previousRequest.job == null
131130 }
132131
133132 private fun sendRequest (
134133 file : VirtualFile ,
135134 scriptDef : KotlinScriptDefinition
136- ): Pair < TimeStamp , Job > {
135+ ): TimeStampedJob {
137136 val currentTimeStamp = TimeStamps .next()
138137 val dependenciesResolver = scriptDef.dependencyResolver as AsyncDependenciesResolver
139138 val path = file.path
@@ -143,7 +142,7 @@ internal class ScriptDependenciesUpdater(
143142 contentLoader.getScriptContents(scriptDef, file),
144143 contentLoader.getEnvironment(scriptDef)
145144 )
146- val lastTimeStamp = requests[path]?.request ?.timeStamp
145+ val lastTimeStamp = requests[path]?.job ?.timeStamp
147146 val isLastSentRequest = lastTimeStamp == null || lastTimeStamp == currentTimeStamp
148147 if (isLastSentRequest) {
149148 ServiceManager .getService(project, ScriptReportSink ::class .java)?.attachReports(file, result.reports)
@@ -152,7 +151,7 @@ internal class ScriptDependenciesUpdater(
152151 }
153152 }
154153 }
155- return Pair (currentTimeStamp, newJob )
154+ return TimeStampedJob (newJob, currentTimeStamp )
156155 }
157156
158157 fun updateSync (file : VirtualFile , scriptDef : KotlinScriptDefinition ): Boolean {
0 commit comments