fun loadRecordedTrace()

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)
            }
        }
    }
}