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 4d4f6baf794..3d2f6fa6b84 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 @@ -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/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index f955082b1c9..752155826a1 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/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) }