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 50e458a4355..a738daa1641 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -30,7 +30,10 @@ import org.jetbrains.jps.builders.java.JavaBuilderUtil import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor import org.jetbrains.jps.builders.java.dependencyView.Mappings import org.jetbrains.jps.incremental.* -import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.* +import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.ABORT +import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.ADDITIONAL_PASS_REQUIRED +import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.NOTHING_DONE +import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode.OK import org.jetbrains.jps.incremental.fs.CompilationRound import org.jetbrains.jps.incremental.java.JavaBuilder import org.jetbrains.jps.incremental.messages.BuildMessage @@ -143,7 +146,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR LOG.info("Clearing caches for " + chunk.targets.map { it.presentableName }.join()) val incrementalCaches = getIncrementalCaches(chunk, context) incrementalCaches.values().forEach(StorageOwner::clean) - return CHUNK_REBUILD_REQUIRED + FSOperations.markDirtyRecursively(context, CompilationRound.NEXT, chunk) + return ADDITIONAL_PASS_REQUIRED } } @@ -205,7 +209,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR isJsModule -> ChangesInfo.NO_CHANGES else -> { val generatedClasses = generatedFiles.filterIsInstance() - val info = updateKotlinIncrementalCache(compilationErrors, incrementalCaches, generatedFiles) + val info = updateKotlinIncrementalCache(compilationErrors, incrementalCaches, generatedFiles, chunk) updateJavaMappings(chunk, compilationErrors, context, dirtyFilesHolder, filesToCompile, generatedClasses) info } @@ -264,7 +268,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR private fun recompileEverything() { allCompiledFiles.clear() - FSOperations.markDirtyRecursively(context, chunk) + FSOperations.markDirtyRecursively(context, CompilationRound.NEXT, chunk) } private fun recompileOtherAndDependents() { @@ -449,13 +453,14 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR private fun updateKotlinIncrementalCache( compilationErrors: Boolean, incrementalCaches: Map, - generatedFiles: List + generatedFiles: List, + chunk: ModuleChunk ): ChangesInfo { if (!IncrementalCompilation.isEnabled()) { return ChangesInfo.NO_CHANGES } - incrementalCaches.values().forEach { it.saveCacheFormatVersion() } + chunk.targets.forEach { incrementalCaches[it]!!.saveCacheFormatVersion() } var changesInfo = ChangesInfo.NO_CHANGES for (generatedFile in generatedFiles) { diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt index 82cc117936a..560e85bedf7 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.jps.build import org.jetbrains.kotlin.jps.incremental.getKotlinCacheVersion -import kotlin.test.assertTrue public class IncrementalCacheVersionChangedTest : AbstractIncrementalJpsTest(allowNoFilesWithSuffixInTestData = true) { fun testCacheVersionChanged() { @@ -28,8 +27,12 @@ public class IncrementalCacheVersionChangedTest : AbstractIncrementalJpsTest(all doTest("jps-plugin/testData/incremental/custom/cacheVersionChangedAndFileModified/") } - fun testCacheVersionChangedMultiModule() { - doTest("jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/") + fun testCacheVersionChangedMultiModule1() { + doTest("jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/") + } + + fun testCacheVersionChangedMultiModule2() { + doTest("jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/") } override fun performAdditionalModifications(modifications: List) { @@ -39,8 +42,10 @@ public class IncrementalCacheVersionChangedTest : AbstractIncrementalJpsTest(all for (target in targets) { val cacheVersion = paths.getKotlinCacheVersion(target) val cacheVersionFile = cacheVersion.formatVersionFile - assertTrue(cacheVersionFile.exists(), "Cache version file does not exists: $cacheVersionFile") - cacheVersionFile.writeText("777") + + if (cacheVersionFile.exists()) { + cacheVersionFile.writeText("777") + } } } } diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/build.log b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/build.log new file mode 100644 index 00000000000..784f8dd8873 --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/build.log @@ -0,0 +1,31 @@ +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/Module1Package.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/Module2Package.class +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/Module3Package.class +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/custom/cacheVersionChangedModule1/dependencies.txt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/dependencies.txt new file mode 100644 index 00000000000..b7b899af80f --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/dependencies.txt @@ -0,0 +1,5 @@ +module1-> +module2->module1 +module3->module2 +module4-> +module5-> \ No newline at end of file diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module1_a.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt similarity index 57% rename from jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module1_a.kt rename to jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt index a3470c00a84..ae1b119fb6d 100644 --- a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module1_a.kt +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt @@ -1,4 +1,4 @@ -package a +package module1 class A diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt.new b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt.new new file mode 100644 index 00000000000..ae1b119fb6d --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module1_a.kt.new @@ -0,0 +1,6 @@ +package module1 + +class A + +fun a() { +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module2_b.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module2_b.kt new file mode 100644 index 00000000000..413a8224329 --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module2_b.kt @@ -0,0 +1,8 @@ +package module2 + +import module1.* + +fun b() { + A() + a() +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module3_c.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module3_c.kt new file mode 100644 index 00000000000..3dfe95ad694 --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module3_c.kt @@ -0,0 +1,7 @@ +package module3 + +import module2.* + +fun c() { + b() +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module4_d.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module4_d.kt new file mode 100644 index 00000000000..b0747db7a0f --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module4_d.kt @@ -0,0 +1,3 @@ +package module4 + +class D \ No newline at end of file diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module5_E.java b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module5_E.java new file mode 100644 index 00000000000..3f5b139b15a --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule1/module5_E.java @@ -0,0 +1,3 @@ +package module5; + +class E {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/build.log b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/build.log similarity index 54% rename from jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/build.log rename to jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/build.log index e41875375b3..8c069b7fa2d 100644 --- a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/build.log +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/build.log @@ -1,16 +1,16 @@ Cleaning output files: out/production/module1/META-INF/module1.kotlin_module -out/production/module1/a/A.class -out/production/module1/a/APackage.class -out/production/module1/a/Module1_aKt.class +out/production/module1/module1/A.class +out/production/module1/module1/Module1Package.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/b/BPackage.class -out/production/module2/b/Module2_bKt.class +out/production/module2/module2/Module2Package.class +out/production/module2/module2/Module2_bKt.class End of files Compiling files: module2/src/module2_b.kt diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/dependencies.txt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/dependencies.txt similarity index 100% rename from jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/dependencies.txt rename to jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/dependencies.txt diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module1_a.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module1_a.kt new file mode 100644 index 00000000000..ae1b119fb6d --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module1_a.kt @@ -0,0 +1,6 @@ +package module1 + +class A + +fun a() { +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt new file mode 100644 index 00000000000..b7e97d330f4 --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt @@ -0,0 +1,7 @@ +package module2 + +import module1.* + +fun b(param: A) { + a() +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt.new b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt.new new file mode 100644 index 00000000000..b7e97d330f4 --- /dev/null +++ b/jps-plugin/testData/incremental/custom/cacheVersionChangedModule2/module2_b.kt.new @@ -0,0 +1,7 @@ +package module2 + +import module1.* + +fun b(param: A) { + a() +} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt b/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt deleted file mode 100644 index 5c19b61add7..00000000000 --- a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt +++ /dev/null @@ -1,5 +0,0 @@ -package b - -fun b(param: a.A) { - a.a() -} diff --git a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt.new b/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt.new deleted file mode 100644 index 5c19b61add7..00000000000 --- a/jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/module2_b.kt.new +++ /dev/null @@ -1,5 +0,0 @@ -package b - -fun b(param: a.A) { - a.a() -} diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt index 6fd1abe9f15..381f7cb3157 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/class/expected-kotlin-caches.txt @@ -2,5 +2,4 @@ Module 'module' production format-version.txt proto.tab source-to-classes.tab -Module 'module' tests - format-version.txt \ No newline at end of file +Module 'module' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt index 924694c447e..39231475721 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/constant/expected-kotlin-caches.txt @@ -4,5 +4,4 @@ Module 'module' production package-parts.tab proto.tab source-to-classes.tab -Module 'module' tests - format-version.txt \ No newline at end of file +Module 'module' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt index bad440e5bfa..89837f47189 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/function/expected-kotlin-caches.txt @@ -3,5 +3,4 @@ Module 'module' production package-parts.tab proto.tab source-to-classes.tab -Module 'module' tests - format-version.txt \ No newline at end of file +Module 'module' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log index ce877d3eba3..d5edf8c4424 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log @@ -4,4 +4,7 @@ End of files Compiling files: module1/src/module1_a.kt module1/src/module1_other.kt +End of files +Compiling files: +module2/src/module2_B.java End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log index c151c910c93..74d77ecd7d8 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log @@ -5,30 +5,20 @@ Compiling files: module1/src/module1_a.kt module1/src/module1_other.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/Module1Package.class -out/production/module1/module1/Module1_aKt.class +Compiling files: +module3/src/module3_c.kt End of files Compiling files: -module1/src/module1_a.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/Module1Package.class -out/production/module1/module1/Module1_aKt.class -out/production/module1/module1/Module1_otherKt.class +module2/src/module2_B.java End of files + + Compiling files: module1/src/module1_a.kt module1/src/module1_other.kt End of files -Cleaning output files: -out/production/module2/B.class +Compiling files: +module3/src/module3_c.kt End of files Compiling files: module2/src/module2_B.java diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt index 5e139cc0c51..a6be44610e6 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt @@ -5,14 +5,11 @@ Module 'module1' production proto.tab source-to-classes.tab Module 'module1' tests - format-version.txt Module 'module2' production - format-version.txt Module 'module2' tests Module 'module3' production format-version.txt package-parts.tab proto.tab source-to-classes.tab -Module 'module3' tests - format-version.txt \ No newline at end of file +Module 'module3' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionDeclared/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionDeclared/expected-kotlin-caches.txt index 7d660ea18f4..1700c33173a 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionDeclared/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionDeclared/expected-kotlin-caches.txt @@ -4,5 +4,4 @@ Module 'module' production package-parts.tab proto.tab source-to-classes.tab -Module 'module' tests - format-version.txt \ No newline at end of file +Module 'module' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionInlined/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionInlined/expected-kotlin-caches.txt index b21bfa7b4ec..b84a9a7acd0 100644 --- a/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionInlined/expected-kotlin-caches.txt +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionInlined/expected-kotlin-caches.txt @@ -5,5 +5,4 @@ Module 'module' production package-parts.tab proto.tab source-to-classes.tab -Module 'module' tests - format-version.txt \ No newline at end of file +Module 'module' tests \ No newline at end of file