From bd295df7d0c185fc171f5dadd54dded3df3c6995 Mon Sep 17 00:00:00 2001 From: Alexander Korepanov Date: Wed, 4 Jan 2023 14:41:16 +0100 Subject: [PATCH] [JS IR IC] Do not recreate out files Optimization: FileOutputStream truncates the existing files, therefore no need to delete and create a new file each time. --- .../kotlin/ir/backend/js/ic/ICUtils.kt | 17 +++-------------- .../backend/js/ic/IncrementalCacheArtifact.kt | 4 ++-- .../ir/backend/js/ic/JsMultiModuleCache.kt | 4 ++-- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ICUtils.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ICUtils.kt index 881726fc7ba..4e60e2e9424 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ICUtils.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/ICUtils.kt @@ -8,23 +8,12 @@ package org.jetbrains.kotlin.ir.backend.js.ic import org.jetbrains.kotlin.protobuf.CodedInputStream import org.jetbrains.kotlin.protobuf.CodedOutputStream import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream import java.io.OutputStream internal inline fun File.ifExists(f: File.() -> T): T? = if (exists()) f() else null -internal fun File.recreate() { - if (exists()) { - delete() - } else { - parentFile?.mkdirs() - } - createNewFile() -} - internal inline fun File.useCodedInputIfExists(f: CodedInputStream.() -> T) = ifExists { - FileInputStream(this).use { + inputStream().use { CodedInputStream.newInstance(it).f() } } @@ -36,8 +25,8 @@ internal inline fun OutputStream.useCodedOutput(f: CodedOutputStream.() -> Unit) } internal inline fun File.useCodedOutput(f: CodedOutputStream.() -> Unit) { - recreate() - FileOutputStream(this).useCodedOutput(f) + parentFile?.mkdirs() + outputStream().useCodedOutput(f) } internal fun icError(what: String, libFile: KotlinLibraryFile? = null, srcFile: KotlinSourceFile? = null): Nothing { diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCacheArtifact.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCacheArtifact.kt index 5174d6b91b8..58a88baee36 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCacheArtifact.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/IncrementalCacheArtifact.kt @@ -15,7 +15,7 @@ internal sealed class SourceFileCacheArtifact(val srcFile: KotlinSourceFile, val abstract fun commitMetadata() fun commitBinaryAst(fragment: JsIrProgramFragment) { - binaryAstFile.recreate() + binaryAstFile.parentFile?.mkdirs() BufferedOutputStream(binaryAstFile.outputStream()).use { fragment.serializeTo(it) } @@ -32,7 +32,7 @@ internal sealed class SourceFileCacheArtifact(val srcFile: KotlinSourceFile, val private val encodedMetadata: ByteArray ) : SourceFileCacheArtifact(srcFile, binaryAstFile) { override fun commitMetadata() { - metadataFile.recreate() + metadataFile.parentFile?.mkdirs() metadataFile.writeBytes(encodedMetadata) } } diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt index 8de3b97d195..506c9a369b4 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/ic/JsMultiModuleCache.kt @@ -91,10 +91,10 @@ class JsMultiModuleCache(private val moduleArtifacts: List) { private fun File.writeIfNotNull(data: String?) { if (data != null) { - recreate() + parentFile?.mkdirs() writeText(data) } else { - ifExists { delete() } + delete() } }