in trace/src/main/org/jetbrains/lincheck/trace/Deserialization.kt [757:791]
fun loadRecordedTrace(traceFileName: String): TraceWithContext {
val input = openExistingFile(traceFileName)?.buffered(INPUT_BUFFER_SIZE)
require(input != null) { "Cannot open trace \"$traceFileName\"" }
input.use {
// Try as ZIP
val (stream, meta) = run {
val zip = ZipInputStream(input)
val metaEntry = zip.nextEntry ?: return@run null to null // Not ZIP
if (metaEntry.name != PACKED_META_ITEM_NAME) throwZipError(traceFileName)
// Try to load metainfo
val meta = TraceMetaInfo.read(zip)
// Check next entry
val dataEntry = zip.nextEntry ?: throwZipError(traceFileName)
if (dataEntry.name != PACKED_DATA_ITEM_NAME) throwZipError(traceFileName)
zip to meta
}
if (stream != null) {
stream.use {
return loadRecordedTrace(it, meta)
}
} else {
// Not ZIP at all, raw trace
input.close()
val rawInput = openExistingFile(traceFileName)?.buffered(INPUT_BUFFER_SIZE)
require(rawInput != null) { "Cannot open trace \"$traceFileName\"" }
rawInput.use {
return loadRecordedTrace(it, null)
}
}
}
}