Minor: refactor shouldRebuildBecauseVersionChanged
This commit is contained in:
@@ -151,14 +151,17 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
val isChunkRebuilding = JavaBuilderUtil.isForcedRecompilationAllJavaModules(context)
|
val isChunkRebuilding = JavaBuilderUtil.isForcedRecompilationAllJavaModules(context)
|
||||||
|| targets.any { rebuildAfterCacheVersionChanged[it] == true }
|
|| targets.any { rebuildAfterCacheVersionChanged[it] == true }
|
||||||
|
|
||||||
if (!isChunkRebuilding &&
|
if (!isChunkRebuilding && targets.any { hasKotlin[it] == true }) {
|
||||||
targets.any { hasKotlin[it] == true } &&
|
val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths)
|
||||||
shouldRebuildBecauseVersionChanged(context, dataManager, targets, fsOperations)
|
val allVersions = cacheVersionsProvider.allVersions(targets)
|
||||||
) {
|
val actions = allVersions.map { it.checkVersion() }.toSet()
|
||||||
targets.forEach { rebuildAfterCacheVersionChanged[it] = true }
|
|
||||||
return CHUNK_REBUILD_REQUIRED
|
|
||||||
}
|
|
||||||
|
|
||||||
|
applyActionsOnCacheVersionChange(actions, cacheVersionsProvider, context, dataManager, targets, fsOperations)
|
||||||
|
|
||||||
|
if (actions.any { it.isChunkRebuildRequired }) {
|
||||||
|
return CHUNK_REBUILD_REQUIRED
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk)) {
|
if (!hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk)) {
|
||||||
if (isChunkRebuilding) {
|
if (isChunkRebuilding) {
|
||||||
targets.forEach { hasKotlin[it] = false }
|
targets.forEach { hasKotlin[it] = false }
|
||||||
@@ -309,21 +312,20 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldRebuildBecauseVersionChanged(
|
private fun applyActionsOnCacheVersionChange(
|
||||||
|
actions: Set<CacheVersion.Action>,
|
||||||
|
cacheVersionsProvider: CacheVersionProvider,
|
||||||
context: CompileContext,
|
context: CompileContext,
|
||||||
dataManager: BuildDataManager,
|
dataManager: BuildDataManager,
|
||||||
targets: MutableSet<ModuleBuildTarget>,
|
targets: MutableSet<ModuleBuildTarget>,
|
||||||
fsOperations: FSOperationsHelper
|
fsOperations: FSOperationsHelper
|
||||||
): Boolean {
|
) {
|
||||||
val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths)
|
|
||||||
val allVersions = cacheVersionsProvider.allVersions(targets)
|
|
||||||
val actions = allVersions.map { it.checkVersion() }.toSet().sorted()
|
|
||||||
val buildTargetIndex = context.projectDescriptor.buildTargetIndex
|
val buildTargetIndex = context.projectDescriptor.buildTargetIndex
|
||||||
val allTargets = buildTargetIndex.allTargets.filterIsInstance<ModuleBuildTarget>().toSet()
|
val allTargets = buildTargetIndex.allTargets.filterIsInstance<ModuleBuildTarget>().toSet()
|
||||||
val hasKotlin = HasKotlinMarker(dataManager)
|
val hasKotlin = HasKotlinMarker(dataManager)
|
||||||
val rebuildAfterCacheVersionChanged = RebuildAfterCacheVersionChangeMarker(dataManager)
|
val rebuildAfterCacheVersionChanged = RebuildAfterCacheVersionChangeMarker(dataManager)
|
||||||
|
|
||||||
for (status in actions) {
|
for (status in actions.sorted()) {
|
||||||
when (status) {
|
when (status) {
|
||||||
CacheVersion.Action.REBUILD_ALL_KOTLIN -> {
|
CacheVersion.Action.REBUILD_ALL_KOTLIN -> {
|
||||||
LOG.info("Kotlin global lookup map format changed, so rebuild all kotlin")
|
LOG.info("Kotlin global lookup map format changed, so rebuild all kotlin")
|
||||||
@@ -341,8 +343,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
|
|
||||||
dataManager.getStorage(KotlinDataContainerTarget, LookupStorageProvider).clean()
|
dataManager.getStorage(KotlinDataContainerTarget, LookupStorageProvider).clean()
|
||||||
|
return
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
CacheVersion.Action.REBUILD_CHUNK -> {
|
CacheVersion.Action.REBUILD_CHUNK -> {
|
||||||
LOG.info("Clearing caches for " + targets.joinToString { it.presentableName })
|
LOG.info("Clearing caches for " + targets.joinToString { it.presentableName })
|
||||||
@@ -350,9 +351,9 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
for (target in targets) {
|
for (target in targets) {
|
||||||
dataManager.getKotlinCache(target).clean()
|
dataManager.getKotlinCache(target).clean()
|
||||||
hasKotlin.clean(target)
|
hasKotlin.clean(target)
|
||||||
|
rebuildAfterCacheVersionChanged[target] = true
|
||||||
}
|
}
|
||||||
|
return
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
CacheVersion.Action.CLEAN_NORMAL_CACHES -> {
|
CacheVersion.Action.CLEAN_NORMAL_CACHES -> {
|
||||||
LOG.info("Clearing caches for all targets")
|
LOG.info("Clearing caches for all targets")
|
||||||
@@ -378,8 +379,6 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun saveVersions(context: CompileContext, chunk: ModuleChunk) {
|
private fun saveVersions(context: CompileContext, chunk: ModuleChunk) {
|
||||||
|
|||||||
@@ -76,13 +76,13 @@ class CacheVersion(
|
|||||||
get() = versionFile
|
get() = versionFile
|
||||||
|
|
||||||
// Order of entries is important, because actions are sorted in KotlinBuilder::checkVersions
|
// Order of entries is important, because actions are sorted in KotlinBuilder::checkVersions
|
||||||
enum class Action {
|
enum class Action(val isChunkRebuildRequired: Boolean = false) {
|
||||||
REBUILD_ALL_KOTLIN,
|
REBUILD_ALL_KOTLIN(isChunkRebuildRequired = true),
|
||||||
REBUILD_CHUNK,
|
REBUILD_CHUNK(isChunkRebuildRequired = true),
|
||||||
CLEAN_NORMAL_CACHES,
|
CLEAN_NORMAL_CACHES(),
|
||||||
CLEAN_EXPERIMENTAL_CACHES,
|
CLEAN_EXPERIMENTAL_CACHES(),
|
||||||
CLEAN_DATA_CONTAINER,
|
CLEAN_DATA_CONTAINER(),
|
||||||
DO_NOTHING
|
DO_NOTHING()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user