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 java.io.DataInputStream
|
||||
import java.io.DataOutput
|
||||
import java.io.DataOutputStream
|
||||
|
||||
/**
|
||||
* 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)
|
||||
|
||||
fun read(buildRoot: VirtualFile): LastModifiedFiles? {
|
||||
return fileAttribute.readAttribute(buildRoot)?.use {
|
||||
it.readNullable {
|
||||
LastModifiedFiles(readSCF(it), readSCF(it))
|
||||
try {
|
||||
return fileAttribute.readAttribute(buildRoot)?.use {
|
||||
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?) {
|
||||
fileAttribute.writeAttribute(buildRoot).use {
|
||||
it.writeNullable(data) { data ->
|
||||
writeSCF(data.last)
|
||||
writeSCF(data.previous)
|
||||
}
|
||||
internal fun writeLastModifiedFiles(it: DataOutputStream, data: LastModifiedFiles?) {
|
||||
it.writeNullable(data) { data ->
|
||||
writeSCF(data.last)
|
||||
writeSCF(data.previous)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+34
@@ -6,6 +6,10 @@
|
||||
package org.jetbrains.kotlin.idea.scripting.gradle
|
||||
|
||||
import org.junit.Test
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.DataInputStream
|
||||
import java.io.DataOutputStream
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class LastModifiedFilesTest {
|
||||
@@ -149,4 +153,34 @@ class LastModifiedFilesTest {
|
||||
assertEquals(2, restored.lastModifiedTimeStampExcept("x"))
|
||||
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