From 80094605eb71857f6db2a82b3f43c850c33bdded Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 27 Jul 2015 20:04:34 +0300 Subject: [PATCH] Move persistent map parameters to constructor --- .../jps/incremental/IncrementalCacheImpl.kt | 87 +++++-------------- 1 file changed, 23 insertions(+), 64 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 941d864db0b..4a60aaa597a 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -305,10 +305,14 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen maps.forEach { it.close () } } - private abstract class BasicMap { - protected var storage: PersistentHashMap = createMap() + private inner abstract class BasicMap( + private val storageName: String, + private val valueExternalizer: DataExternalizer + ) { + protected open val keyDescriptor: KeyDescriptor + get() = EnumeratorStringDescriptor() - protected abstract fun createMap(): PersistentHashMap + protected var storage: PersistentHashMap = createMap() public fun contains(key: String): Boolean = storage.containsMapping(key) @@ -361,14 +365,12 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen } protected abstract fun dumpValue(value: V): String + + private fun createMap(): PersistentHashMap = + PersistentHashMap(File(baseDir, storageName), keyDescriptor, valueExternalizer) } - private inner class ProtoMap : BasicMap() { - override fun createMap(): PersistentHashMap = PersistentHashMap( - File(baseDir, PROTO_MAP), - EnumeratorStringDescriptor(), - ByteArrayExternalizer - ) + private inner class ProtoMap : BasicMap(PROTO_MAP, ByteArrayExternalizer) { public fun put(className: JvmClassName, data: ByteArray, isPackage: Boolean, checkChangesIsOpenPart: Boolean = true): Boolean { val key = className.getInternalName() @@ -445,13 +447,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen } } - private inner class ConstantsMap : BasicMap>() { - override fun createMap(): PersistentHashMap> = PersistentHashMap( - File(baseDir, CONSTANTS_MAP), - EnumeratorStringDescriptor(), - ConstantsMapExternalizer - ) - + private inner class ConstantsMap : BasicMap>(CONSTANTS_MAP, ConstantsMapExternalizer) { private fun getConstantsMap(bytes: ByteArray): Map? { val result = HashMap() @@ -554,13 +550,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen } } - private inner class InlineFunctionsMap : BasicMap>() { - override fun createMap(): PersistentHashMap> = PersistentHashMap( - File(baseDir, INLINE_FUNCTIONS), - EnumeratorStringDescriptor(), - StringToLongMapExternalizer - ) - + private inner class InlineFunctionsMap : BasicMap>(INLINE_FUNCTIONS, StringToLongMapExternalizer) { private fun getInlineFunctionsMap(bytes: ByteArray): Map { val result = HashMap() @@ -634,13 +624,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen value.dumpMap { java.lang.Long.toHexString(it) } } - private inner class PackagePartMap : BasicMap() { - override fun createMap(): PersistentHashMap = PersistentHashMap( - File(baseDir, PACKAGE_PARTS), - EnumeratorStringDescriptor(), - BooleanDataDescriptor.INSTANCE - ) - + private inner class PackagePartMap : BasicMap(PACKAGE_PARTS, BooleanDataDescriptor.INSTANCE) { public fun addPackagePart(className: JvmClassName) { storage.put(className.getInternalName(), true) } @@ -656,12 +640,9 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen override fun dumpValue(value: Boolean) = "" } - private inner class SourceToClassesMap : BasicMap>() { - override fun createMap(): PersistentHashMap> = PersistentHashMap( - File(baseDir, SOURCE_TO_CLASSES), - PathStringDescriptor.INSTANCE, - StringListExternalizer - ) + private inner class SourceToClassesMap : BasicMap>(SOURCE_TO_CLASSES, StringListExternalizer) { + override val keyDescriptor: KeyDescriptor + get() = PathStringDescriptor.INSTANCE public fun clearOutputsForSource(sourceFile: File) { storage.remove(sourceFile.getAbsolutePath()) @@ -678,13 +659,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen override fun dumpValue(value: List) = value.toString() } - private inner class ClassToSourcesMap : BasicMap>() { - override fun createMap(): PersistentHashMap> = PersistentHashMap( - File(baseDir, CLASS_TO_SOURCES), - EnumeratorStringDescriptor(), - PathCollectionExternalizer - ) - + private inner class ClassToSourcesMap : BasicMap>(CLASS_TO_SOURCES, PathCollectionExternalizer) { public fun get(className: JvmClassName): Collection = storage[className.internalName] ?: emptySet() @@ -702,13 +677,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen value.dumpCollection() } - private inner class DirtyOutputClassesMap : BasicMap() { - override fun createMap(): PersistentHashMap = PersistentHashMap( - File(baseDir, DIRTY_OUTPUT_CLASSES), - EnumeratorStringDescriptor(), - BooleanDataDescriptor.INSTANCE - ) - + private inner class DirtyOutputClassesMap : BasicMap(DIRTY_OUTPUT_CLASSES, BooleanDataDescriptor.INSTANCE) { public fun markDirty(className: String) { storage.put(className, true) } @@ -724,13 +693,7 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen override fun dumpValue(value: Boolean) = "" } - private inner class DirtyInlineFunctionsMap : BasicMap>() { - override fun createMap(): PersistentHashMap> = PersistentHashMap( - File(baseDir, DIRTY_INLINE_FUNCTIONS), - EnumeratorStringDescriptor(), - StringListExternalizer - ) - + private inner class DirtyInlineFunctionsMap : BasicMap>(DIRTY_INLINE_FUNCTIONS, StringListExternalizer) { public fun getEntries(): Map> = storage.allKeysWithExistingMapping .toMap(JvmClassName::byInternalName) { storage[it] } @@ -751,16 +714,12 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen * * inlineFunction - jvmSignature of some inline function in source file * * target files - collection of files inlineFunction has been inlined to */ - private inner class InlineFunctionsFilesMap : BasicMap>>() { + private inner class InlineFunctionsFilesMap : BasicMap>>(HAS_INLINE_TO, StringToPathsMapExternalizer) { + override val keyDescriptor: KeyDescriptor + get() = PathStringDescriptor() private val cache = THashMap>>(FileUtil.PATH_HASHING_STRATEGY) - override fun createMap(): PersistentHashMap>> = PersistentHashMap( - File(baseDir, HAS_INLINE_TO), - PathStringDescriptor(), - StringToPathsMapExternalizer - ) - public fun add(sourcePath: String, jvmSignature: String, targetPath: String) { val mapping = getMappingFromCache(sourcePath.normalizedPath) val paths = mapping.getOrPut(jvmSignature) { THashSet(FileUtil.PATH_HASHING_STRATEGY) }