From 756c78bfcc6c06d162f3e683a9e15f8f3fecc7cc Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 21 Dec 2015 16:40:20 +0300 Subject: [PATCH] Append in a more safe way --- .../kotlin/jps/incremental/IncrementalCacheImpl.kt | 7 ++----- .../jps/incremental/storage/ClassOneToManyMap.kt | 3 +-- .../kotlin/jps/incremental/storage/LazyStorage.kt | 13 +++++++++++-- .../kotlin/jps/incremental/storage/LookupMap.kt | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index 57454482abc..c52d434dd13 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -21,7 +21,6 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtil.toSystemIndependentName import com.intellij.util.io.BooleanDataDescriptor import com.intellij.util.io.EnumeratorStringDescriptor -import com.intellij.util.io.IOUtil import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly import org.jetbrains.jps.builders.storage.BuildDataPaths @@ -581,7 +580,7 @@ class IncrementalCacheImpl( } fun add(sourceFile: File, className: JvmClassName) { - storage.append(sourceFile.absolutePath, { out -> IOUtil.writeUTF(out, className.internalName) }) + storage.append(sourceFile.absolutePath, className.internalName) } operator fun get(sourceFile: File): Collection = @@ -684,9 +683,7 @@ class IncrementalCacheImpl( private inner class InlineFunctionsFilesMap(storageFile: File) : BasicMap>(storageFile, PathFunctionPairKeyDescriptor, PathCollectionExternalizer) { fun add(sourcePath: String, jvmSignature: String, targetPath: String) { val key = PathFunctionPair(sourcePath, jvmSignature) - storage.append(key) { out -> - IOUtil.writeUTF(out, targetPath) - } + storage.append(key, targetPath) } operator fun get(sourcePath: String, jvmSignature: String): Collection { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/ClassOneToManyMap.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/ClassOneToManyMap.kt index 9a840da330f..b04477bf682 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/ClassOneToManyMap.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/ClassOneToManyMap.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.jps.incremental.storage -import com.intellij.util.io.IOUtil import org.jetbrains.kotlin.jps.incremental.dumpCollection import org.jetbrains.kotlin.name.FqName import java.io.File @@ -27,7 +26,7 @@ internal open class ClassOneToManyMap( override fun dumpValue(value: Collection): String = value.dumpCollection() fun add(key: FqName, value: FqName) { - storage.append(key.asString()) { out -> IOUtil.writeUTF(out, value.asString()) } + storage.append(key.asString(), value.asString()) } operator fun get(key: FqName): Collection = diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LazyStorage.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LazyStorage.kt index 007e8d0db17..0a5690c8c41 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LazyStorage.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LazyStorage.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.jps.incremental.storage import com.intellij.util.io.DataExternalizer +import com.intellij.util.io.IOUtil import com.intellij.util.io.KeyDescriptor import com.intellij.util.io.PersistentHashMap import java.io.DataOutput @@ -73,8 +74,12 @@ internal class LazyStorage( getStorageIfExists()?.remove(key) } - fun append(key: K, append: (DataOutput)->Unit) { - getStorageOrCreateNew().appendData(key, append) + fun append(key: K, value: String) { + append(key) { out -> IOUtil.writeUTF(out, value) } + } + + fun append(key: K, value: Int) { + append(key) { out -> out.writeInt(value) } } @Synchronized @@ -110,4 +115,8 @@ internal class LazyStorage( private fun createMap(): PersistentHashMap = PersistentHashMap(storageFile, keyDescriptor, valueExternalizer) + + private fun append(key: K, append: (DataOutput)->Unit) { + getStorageOrCreateNew().appendData(key, append) + } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LookupMap.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LookupMap.kt index 4b6ccba6d1d..70fe113bf72 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LookupMap.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/LookupMap.kt @@ -24,7 +24,7 @@ internal class LookupMap(storage: File) : BasicMap): String = value.toString() fun add(name: String, scope: String, fileId: Int) { - storage.append(LookupSymbolKey(name, scope)) { out -> out.writeInt(fileId) } + storage.append(LookupSymbolKey(name, scope), fileId) } operator fun get(key: LookupSymbolKey): Collection? = storage[key]