diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 21650505dd2..212d7d1747f 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -380,7 +380,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { rebuildAfterCacheVersionChanged[target] = true } - dataManager.withLookupStorage { it.clean() } + dataManager.cleanLookupStorage(LOG) return } CacheVersion.Action.REBUILD_CHUNK -> { @@ -405,7 +405,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { } CacheVersion.Action.CLEAN_DATA_CONTAINER -> { LOG.info("Clearing lookup cache") - dataManager.withLookupStorage { it.clean() } + dataManager.cleanLookupStorage(LOG) cacheVersionsProvider.dataContainerVersion().clean() } else -> { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt index 1b565144a49..c68c128b36f 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.jps.incremental +import com.intellij.openapi.diagnostic.Logger import org.jetbrains.jps.builders.storage.BuildDataCorruptedException import org.jetbrains.jps.builders.storage.StorageProvider import org.jetbrains.jps.incremental.storage.BuildDataManager @@ -24,13 +25,28 @@ import org.jetbrains.kotlin.incremental.LookupStorage import java.io.File import java.io.IOException -@Synchronized +private object LookupStorageLock + +fun BuildDataManager.cleanLookupStorage(log: Logger) { + synchronized(LookupStorageLock) { + try { + cleanTargetStorages(KotlinDataContainerTarget) + } catch (e: IOException) { + if (!dataPaths.getTargetDataRoot(KotlinDataContainerTarget).deleteRecursively()) { + log.debug("Could not clear lookup storage caches", e) + } + } + } +} + fun BuildDataManager.withLookupStorage(fn: (LookupStorage) -> T): T { - try { - val lookupStorage = getStorage(KotlinDataContainerTarget, JpsLookupStorageProvider) - return fn(lookupStorage) - } catch (e: IOException) { - throw BuildDataCorruptedException(e) + synchronized(LookupStorageLock) { + try { + val lookupStorage = getStorage(KotlinDataContainerTarget, JpsLookupStorageProvider) + return fn(lookupStorage) + } catch (e: IOException) { + throw BuildDataCorruptedException(e) + } } }