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 cfac6296cea..b167b4818fb 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -98,6 +98,25 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR statisticsLogger.reportTotal() } + override fun chunkBuildStarted(context: CompileContext, chunk: ModuleChunk) { + super.chunkBuildStarted(context, chunk) + + if (JavaBuilderUtil.isForcedRecompilationAllJavaModules(context)) return + + val targets = chunk.targets + val dataManager = context.projectDescriptor.dataManager + val hasKotlin = HasKotlinMarker(dataManager) + + if (targets.none { hasKotlin[it] == true }) return + + val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths) + val allVersions = cacheVersionsProvider.allVersions(targets) + val actions = allVersions.map { it.checkVersion() }.toSet() + + val fsOperations = FSOperationsHelper(context, chunk, LOG) + applyActionsOnCacheVersionChange(actions, cacheVersionsProvider, context, dataManager, targets, fsOperations) + } + override fun build( context: CompileContext, chunk: ModuleChunk, @@ -154,17 +173,6 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val isChunkRebuilding = JavaBuilderUtil.isForcedRecompilationAllJavaModules(context) || targets.any { rebuildAfterCacheVersionChanged[it] == true } - if (!isChunkRebuilding && targets.any { hasKotlin[it] == true }) { - val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths) - val allVersions = cacheVersionsProvider.allVersions(targets) - val actions = allVersions.map { it.checkVersion() }.toSet() - - applyActionsOnCacheVersionChange(actions, cacheVersionsProvider, context, dataManager, targets, fsOperations) - - if (actions.any { it.isChunkRebuildRequired }) { - return CHUNK_REBUILD_REQUIRED - } - } if (!hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk)) { if (isChunkRebuilding) { targets.forEach { hasKotlin[it] = false } @@ -356,6 +364,9 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR hasKotlin.clean(target) rebuildAfterCacheVersionChanged[target] = true } + + fsOperations.markChunk() + return } CacheVersion.Action.CLEAN_NORMAL_CACHES -> { diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt index ca76e199f75..cb28c1014ce 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersion.kt @@ -76,13 +76,13 @@ class CacheVersion( get() = versionFile // Order of entries is important, because actions are sorted in KotlinBuilder::checkVersions - enum class Action(val isChunkRebuildRequired: Boolean = false) { - REBUILD_ALL_KOTLIN(isChunkRebuildRequired = true), - REBUILD_CHUNK(isChunkRebuildRequired = true), - CLEAN_NORMAL_CACHES(), - CLEAN_EXPERIMENTAL_CACHES(), - CLEAN_DATA_CONTAINER(), - DO_NOTHING() + enum class Action { + REBUILD_ALL_KOTLIN, + REBUILD_CHUNK, + CLEAN_NORMAL_CACHES, + CLEAN_EXPERIMENTAL_CACHES, + CLEAN_DATA_CONTAINER, + DO_NOTHING } } diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/data-container-version-build.log deleted file mode 100644 index 5fdce9ad8e7..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/clearedHasKotlin/data-container-version-build.log +++ /dev/null @@ -1,20 +0,0 @@ -Cleaning output files: -out/production/module1/C.class -End of files -Compiling files: -module1/src/module1_C.java -End of files - - -Cleaning output files: -out/production/module1/A.class -End of files -Compiling files: -module1/src/module1_A.kt -End of files -Cleaning output files: -out/production/module1/B.class -End of files -Compiling files: -module1/src/module1_B.kt -End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/data-container-version-build.log deleted file mode 100644 index 3b6e54c1052..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/javaOnlyModulesAreNotAffected/data-container-version-build.log +++ /dev/null @@ -1,14 +0,0 @@ -Cleaning output files: -out/production/module1/A.class -End of files -Compiling files: -module1/src/module1_A.java -End of files - - -Cleaning output files: -out/production/module1/B.class -End of files -Compiling files: -module1/src/module1_B.java -End of files diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log index 7300f1cf983..ae0d40bb5e6 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/build.log @@ -1,46 +1,28 @@ Cleaning output files: -out/production/module4/D.class out/production/module4/module4/D.class End of files Compiling files: module4/src/module4_d.kt End of files -Compiling files: -module4/src/module4_D.java -End of files Cleaning output files: out/production/module1/META-INF/module1.kotlin_module out/production/module1/module1/A.class out/production/module1/module1/Module1_aKt.class End of files -Cleaning output files: -out/production/module1/A.class -End of files Compiling files: module1/src/module1_a.kt End of files -Compiling files: -module1/src/module1_A.java -End of files Cleaning output files: -out/production/module2/B.class out/production/module2/META-INF/module2.kotlin_module out/production/module2/module2/Module2_bKt.class End of files Compiling files: module2/src/module2_b.kt End of files -Compiling files: -module2/src/module2_B.java -End of files Cleaning output files: -out/production/module3/C.class out/production/module3/META-INF/module3.kotlin_module out/production/module3/module3/Module3_cKt.class End of files Compiling files: module3/src/module3_c.kt -End of files -Compiling files: -module3/src/module3_C.java End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log deleted file mode 100644 index 2ab0048b937..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/module1Modified/data-container-version-build.log +++ /dev/null @@ -1,32 +0,0 @@ -Cleaning output files: -out/production/module4/D.class -out/production/module4/module4/D.class -End of files -Compiling files: -module4/src/module4_d.kt -End of files -Compiling files: -module4/src/module4_D.java -End of files -Cleaning output files: -out/production/module1/META-INF/module1.kotlin_module -out/production/module1/module1/A.class -out/production/module1/module1/Module1_aKt.class -End of files -Compiling files: -module1/src/module1_a.kt -End of files -Cleaning output files: -out/production/module2/META-INF/module2.kotlin_module -out/production/module2/module2/Module2_bKt.class -End of files -Compiling files: -module2/src/module2_b.kt -End of files -Cleaning output files: -out/production/module3/META-INF/module3.kotlin_module -out/production/module3/module3/Module3_cKt.class -End of files -Compiling files: -module3/src/module3_c.kt -End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log index 07ee39331d0..d9e25129990 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/build.log @@ -7,11 +7,7 @@ module1/src/module1_A.kt End of files Cleaning output files: out/production/module2/b/B.class -out/production/module2/b/C.class End of files Compiling files: module2/src/module2_B.kt -End of files -Compiling files: -module2/src/module2_C.java End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log deleted file mode 100644 index 6765eb04250..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithConstantModified/data-container-version-build.log +++ /dev/null @@ -1,13 +0,0 @@ -Cleaning output files: -out/production/module1/META-INF/module1.kotlin_module -out/production/module1/a/Module1_AKt.class -End of files -Compiling files: -module1/src/module1_A.kt -End of files -Cleaning output files: -out/production/module2/b/B.class -End of files -Compiling files: -module2/src/module2_B.kt -End of files diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log index c9cf56e79b6..2883783148a 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/build.log @@ -8,11 +8,7 @@ module1/src/module1_A.kt End of files Cleaning output files: out/production/module2/b/B.class -out/production/module2/b/C.class End of files Compiling files: module2/src/module2_B.kt -End of files -Compiling files: -module2/src/module2_C.java End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log deleted file mode 100644 index 93bb946a783..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/moduleWithInlineModified/data-container-version-build.log +++ /dev/null @@ -1,14 +0,0 @@ -Cleaning output files: -out/production/module1/META-INF/module1.kotlin_module -out/production/module1/a/A.class -out/production/module1/a/Module1_AKt.class -End of files -Compiling files: -module1/src/module1_A.kt -End of files -Cleaning output files: -out/production/module2/b/B.class -End of files -Compiling files: -module2/src/module2_B.kt -End of files diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log index 84c1b712769..241969e6b52 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/touchedFile/build.log @@ -1,10 +1,8 @@ Cleaning output files: out/production/module/META-INF/module.kotlin_module -out/production/module/test/BKt.class -End of files -Cleaning output files: out/production/module/other/OtherKt.class out/production/module/test/AKt.class +out/production/module/test/BKt.class End of files Compiling files: src/a.kt diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log index 0070e64876a..4c18d5c71da 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/build.log @@ -1,7 +1,5 @@ Cleaning output files: out/production/module/A.class -End of files -Cleaning output files: out/production/module/META-INF/module.kotlin_module out/production/module/other/OtherKt.class out/production/module/test/AKt.class diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log deleted file mode 100644 index 0070e64876a..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/touchedOnlyJavaFile/data-container-version-build.log +++ /dev/null @@ -1,17 +0,0 @@ -Cleaning output files: -out/production/module/A.class -End of files -Cleaning output files: -out/production/module/META-INF/module.kotlin_module -out/production/module/other/OtherKt.class -out/production/module/test/AKt.class -out/production/module/test/BKt.class -End of files -Compiling files: -src/a.kt -src/b.kt -src/other.kt -End of files -Compiling files: -src/A.java -End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log b/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log index 3f1259bdca5..e066711ad3f 100644 --- a/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log +++ b/jps-plugin/testData/incremental/cacheVersionChanged/withError/build.log @@ -8,8 +8,6 @@ Cleaning output files: out/production/module1/META-INF/module1.kotlin_module out/production/module1/module1/A.class out/production/module1/module1/Module1_aKt.class -End of files -Cleaning output files: out/production/module1/module1/Module1_fKt.class End of files Compiling files: diff --git a/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log b/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log deleted file mode 100644 index 5003113aa98..00000000000 --- a/jps-plugin/testData/incremental/cacheVersionChanged/withError/data-container-version-build.log +++ /dev/null @@ -1,38 +0,0 @@ -Cleaning output files: -out/production/module4/module4/D.class -End of files -Compiling files: -module4/src/module4_d.kt -End of files -Cleaning output files: -out/production/module1/META-INF/module1.kotlin_module -out/production/module1/module1/A.class -out/production/module1/module1/Module1_aKt.class -out/production/module1/module1/Module1_fKt.class -End of files -Compiling files: -module1/src/module1_a.kt -module1/src/module1_f.kt -End of files -COMPILATION FAILED -Name expected - - -Compiling files: -module1/src/module1_a.kt -module1/src/module1_f.kt -End of files -Cleaning output files: -out/production/module2/META-INF/module2.kotlin_module -out/production/module2/module2/Module2_bKt.class -End of files -Compiling files: -module2/src/module2_b.kt -End of files -Cleaning output files: -out/production/module3/META-INF/module3.kotlin_module -out/production/module3/module3/Module3_cKt.class -End of files -Compiling files: -module3/src/module3_c.kt -End of files diff --git a/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log b/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log index dc9b74c5701..d9957c7d841 100644 --- a/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log +++ b/jps-plugin/testData/incremental/changeIncrementalOption/incrementalOffOn/build.log @@ -18,8 +18,6 @@ End of files Cleaning output files: out/production/module2/META-INF/module2.kotlin_module out/production/module2/foo/Module2_aKt.class -End of files -Cleaning output files: out/production/module2/foo/Module2_bKt.class out/production/module2/foo/Module2_cKt.class End of files