From 2bed8d055755e52a7ae05b9cfa4a50813cf467f1 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 24 Sep 2015 23:27:03 +0300 Subject: [PATCH] Test caches creation with turning incremental on/off --- .../kotlin/jps/build/KotlinBuilder.kt | 4 +- .../jps/build/AbstractIncrementalJpsTest.kt | 10 ++--- .../AbstractIncrementalLazyCachesTest.kt | 41 +++++++++++++++++-- .../IncrementalCacheVersionChangedTest.kt | 2 +- .../IncrementalLazyCachesTestGenerated.java | 12 ++++++ .../IncrementalProjectPathCaseChangedTest.kt | 2 +- .../incrementalCompilationOff/build.log | 7 ++++ .../dependencies.txt | 2 + .../expected-kotlin-caches.txt | 4 ++ .../incrementalCompilationOff/module1_a.kt | 3 ++ .../module1_a.kt.new | 5 +++ .../module1_incremental_compilation_off.new | 0 .../module1_other.kt | 3 ++ .../incrementalCompilationOff/module2_B.java | 5 +++ .../incrementalCompilationOffOn/build.log | 35 ++++++++++++++++ .../dependencies.txt | 3 ++ .../expected-kotlin-caches.txt | 18 ++++++++ .../incrementalCompilationOffOn/module1_a.kt | 3 ++ .../module1_a.kt.new.1 | 5 +++ .../module1_a.kt.new.2 | 5 +++ ...dule1_incremental_compilation_off.delete.2 | 0 .../module1_incremental_compilation_off.new.1 | 0 .../module1_other.kt | 3 ++ .../module2_B.java | 5 +++ .../incrementalCompilationOffOn/module3_c.kt | 3 ++ 25 files changed, 167 insertions(+), 13 deletions(-) create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/dependencies.txt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/expected-kotlin-caches.txt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt.new create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_incremental_compilation_off.new create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_other.kt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module2_B.java create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/dependencies.txt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.1 create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.2 create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.delete.2 create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.new.1 create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_other.kt create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module2_B.java create mode 100644 jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module3_c.kt 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 7586958262e..c7b0ddaf97f 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -447,12 +447,12 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR incrementalCaches: Map, generatedFiles: List ): ChangesInfo { - incrementalCaches.values().forEach { it.saveCacheFormatVersion() } - if (!IncrementalCompilation.isEnabled()) { return ChangesInfo.NO_CHANGES } + incrementalCaches.values().forEach { it.saveCacheFormatVersion() } + var changesInfo = ChangesInfo.NO_CHANGES for (generatedFile in generatedFiles) { val ic = incrementalCaches[generatedFile.target]!! diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index 8da3559fb11..2da6fb54ed7 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -345,13 +345,13 @@ public abstract class AbstractIncrementalJpsTest( val modifications = getModificationsToPerform(moduleNames) for (step in modifications) { step.forEach { it.perform(workDir) } - performAdditionalModifications() + performAdditionalModifications(step) results.add(make()) } return results } - protected open fun performAdditionalModifications() { + protected open fun performAdditionalModifications(modifications: List) { } // null means one module @@ -415,13 +415,13 @@ public abstract class AbstractIncrementalJpsTest( } } - private abstract class Modification(val path: String) { + protected abstract class Modification(val path: String) { abstract fun perform(workDir: File) override fun toString(): String = "${javaClass.simpleName} $path" } - private class ModifyContent(path: String, val dataFile: File) : Modification(path) { + protected class ModifyContent(path: String, val dataFile: File) : Modification(path) { override fun perform(workDir: File) { val file = File(workDir, path) @@ -437,7 +437,7 @@ public abstract class AbstractIncrementalJpsTest( } } - private class DeleteFile(path: String) : Modification(path) { + protected class DeleteFile(path: String) : Modification(path) { override fun perform(workDir: File) { val fileToDelete = File(workDir, path) if (!fileToDelete.delete()) { diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt index 7cbe409cc37..83bda764732 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt @@ -26,11 +26,44 @@ import java.io.File public abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJpsTest() { override fun doTest(testDataPath: String) { - super.doTest(testDataPath) + try { + super.doTest(testDataPath) - val actual = dumpKotlinCachesFileNames() - val expectedFile = File(testDataPath, "expected-kotlin-caches.txt") - UsefulTestCase.assertSameLinesWithFile(expectedFile.canonicalPath, actual) + val actual = dumpKotlinCachesFileNames() + val expectedFile = File(testDataPath, "expected-kotlin-caches.txt") + UsefulTestCase.assertSameLinesWithFile(expectedFile.canonicalPath, actual) + } + finally { + IncrementalCompilation.enableIncrementalCompilation() + } + } + + override fun performAdditionalModifications(modifications: List) { + super.performAdditionalModifications(modifications) + + var modified = 0 + + for (modification in modifications) { + if (!modification.path.endsWith("incremental_compilation_off")) continue + + when (modification) { + is AbstractIncrementalJpsTest.ModifyContent -> { + IncrementalCompilation.disableIncrementalCompilation() + } + is AbstractIncrementalJpsTest.DeleteFile -> { + IncrementalCompilation.enableIncrementalCompilation() + } + else -> { + throw IllegalStateException("Unknown modification type: ${modification.javaClass}") + } + } + + modified++ + } + + if (modified > 1) { + throw IllegalStateException("Incremental compilation was enabled/disable more than once") + } } private fun dumpKotlinCachesFileNames(): String { 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 53b7dfe1cf6..82cc117936a 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalCacheVersionChangedTest.kt @@ -32,7 +32,7 @@ public class IncrementalCacheVersionChangedTest : AbstractIncrementalJpsTest(all doTest("jps-plugin/testData/incremental/custom/cacheVersionChangedMultiModule/") } - override fun performAdditionalModifications() { + override fun performAdditionalModifications(modifications: List) { val targets = projectDescriptor.allModuleTargets val paths = projectDescriptor.dataManager.dataPaths diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalLazyCachesTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalLazyCachesTestGenerated.java index 19d5ce2d25d..454ac655c04 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalLazyCachesTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalLazyCachesTestGenerated.java @@ -53,6 +53,18 @@ public class IncrementalLazyCachesTestGenerated extends AbstractIncrementalLazyC doTest(fileName); } + @TestMetadata("incrementalCompilationOff") + public void testIncrementalCompilationOff() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/"); + doTest(fileName); + } + + @TestMetadata("incrementalCompilationOffOn") + public void testIncrementalCompilationOffOn() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/"); + doTest(fileName); + } + @TestMetadata("inlineFunctionDeclared") public void testInlineFunctionDeclared() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/lazyKotlinCaches/inlineFunctionDeclared/"); diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalProjectPathCaseChangedTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalProjectPathCaseChangedTest.kt index 13954948030..437c9e11ab8 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalProjectPathCaseChangedTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalProjectPathCaseChangedTest.kt @@ -36,7 +36,7 @@ public class IncrementalProjectPathCaseChangedTest : AbstractIncrementalJpsTest( super.doTest(testDataPath) } - override fun performAdditionalModifications() { + override fun performAdditionalModifications(modifications: List) { val module = myProject.getModules()[0] val sourceRoot = module.getSourceRoots()[0].getUrl() assert(sourceRoot.endsWith("/src")) diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log new file mode 100644 index 00000000000..ce877d3eba3 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/build.log @@ -0,0 +1,7 @@ +Cleaning output files: +out/production/module1/module1/A.class +End of files +Compiling files: +module1/src/module1_a.kt +module1/src/module1_other.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/dependencies.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/dependencies.txt new file mode 100644 index 00000000000..ec937d3cdd9 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/dependencies.txt @@ -0,0 +1,2 @@ +module1-> +module2->module1 \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/expected-kotlin-caches.txt new file mode 100644 index 00000000000..469e8d85401 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/expected-kotlin-caches.txt @@ -0,0 +1,4 @@ +Module 'module1' production +Module 'module1' tests +Module 'module2' production +Module 'module2' tests \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt new file mode 100644 index 00000000000..92cc446cfe0 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt @@ -0,0 +1,3 @@ +package module1 + +class A \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt.new b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt.new new file mode 100644 index 00000000000..5bf5052e9e9 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_a.kt.new @@ -0,0 +1,5 @@ +package module1 + +class A + +inline fun f() {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_incremental_compilation_off.new b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_incremental_compilation_off.new new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_other.kt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_other.kt new file mode 100644 index 00000000000..fbf512b4fa3 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module1_other.kt @@ -0,0 +1,3 @@ +package module1 + +fun other() {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module2_B.java b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module2_B.java new file mode 100644 index 00000000000..0f61b4f1a9b --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOff/module2_B.java @@ -0,0 +1,5 @@ +class B { + void f() { + new module1.A(); + } +} \ 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 new file mode 100644 index 00000000000..c151c910c93 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/build.log @@ -0,0 +1,35 @@ +Cleaning output files: +out/production/module1/module1/A.class +End of files +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 +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 +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 +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/dependencies.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/dependencies.txt new file mode 100644 index 00000000000..42b512b6648 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/dependencies.txt @@ -0,0 +1,3 @@ +module1-> +module2->module1 +module3-> \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt new file mode 100644 index 00000000000..5e139cc0c51 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/expected-kotlin-caches.txt @@ -0,0 +1,18 @@ +Module 'module1' production + format-version.txt + inline-functions.tab + package-parts.tab + 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 diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt new file mode 100644 index 00000000000..92cc446cfe0 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt @@ -0,0 +1,3 @@ +package module1 + +class A \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.1 b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.1 new file mode 100644 index 00000000000..5bf5052e9e9 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.1 @@ -0,0 +1,5 @@ +package module1 + +class A + +inline fun f() {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.2 b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.2 new file mode 100644 index 00000000000..5bf5052e9e9 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_a.kt.new.2 @@ -0,0 +1,5 @@ +package module1 + +class A + +inline fun f() {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.delete.2 b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.delete.2 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.new.1 b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_incremental_compilation_off.new.1 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_other.kt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_other.kt new file mode 100644 index 00000000000..fbf512b4fa3 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module1_other.kt @@ -0,0 +1,3 @@ +package module1 + +fun other() {} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module2_B.java b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module2_B.java new file mode 100644 index 00000000000..0f61b4f1a9b --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module2_B.java @@ -0,0 +1,5 @@ +class B { + void f() { + new module1.A(); + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module3_c.kt b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module3_c.kt new file mode 100644 index 00000000000..c7cd3fc4b22 --- /dev/null +++ b/jps-plugin/testData/incremental/lazyKotlinCaches/incrementalCompilationOffOn/module3_c.kt @@ -0,0 +1,3 @@ +package module3 + +fun c() {} \ No newline at end of file