From 6a7f1bc7febcea6e88fa672e7d9d7b92db6bef0d Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 24 Jul 2015 16:14:41 +0300 Subject: [PATCH] Generalize InlineFunctionsMapExternalizer Original commit: dfa5a420e6a6ac9177a90ff958d72923ebe63085 --- .../jps/incremental/IncrementalCacheImpl.kt | 62 +++++++++++-------- 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index 832f427cc05..21c13627434 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -551,7 +551,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen override fun createMap(): PersistentHashMap> = PersistentHashMap( File(baseDir, INLINE_FUNCTIONS), EnumeratorStringDescriptor(), - InlineFunctionsMapExternalizer + StringToLongMapExternalizer ) private fun getInlineFunctionsMap(bytes: ByteArray): Map { @@ -637,31 +637,6 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen } } - private object InlineFunctionsMapExternalizer : DataExternalizer> { - override fun save(out: DataOutput, map: Map?) { - out.writeInt(map!!.size()) - for (name in map.keySet()) { - IOUtil.writeString(name, out) - out.writeLong(map[name]!!) - } - } - - override fun read(`in`: DataInput): Map? { - val size = `in`.readInt() - val map = HashMap(size) - - repeat(size) { - val name = IOUtil.readString(`in`)!! - val value = `in`.readLong() - - map[name] = value - } - - return map - } - - } - private inner class PackagePartMap : BasicMap() { override fun createMap(): PersistentHashMap = PersistentHashMap( File(baseDir, PACKAGE_PARTS), @@ -819,6 +794,41 @@ private object ByteArrayExternalizer : DataExternalizer { } } +private abstract class StringMapExternalizer : DataExternalizer> { + override fun save(out: DataOutput, map: Map?) { + out.writeInt(map!!.size()) + + for ((key, value) in map.entrySet()) { + IOUtil.writeString(key, out) + writeValue(out, value) + } + } + + override fun read(`in`: DataInput): Map? { + val size = `in`.readInt() + val map = HashMap(size) + + repeat(size) { + val name = IOUtil.readString(`in`)!! + map[name] = readValue(`in`) + } + + return map + } + + protected abstract fun writeValue(output: DataOutput, value: T) + protected abstract fun readValue(input: DataInput): T +} + +private object StringToLongMapExternalizer : StringMapExternalizer() { + override fun readValue(input: DataInput): Long = + input.readLong() + + override fun writeValue(output: DataOutput, value: Long) { + output.writeLong(value) + } +} + private object StringListExternalizer : DataExternalizer> { override fun save(out: DataOutput, value: List) { value.forEach { IOUtil.writeUTF(out, it) }