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.readStringList
|
||||||
import org.jetbrains.kotlin.idea.core.util.writeNullable
|
import org.jetbrains.kotlin.idea.core.util.writeNullable
|
||||||
import org.jetbrains.kotlin.idea.core.util.writeStringList
|
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.DataInputStream
|
||||||
import java.io.DataOutput
|
import java.io.DataOutput
|
||||||
|
|
||||||
@@ -31,6 +27,11 @@ class LastModifiedFiles(
|
|||||||
private var last: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles(),
|
private var last: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles(),
|
||||||
private var previous: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles()
|
private var previous: SimultaneouslyChangedFiles = SimultaneouslyChangedFiles()
|
||||||
) {
|
) {
|
||||||
|
init {
|
||||||
|
previous.fileIds.removeAll(last.fileIds)
|
||||||
|
if (previous.fileIds.isEmpty()) previous = SimultaneouslyChangedFiles()
|
||||||
|
}
|
||||||
|
|
||||||
class SimultaneouslyChangedFiles(
|
class SimultaneouslyChangedFiles(
|
||||||
val ts: Long = Long.MIN_VALUE,
|
val ts: Long = Long.MIN_VALUE,
|
||||||
val fileIds: MutableSet<String> = mutableSetOf()
|
val fileIds: MutableSet<String> = mutableSetOf()
|
||||||
@@ -40,7 +41,10 @@ class LastModifiedFiles(
|
|||||||
fun fileChanged(ts: Long, fileId: String) {
|
fun fileChanged(ts: Long, fileId: String) {
|
||||||
when {
|
when {
|
||||||
ts > last.ts -> {
|
ts > last.ts -> {
|
||||||
|
val prevPrev = previous
|
||||||
previous = last
|
previous = last
|
||||||
|
previous.fileIds.remove(fileId)
|
||||||
|
if (previous.fileIds.isEmpty()) previous = prevPrev
|
||||||
last = SimultaneouslyChangedFiles(ts, hashSetOf(fileId))
|
last = SimultaneouslyChangedFiles(ts, hashSetOf(fileId))
|
||||||
}
|
}
|
||||||
ts == last.ts -> last.fileIds.add(fileId)
|
ts == last.ts -> last.fileIds.add(fileId)
|
||||||
|
|||||||
+77
@@ -72,4 +72,81 @@ class LastModifiedFilesTest {
|
|||||||
assertEquals(3, files.lastModifiedTimeStampExcept("a"))
|
assertEquals(3, files.lastModifiedTimeStampExcept("a"))
|
||||||
assertEquals(3, files.lastModifiedTimeStampExcept("b"))
|
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