Load file attributes for last modified files under try-catch
This should avoid exceptions from initialization of GradleBuildRootsManager.EP EA-232521 Fixed
This commit is contained in:
+29
-9
@@ -13,6 +13,7 @@ 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 java.io.DataInputStream
|
import java.io.DataInputStream
|
||||||
import java.io.DataOutput
|
import java.io.DataOutput
|
||||||
|
import java.io.DataOutputStream
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Optimized collection for storing last modified files with ability to
|
* Optimized collection for storing last modified files with ability to
|
||||||
@@ -62,19 +63,38 @@ class LastModifiedFiles(
|
|||||||
private val fileAttribute = FileAttribute("last-modified-files", 1, false)
|
private val fileAttribute = FileAttribute("last-modified-files", 1, false)
|
||||||
|
|
||||||
fun read(buildRoot: VirtualFile): LastModifiedFiles? {
|
fun read(buildRoot: VirtualFile): LastModifiedFiles? {
|
||||||
return fileAttribute.readAttribute(buildRoot)?.use {
|
try {
|
||||||
it.readNullable {
|
return fileAttribute.readAttribute(buildRoot)?.use {
|
||||||
LastModifiedFiles(readSCF(it), readSCF(it))
|
readLastModifiedFiles(it)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
scriptingErrorLog("Cannot read data for buildRoot=$buildRoot from file attributes", e)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun readLastModifiedFiles(it: DataInputStream) = it.readNullable {
|
||||||
|
LastModifiedFiles(readSCF(it), readSCF(it))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun write(buildRoot: VirtualFile, data: LastModifiedFiles?) {
|
||||||
|
try {
|
||||||
|
fileAttribute.writeAttribute(buildRoot).use {
|
||||||
|
writeLastModifiedFiles(it, data)
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
scriptingErrorLog("Cannot store data=$data for buildRoot=$buildRoot to file attributes", e)
|
||||||
|
|
||||||
|
fileAttribute.writeAttribute(buildRoot).use {
|
||||||
|
writeLastModifiedFiles(it, null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun write(buildRoot: VirtualFile, data: LastModifiedFiles?) {
|
internal fun writeLastModifiedFiles(it: DataOutputStream, data: LastModifiedFiles?) {
|
||||||
fileAttribute.writeAttribute(buildRoot).use {
|
it.writeNullable(data) { data ->
|
||||||
it.writeNullable(data) { data ->
|
writeSCF(data.last)
|
||||||
writeSCF(data.last)
|
writeSCF(data.previous)
|
||||||
writeSCF(data.previous)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+34
@@ -6,6 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.idea.scripting.gradle
|
package org.jetbrains.kotlin.idea.scripting.gradle
|
||||||
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import java.io.ByteArrayInputStream
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.io.DataInputStream
|
||||||
|
import java.io.DataOutputStream
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
class LastModifiedFilesTest {
|
class LastModifiedFilesTest {
|
||||||
@@ -149,4 +153,34 @@ class LastModifiedFilesTest {
|
|||||||
assertEquals(2, restored.lastModifiedTimeStampExcept("x"))
|
assertEquals(2, restored.lastModifiedTimeStampExcept("x"))
|
||||||
assertEquals(2, restored.lastModifiedTimeStampExcept("y"))
|
assertEquals(2, restored.lastModifiedTimeStampExcept("y"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testFileAttributes() {
|
||||||
|
val expected = LastModifiedFiles(
|
||||||
|
LastModifiedFiles.SimultaneouslyChangedFiles(System.currentTimeMillis(), mutableSetOf("C:file/sldkfjlsdkjf")),
|
||||||
|
LastModifiedFiles.SimultaneouslyChangedFiles(System.currentTimeMillis(), mutableSetOf("C:/file/foo/d/"))
|
||||||
|
)
|
||||||
|
checkFileAttributesSave(expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testFileAttributesNullable() {
|
||||||
|
val expected: LastModifiedFiles? = null
|
||||||
|
checkFileAttributesSave(expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testDefaultFileAttributes() {
|
||||||
|
val expected = LastModifiedFiles()
|
||||||
|
checkFileAttributesSave(expected)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkFileAttributesSave(expected: LastModifiedFiles?) {
|
||||||
|
val buffer = ByteArrayOutputStream()
|
||||||
|
LastModifiedFiles.writeLastModifiedFiles(DataOutputStream(buffer), expected)
|
||||||
|
|
||||||
|
val actual = LastModifiedFiles.readLastModifiedFiles(DataInputStream(ByteArrayInputStream(buffer.toByteArray())))
|
||||||
|
|
||||||
|
assertEquals(expected.toString(), actual.toString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user