Append in a more safe way

This commit is contained in:
Alexey Tsvetkov
2015-12-21 16:40:20 +03:00
parent f137910e63
commit 756c78bfcc
4 changed files with 15 additions and 10 deletions
@@ -21,7 +21,6 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.io.FileUtil.toSystemIndependentName import com.intellij.openapi.util.io.FileUtil.toSystemIndependentName
import com.intellij.util.io.BooleanDataDescriptor import com.intellij.util.io.BooleanDataDescriptor
import com.intellij.util.io.EnumeratorStringDescriptor import com.intellij.util.io.EnumeratorStringDescriptor
import com.intellij.util.io.IOUtil
import gnu.trove.THashSet import gnu.trove.THashSet
import org.jetbrains.annotations.TestOnly import org.jetbrains.annotations.TestOnly
import org.jetbrains.jps.builders.storage.BuildDataPaths import org.jetbrains.jps.builders.storage.BuildDataPaths
@@ -581,7 +580,7 @@ class IncrementalCacheImpl(
} }
fun add(sourceFile: File, className: JvmClassName) { 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<JvmClassName> = operator fun get(sourceFile: File): Collection<JvmClassName> =
@@ -684,9 +683,7 @@ class IncrementalCacheImpl(
private inner class InlineFunctionsFilesMap(storageFile: File) : BasicMap<PathFunctionPair, Collection<String>>(storageFile, PathFunctionPairKeyDescriptor, PathCollectionExternalizer) { private inner class InlineFunctionsFilesMap(storageFile: File) : BasicMap<PathFunctionPair, Collection<String>>(storageFile, PathFunctionPairKeyDescriptor, PathCollectionExternalizer) {
fun add(sourcePath: String, jvmSignature: String, targetPath: String) { fun add(sourcePath: String, jvmSignature: String, targetPath: String) {
val key = PathFunctionPair(sourcePath, jvmSignature) val key = PathFunctionPair(sourcePath, jvmSignature)
storage.append(key) { out -> storage.append(key, targetPath)
IOUtil.writeUTF(out, targetPath)
}
} }
operator fun get(sourcePath: String, jvmSignature: String): Collection<String> { operator fun get(sourcePath: String, jvmSignature: String): Collection<String> {
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.jps.incremental.storage package org.jetbrains.kotlin.jps.incremental.storage
import com.intellij.util.io.IOUtil
import org.jetbrains.kotlin.jps.incremental.dumpCollection import org.jetbrains.kotlin.jps.incremental.dumpCollection
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import java.io.File import java.io.File
@@ -27,7 +26,7 @@ internal open class ClassOneToManyMap(
override fun dumpValue(value: Collection<String>): String = value.dumpCollection() override fun dumpValue(value: Collection<String>): String = value.dumpCollection()
fun add(key: FqName, value: FqName) { 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<FqName> = operator fun get(key: FqName): Collection<FqName> =
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.jps.incremental.storage package org.jetbrains.kotlin.jps.incremental.storage
import com.intellij.util.io.DataExternalizer import com.intellij.util.io.DataExternalizer
import com.intellij.util.io.IOUtil
import com.intellij.util.io.KeyDescriptor import com.intellij.util.io.KeyDescriptor
import com.intellij.util.io.PersistentHashMap import com.intellij.util.io.PersistentHashMap
import java.io.DataOutput import java.io.DataOutput
@@ -73,8 +74,12 @@ internal class LazyStorage<K, V>(
getStorageIfExists()?.remove(key) getStorageIfExists()?.remove(key)
} }
fun append(key: K, append: (DataOutput)->Unit) { fun append(key: K, value: String) {
getStorageOrCreateNew().appendData(key, append) append(key) { out -> IOUtil.writeUTF(out, value) }
}
fun append(key: K, value: Int) {
append(key) { out -> out.writeInt(value) }
} }
@Synchronized @Synchronized
@@ -110,4 +115,8 @@ internal class LazyStorage<K, V>(
private fun createMap(): PersistentHashMap<K, V> = private fun createMap(): PersistentHashMap<K, V> =
PersistentHashMap(storageFile, keyDescriptor, valueExternalizer) PersistentHashMap(storageFile, keyDescriptor, valueExternalizer)
private fun append(key: K, append: (DataOutput)->Unit) {
getStorageOrCreateNew().appendData(key, append)
}
} }
@@ -24,7 +24,7 @@ internal class LookupMap(storage: File) : BasicMap<LookupSymbolKey, Collection<I
override fun dumpValue(value: Collection<Int>): String = value.toString() override fun dumpValue(value: Collection<Int>): String = value.toString()
fun add(name: String, scope: String, fileId: Int) { 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<Int>? = storage[key] operator fun get(key: LookupSymbolKey): Collection<Int>? = storage[key]