LastModifiedFiles: fix in case of sequential changes in same file
This commit is contained in:
+8
-4
@@ -11,10 +11,6 @@ import org.jetbrains.kotlin.idea.core.util.readNullable
|
||||
import org.jetbrains.kotlin.idea.core.util.readStringList
|
||||
import org.jetbrains.kotlin.idea.core.util.writeNullable
|
||||
import org.jetbrains.kotlin.idea.core.util.writeStringList
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootData
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootDataSerializer
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.readKotlinDslScriptModels
|
||||
import org.jetbrains.kotlin.idea.scripting.gradle.roots.writeKotlinDslScriptModels
|
||||
import java.io.DataInputStream
|
||||
import java.io.DataOutput
|
||||
|
||||
@@ -31,6 +27,11 @@ class LastModifiedFiles(
|
||||
private var last: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles(),
|
||||
private var previous: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles()
|
||||
) {
|
||||
init {
|
||||
previous.fileIds.removeAll(last.fileIds)
|
||||
if (previous.fileIds.isEmpty()) previous = SimultaneouslyChangedFiles()
|
||||
}
|
||||
|
||||
class SimultaneouslyChangedFiles(
|
||||
val ts: Long = Long.MIN_VALUE,
|
||||
val fileIds: MutableSet<String> = mutableSetOf()
|
||||
@@ -40,7 +41,10 @@ class LastModifiedFiles(
|
||||
fun fileChanged(ts: Long, fileId: String) {
|
||||
when {
|
||||
ts > last.ts -> {
|
||||
val prevPrev = previous
|
||||
previous = last
|
||||
previous.fileIds.remove(fileId)
|
||||
if (previous.fileIds.isEmpty()) previous = prevPrev
|
||||
last = SimultaneouslyChangedFiles(ts, hashSetOf(fileId))
|
||||
}
|
||||
ts == last.ts -> last.fileIds.add(fileId)
|
||||
|
||||
+77
@@ -72,4 +72,81 @@ class LastModifiedFilesTest {
|
||||
assertEquals(3, files.lastModifiedTimeStampExcept("a"))
|
||||
assertEquals(3, files.lastModifiedTimeStampExcept("b"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSameFile() {
|
||||
files.fileChanged(1, "x")
|
||||
files.fileChanged(2, "x")
|
||||
assertEquals(Long.MIN_VALUE, files.lastModifiedTimeStampExcept("x"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSameFile1() {
|
||||
files.fileChanged(1, "z")
|
||||
files.fileChanged(2, "x")
|
||||
files.fileChanged(3, "x")
|
||||
assertEquals(1, files.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(3, files.lastModifiedTimeStampExcept("z"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSameFile2() {
|
||||
files.fileChanged(1, "z")
|
||||
files.fileChanged(1, "x")
|
||||
files.fileChanged(2, "x")
|
||||
assertEquals(1, files.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(2, files.lastModifiedTimeStampExcept("z"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSameFile3() {
|
||||
files.fileChanged(1, "x")
|
||||
files.fileChanged(1, "y")
|
||||
files.fileChanged(2, "x")
|
||||
assertEquals(1, files.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(2, files.lastModifiedTimeStampExcept("y"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSameFile4() {
|
||||
files.fileChanged(1, "z")
|
||||
files.fileChanged(2, "x")
|
||||
files.fileChanged(2, "y")
|
||||
files.fileChanged(3, "x")
|
||||
assertEquals(2, files.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(3, files.lastModifiedTimeStampExcept("y"))
|
||||
assertEquals(3, files.lastModifiedTimeStampExcept("z"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLoadingAfterSameFileBug() {
|
||||
val restored = LastModifiedFiles(
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(2, mutableSetOf("x")),
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(1, mutableSetOf("x"))
|
||||
)
|
||||
|
||||
assertEquals(Long.MIN_VALUE, restored.lastModifiedTimeStampExcept("x"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLoadingAfterSameFileBug2() {
|
||||
val restored = LastModifiedFiles(
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(2, mutableSetOf("x", "y")),
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(1, mutableSetOf("x"))
|
||||
)
|
||||
|
||||
assertEquals(2, restored.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(2, restored.lastModifiedTimeStampExcept("y"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testLoadingAfterSameFileBug3() {
|
||||
val restored = LastModifiedFiles(
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(2, mutableSetOf("x", "y")),
|
||||
LastModifiedFiles.SimultaneouslyChangedFiles(1, mutableSetOf("x", "z"))
|
||||
)
|
||||
|
||||
assertEquals(2, restored.lastModifiedTimeStampExcept("x"))
|
||||
assertEquals(2, restored.lastModifiedTimeStampExcept("y"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user