From 52a8fe018b372d9e0bf953493a5b06c574ed31dd Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Wed, 22 Jul 2015 16:24:26 +0300 Subject: [PATCH] Recompile files dependent on inline relationship Right now, it's always recompiles dependent files, even if inline function has not been changed. --- .../jetbrains/kotlin/jps/build/KotlinBuilder.kt | 15 +++++++++++++++ .../jps/incremental/IncrementalCacheImpl.kt | 6 ++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 87ae8f8ce63..a2c4db818c7 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -212,6 +212,21 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR } if (IncrementalCompilation.ENABLED) { + val inlines = THashSet(FileUtil.PATH_HASHING_STRATEGY) + + for ((target, files) in filesToCompile.entrySet()) { + val cacheImpl = incrementalCaches[target] + files.forEach { + cacheImpl?.getInlineDependencies(it)?.let { + inlines.addAll(it) + } + } + } + + inlines.forEach { + FSOperations.markDirty(context, CompilationRound.NEXT, File(it)) + } + when (recompilationDecision) { RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS -> { allCompiledFiles.clear() diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index 42d082f9a76..4f6d9df889a 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.jps.build.KotlinBuilder import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.DO_NOTHING -import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_IN_CHUNK_AND_DEPENDANTS import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_KOTLIN_IN_CHUNK import org.jetbrains.kotlin.load.java.JvmAbi @@ -144,9 +143,12 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen } } + public fun getInlineDependencies(sourceFile: File): Collection { + return hasInlineTo.getState(sourceFile.getCanonicalPath()) ?: emptyList() + } + private fun getRecompilationDecision(protoChanged: Boolean, constantsChanged: Boolean, inlinesChanged: Boolean) = when { - inlinesChanged -> RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS constantsChanged -> RECOMPILE_OTHER_IN_CHUNK_AND_DEPENDANTS protoChanged -> RECOMPILE_OTHER_KOTLIN_IN_CHUNK else -> DO_NOTHING