From 4ccec5218ffc54d4e418cdcb6c27f307077b7dcf Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 17 Apr 2020 12:54:19 +0300 Subject: [PATCH] Remove dirty output files when expanding IC scope early Previously IC could go to the next iteration without removing outputs for the files compiled during the last iteration. For example, it could happen, when a multifile part is changed (we add sources for other parts and recompile everything together). In case of MPP it could lead to compile error, because the compiler would see the same actual declarations from dirty sources and dirty outputs from previous iteration (which should have been removed). That behaviour did not raise an error before dc8240c24ebd3b98f5a55fa5fbb7a166e97ae777 because actual declarations from binaries (e.g. compile classpath) were ignored. #KT-35957 Fixed --- .../kotlin/incremental/IncrementalCompilerRunner.kt | 1 + .../incremental/mpp/jvmOnly/multifilePartChanged/build.log | 7 +------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt index 67ecf554fca..61f4f84233b 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalCompilerRunner.kt @@ -246,6 +246,7 @@ abstract class IncrementalCompilerRunner< val additionalDirtyFiles = additionalDirtyFiles(caches, generatedFiles, services).filter { it !in dirtySourcesSet } if (additionalDirtyFiles.isNotEmpty()) { dirtySources.addAll(additionalDirtyFiles) + generatedFiles.forEach { it.outputFile.delete() } continue } } diff --git a/jps-plugin/testData/incremental/mpp/jvmOnly/multifilePartChanged/build.log b/jps-plugin/testData/incremental/mpp/jvmOnly/multifilePartChanged/build.log index 5cec33fd7c5..48a7a882c76 100644 --- a/jps-plugin/testData/incremental/mpp/jvmOnly/multifilePartChanged/build.log +++ b/jps-plugin/testData/incremental/mpp/jvmOnly/multifilePartChanged/build.log @@ -6,9 +6,4 @@ Compiling files: src/utilsActual.kt src/utilsNoActual.kt End of files -Exit code: ABORT ------------------------------------------- -COMPILATION FAILED -Class 'X' has several compatible actual declarations in modules , -Function 'foo' has several compatible actual declarations in modules , -Function 'useX' has several compatible actual declarations in modules , \ No newline at end of file +Exit code: OK \ No newline at end of file