diff --git a/build-common/src/org/jetbrains/kotlin/incremental/storage/InMemoryStorageWrapper.kt b/build-common/src/org/jetbrains/kotlin/incremental/storage/InMemoryStorageWrapper.kt index 968409b4112..58140afa661 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/storage/InMemoryStorageWrapper.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/storage/InMemoryStorageWrapper.kt @@ -28,21 +28,25 @@ class DefaultInMemoryStorageWrapper( private val removedKeys = hashSetOf() private var isCleanRequested = false + @get:Synchronized override val keys: Collection get() = if (isCleanRequested) inMemoryStorage.keys else (origin.keys - removedKeys) + inMemoryStorage.keys + @Synchronized override fun resetInMemoryChanges() { isCleanRequested = false inMemoryStorage.clear() removedKeys.clear() } + @Synchronized override fun clean() { inMemoryStorage.clear() removedKeys.clear() isCleanRequested = true } + @Synchronized override fun flush(memoryCachesOnly: Boolean) { if (isCleanRequested) { origin.clean() @@ -66,10 +70,12 @@ class DefaultInMemoryStorageWrapper( origin.flush(memoryCachesOnly) } + @Synchronized override fun close() { origin.close() } + @Synchronized override fun append(key: K, value: V) { check(valueExternalizer is AppendableDataExternalizer) { "`valueExternalizer` should implement the `AppendableDataExternalizer` interface to be able to call `append`" @@ -89,15 +95,18 @@ class DefaultInMemoryStorageWrapper( } } + @Synchronized override fun remove(key: K) { removedKeys.add(key) inMemoryStorage.remove(key) } + @Synchronized override fun set(key: K, value: V) { inMemoryStorage[key] = ValueWrapper(value) } + @Synchronized override fun get(key: K): V? { return when (key) { in inMemoryStorage -> { @@ -117,6 +126,7 @@ class DefaultInMemoryStorageWrapper( } } + @Synchronized override fun contains(key: K) = key in inMemoryStorage || (key !in removedKeys && key in origin) private fun Map.getValue(key: K) =