From 140ba0681a9c7cd00d8313e26d3a12a073d0671c Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 22 Feb 2018 02:10:09 +0300 Subject: [PATCH] Throw BuildDataCorruptedException when lookup operation cannot be performed That is expected to force a rebuild (but it does not seem to be the case in case of parallel build). #KT-22535 #KT-22995 --- .../jetbrains/kotlin/incremental/LookupStorage.kt | 14 ++++++++++---- .../kotlin/jps/incremental/JpsLookupStorage.kt | 10 ++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt b/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt index 9783b7928cd..340b2437324 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.incremental.storage.* import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.keysToMap import java.io.File +import java.io.IOException import java.util.* @@ -47,11 +48,16 @@ open class LookupStorage(targetDataDir: File) : BasicMapsOwner(targetDataDir) { private var deletedCount: Int = 0 init { - if (countersFile.exists()) { - val lines = countersFile.readLines() - size = lines[0].toInt() - deletedCount = lines[1].toInt() + try { + if (countersFile.exists()) { + val lines = countersFile.readLines() + size = lines[0].toInt() + deletedCount = lines[1].toInt() + } + } catch (e: Exception) { + throw IOException("Could not read $countersFile", e) } + } @Synchronized diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt index f67fab4be2f..1b565144a49 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsLookupStorage.kt @@ -16,16 +16,22 @@ package org.jetbrains.kotlin.jps.incremental +import org.jetbrains.jps.builders.storage.BuildDataCorruptedException import org.jetbrains.jps.builders.storage.StorageProvider import org.jetbrains.jps.incremental.storage.BuildDataManager import org.jetbrains.jps.incremental.storage.StorageOwner import org.jetbrains.kotlin.incremental.LookupStorage import java.io.File +import java.io.IOException @Synchronized fun BuildDataManager.withLookupStorage(fn: (LookupStorage) -> T): T { - val lookupStorage = getStorage(KotlinDataContainerTarget, JpsLookupStorageProvider) - return fn(lookupStorage) + try { + val lookupStorage = getStorage(KotlinDataContainerTarget, JpsLookupStorageProvider) + return fn(lookupStorage) + } catch (e: IOException) { + throw BuildDataCorruptedException(e) + } } private object JpsLookupStorageProvider : StorageProvider() {