From 9782e83c7e53e8d3972a29beb96256207e529ef2 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 1 Dec 2015 23:05:43 +0300 Subject: [PATCH] Do not mark dirty same files Original commit: 7063e1f56abc3a52bd46b07109718fd24d8cc05b --- .../kotlin/jps/build/FSOperationsHelper.kt | 18 ++++++++++++++---- .../kotlin/jps/build/KotlinBuilder.kt | 7 +++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt index 967953edb84..000c183656f 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/FSOperationsHelper.kt @@ -16,13 +16,18 @@ package org.jetbrains.kotlin.jps.build +import com.intellij.openapi.diagnostic.Logger import org.jetbrains.jps.ModuleChunk import org.jetbrains.jps.incremental.CompileContext import org.jetbrains.jps.incremental.FSOperations import org.jetbrains.jps.incremental.fs.CompilationRound import java.io.File -class FSOperationsHelper(private val compileContext: CompileContext, private val chunk: ModuleChunk) { +class FSOperationsHelper( + private val compileContext: CompileContext, + private val chunk: ModuleChunk, + private val log: Logger +) { private var markedDirty = false fun hasMarkedDirty(): Boolean = markedDirty @@ -46,11 +51,16 @@ class FSOperationsHelper(private val compileContext: CompileContext, private val } fun markFiles(files: Iterable, excludeFiles: Set = setOf()) { - for (file in files) { - if (file in excludeFiles || !file.exists()) continue + val filesToMark = files.toMutableSet() + filesToMark.removeAll(excludeFiles) + log.debug("Mark dirty: $filesToMark") + + for (file in filesToMark) { + if (!file.exists()) continue FSOperations.markDirty(compileContext, CompilationRound.NEXT, file) - markedDirty = true } + + markedDirty = markedDirty || filesToMark.isNotEmpty() } } \ No newline at end of file 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 45e21ec3187..938be5f43e8 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 @@ -103,7 +103,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR ): ModuleLevelBuilder.ExitCode { LOG.debug("------------------------------------------") val messageCollector = MessageCollectorAdapter(context) - val fsOperations = FSOperationsHelper(context, chunk) + val fsOperations = FSOperationsHelper(context, chunk, LOG) try { val exitCode = doBuild(chunk, context, dirtyFilesHolder, messageCollector, outputConsumer, fsOperations) @@ -275,9 +275,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR } if (inlineChanged) { - for (cache in caches) { - fsOperations.markFiles(cache.getFilesToReinline(), excludeFiles = compiledFiles) - } + val files = caches.flatMap { it.getFilesToReinline() } + fsOperations.markFiles(files, excludeFiles = compiledFiles) } }