From f25c10c4a187c62a058a43705fca5d6a8ec49798 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Mon, 17 Aug 2015 18:11:33 +0300 Subject: [PATCH] Recompile everything if new function is added --- .../jetbrains/kotlin/jps/build/KotlinBuilder.kt | 4 ++++ .../jps/incremental/IncrementalCacheImpl.kt | 15 ++++++++++----- 2 files changed, 14 insertions(+), 5 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 4d4f6baf794..3d2f6fa6b84 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -233,6 +233,10 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR private fun ChangesInfo.doProcessChanges() { when { + inlineAdded -> { + recompileEverything() + return + } constantsChanged -> recompileOtherAndDependents() protoChanged -> recompileOtherKotlinInChunk() } 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 f955082b1c9..752155826a1 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -550,6 +550,7 @@ public class IncrementalCacheImpl( val internalName = className.internalName val oldMap = storage[internalName] ?: emptyMap() + val added = hashSetOf() val changed = hashSetOf() val allFunctions = oldMap.keySet() + newMap.keySet() @@ -557,8 +558,9 @@ public class IncrementalCacheImpl( val oldHash = oldMap[fn] val newHash = newMap[fn] - if (oldHash != newHash) { - changed.add(fn) + when { + oldHash == null -> added.add(fn) + oldHash != newHash -> changed.add(fn) } } @@ -571,7 +573,8 @@ public class IncrementalCacheImpl( dirtyInlineFunctionsMap.put(className, changed.toList()) } - return ChangesInfo(inlineChanged = changed.isNotEmpty()) + return ChangesInfo(inlineChanged = changed.isNotEmpty(), + inlineAdded = added.isNotEmpty()) } public fun remove(className: JvmClassName) { @@ -729,7 +732,8 @@ public class IncrementalCacheImpl( data class ChangesInfo( public val protoChanged: Boolean = false, public val constantsChanged: Boolean = false, - public val inlineChanged: Boolean = false + public val inlineChanged: Boolean = false, + public val inlineAdded: Boolean = false ) { companion object { public val NO_CHANGES: ChangesInfo = ChangesInfo() @@ -738,7 +742,8 @@ data class ChangesInfo( public fun plus(other: ChangesInfo): ChangesInfo = ChangesInfo(protoChanged || other.protoChanged, constantsChanged || other.constantsChanged, - inlineChanged || other.inlineChanged) + inlineChanged || other.inlineChanged, + inlineAdded || other.inlineAdded) }