From be097244d4553239a97e62ea0f75ee05f8543f6a Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Thu, 27 May 2021 10:12:17 +0300 Subject: [PATCH] fixup synchronizations --- .../jetbrains/kotlin/incremental/IncrementalJsCache.kt | 3 +++ .../kotlin/incremental/storage/CachingLazyStorage.kt | 9 ++++++--- .../kotlin/incremental/storage/ClassOneToManyMap.kt | 1 + .../kotlin/incremental/storage/NonCachingLazyStorage.kt | 8 ++++++-- .../kotlin/incremental/storage/SourceToOutputMaps.kt | 2 -- .../kotlin/incremental/storage/SourceToOutputFilesMap.kt | 2 -- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt index b6e48c528a7..59e462f5a72 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJsCache.kt @@ -240,6 +240,7 @@ private class TranslationResultMap( TranslationResultValue(metadata = newMetadata, binaryAst = newBinaryAst, inlineData = newInlineData) } + @Synchronized operator fun get(sourceFile: File): TranslationResultValue? = storage[pathConverter.toPath(sourceFile)] @@ -380,6 +381,7 @@ private class InlineFunctionsMap( storageFile: File, private val pathConverter: FileToPathConverter ) : BasicStringMap>(storageFile, StringToLongMapExternalizer) { + @Synchronized fun process(srcFile: File, newMap: Map, changesCollector: ChangesCollector) { val key = pathConverter.toPath(srcFile) val oldMap = storage[key] ?: emptyMap() @@ -397,6 +399,7 @@ private class InlineFunctionsMap( } } + @Synchronized fun remove(sourceFile: File) { storage.remove(pathConverter.toPath(sourceFile)) } diff --git a/build-common/src/org/jetbrains/kotlin/incremental/storage/CachingLazyStorage.kt b/build-common/src/org/jetbrains/kotlin/incremental/storage/CachingLazyStorage.kt index 090870a9389..bd5118562b5 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/storage/CachingLazyStorage.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/storage/CachingLazyStorage.kt @@ -34,7 +34,6 @@ class CachingLazyStorage( ) : LazyStorage { private var storage: PersistentHashMap? = null - @Synchronized private fun getStorageIfExists(): PersistentHashMap? { if (storage != null) return storage @@ -46,32 +45,36 @@ class CachingLazyStorage( return null } - @Synchronized private fun getStorageOrCreateNew(): PersistentHashMap { if (storage == null) { storage = createMap() } - return storage!! } override val keys: Collection + @Synchronized get() = getStorageIfExists()?.allKeysWithExistingMapping ?: listOf() + @Synchronized override operator fun contains(key: K): Boolean = getStorageIfExists()?.containsMapping(key) ?: false + @Synchronized override operator fun get(key: K): V? = getStorageIfExists()?.get(key) + @Synchronized override operator fun set(key: K, value: V) { getStorageOrCreateNew().put(key, value) } + @Synchronized override fun remove(key: K) { getStorageIfExists()?.remove(key) } + @Synchronized override fun append(key: K, value: V) { getStorageOrCreateNew().appendData(key, { valueExternalizer.save(it, value) }) } diff --git a/build-common/src/org/jetbrains/kotlin/incremental/storage/ClassOneToManyMap.kt b/build-common/src/org/jetbrains/kotlin/incremental/storage/ClassOneToManyMap.kt index f06524591b6..8b2e64a2b56 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/storage/ClassOneToManyMap.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/storage/ClassOneToManyMap.kt @@ -28,6 +28,7 @@ internal open class ClassOneToManyMap(storageFile: File) : BasicStringMap = storage[key.asString()]?.map(::FqName) ?: setOf() diff --git a/build-common/src/org/jetbrains/kotlin/incremental/storage/NonCachingLazyStorage.kt b/build-common/src/org/jetbrains/kotlin/incremental/storage/NonCachingLazyStorage.kt index d7bc82c1c1d..2bf17bcb8ed 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/storage/NonCachingLazyStorage.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/storage/NonCachingLazyStorage.kt @@ -31,7 +31,6 @@ class NonCachingLazyStorage( ) : LazyStorage { private var storage: PersistentHashMap? = null - @Synchronized private fun getStorageIfExists(): PersistentHashMap? { if (storage != null) return storage @@ -43,7 +42,6 @@ class NonCachingLazyStorage( return null } - @Synchronized private fun getStorageOrCreateNew(): PersistentHashMap { if (storage == null) { storage = createMap() @@ -53,22 +51,28 @@ class NonCachingLazyStorage( } override val keys: Collection + @Synchronized get() = getStorageIfExists()?.allKeysWithExistingMapping ?: listOf() + @Synchronized override operator fun contains(key: K): Boolean = getStorageIfExists()?.containsMapping(key) ?: false + @Synchronized override operator fun get(key: K): V? = getStorageIfExists()?.get(key) + @Synchronized override operator fun set(key: K, value: V) { getStorageOrCreateNew().put(key, value) } + @Synchronized override fun remove(key: K) { getStorageIfExists()?.remove(key) } + @Synchronized override fun append(key: K, value: V) { getStorageOrCreateNew().appendData(key) { dataOutput -> valueExternalizer.save(dataOutput, value) } } diff --git a/build-common/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputMaps.kt b/build-common/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputMaps.kt index 8d3d1658aa5..0bfe06e18fa 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputMaps.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputMaps.kt @@ -40,7 +40,6 @@ internal abstract class AbstractSourceToOutputMap( remove(pathConverter.toPath(sourceFile)) } - @Synchronized fun add(sourceFile: File, className: Name) { storage.append(pathConverter.toPath(sourceFile), listOf(nameTransformer.asString(className))) } @@ -57,7 +56,6 @@ internal abstract class AbstractSourceToOutputMap( override fun dumpValue(value: Collection) = value.dumpCollection() - @Synchronized private fun remove(path: String) { storage.remove(path) } diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputFilesMap.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputFilesMap.kt index add1232cc16..c917a2393aa 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputFilesMap.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/storage/SourceToOutputFilesMap.kt @@ -13,7 +13,6 @@ class SourceToOutputFilesMap( private val pathConverter: FileToPathConverter ) : BasicStringMap>(storageFile, PathStringDescriptor, StringCollectionExternalizer) { - @Synchronized operator fun set(sourceFile: File, outputFiles: Collection) { storage[pathConverter.toPath(sourceFile)] = outputFiles.map(pathConverter::toPath) } @@ -24,7 +23,6 @@ class SourceToOutputFilesMap( override fun dumpValue(value: Collection) = value.dumpCollection() - @Synchronized fun remove(file: File): Collection = get(file).also { storage.remove(pathConverter.toPath(file)) } } \ No newline at end of file