From 967f470b1648afde40fe062410e28fc40a16a5ca Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 12 Nov 2014 20:19:02 +0300 Subject: [PATCH] Added multi-module tests on incremental compilation. Changing code wasn't required, Java's incremental caches were enough. --- .../jps/build/AbstractIncrementalJpsTest.kt | 6 ++-- .../build/IncrementalJpsTestGenerated.java | 30 +++++++++++++++++++ .../circularDependencyClasses/build.log | 14 +++++++++ .../dependencies.txt | 2 ++ .../circularDependencyClasses/module1_a.kt | 5 ++++ .../circularDependencyClasses/module2_b.kt | 8 +++++ .../module2_b.kt.new | 11 +++++++ .../multiModule/simpleDependency/build.log | 15 ++++++++++ .../simpleDependency/dependencies.txt | 2 ++ .../multiModule/simpleDependency/module1_a.kt | 6 ++++ .../simpleDependency/module1_a.kt.new | 7 +++++ .../multiModule/simpleDependency/module2_b.kt | 5 ++++ .../simpleDependencyUnchanged/build.log | 8 +++++ .../dependencies.txt | 2 ++ .../simpleDependencyUnchanged/module1_a.kt | 7 +++++ .../module1_a.kt.new | 7 +++++ .../simpleDependencyUnchanged/module2_b.kt | 5 ++++ .../transitiveDependency/build.log | 15 ++++++++++ .../transitiveDependency/dependencies.txt | 3 ++ .../transitiveDependency/module1_a.kt | 6 ++++ .../transitiveDependency/module1_a.kt.new | 7 +++++ .../transitiveDependency/module2_b.kt | 9 ++++++ .../transitiveDependency/module3_c.kt | 5 ++++ .../multiModule/twoDependants/build.log | 22 ++++++++++++++ .../twoDependants/dependencies.txt | 3 ++ .../multiModule/twoDependants/module1_a.kt | 6 ++++ .../twoDependants/module1_a.kt.new | 7 +++++ .../multiModule/twoDependants/module2_b.kt | 5 ++++ .../multiModule/twoDependants/module3_c.kt | 5 ++++ 29 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 jps-plugin/testData/incremental/multiModule/circularDependencyClasses/build.log create mode 100644 jps-plugin/testData/incremental/multiModule/circularDependencyClasses/dependencies.txt create mode 100644 jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module1_a.kt create mode 100644 jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt create mode 100644 jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt.new create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependency/build.log create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependency/dependencies.txt create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt.new create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependency/module2_b.kt create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/build.log create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/dependencies.txt create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt.new create mode 100644 jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module2_b.kt create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/build.log create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/dependencies.txt create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt.new create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/module2_b.kt create mode 100644 jps-plugin/testData/incremental/multiModule/transitiveDependency/module3_c.kt create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/build.log create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/dependencies.txt create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt.new create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/module2_b.kt create mode 100644 jps-plugin/testData/incremental/multiModule/twoDependants/module3_c.kt 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 54c7769a8af..55ff1b7858f 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -36,6 +36,8 @@ import org.jetbrains.jps.incremental.messages.BuildMessage import kotlin.test.assertFalse import java.util.regex.Pattern import kotlin.test.assertEquals +import org.jetbrains.jps.model.java.JpsJavaDependencyExtension +import org.jetbrains.jps.model.JpsModuleRootModificationUtil public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { class object { @@ -182,7 +184,7 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { for (line in dependenciesTxt.readLines()) { val split = line.split("->") val module = split[0] - val dependencies = split[1].split(",") + val dependencies = if (split.size > 1) split[1].split(",") else array() result[module] = dependencies.toList() } @@ -253,7 +255,7 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { for ((moduleName, dependencies) in moduleDependencies) { val module = nameToModule[moduleName]!! for (dependency in dependencies) { - module.getDependenciesList().addModuleDependency(nameToModule[dependency]!!) + JpsModuleRootModificationUtil.addDependency(module, nameToModule[dependency]) } } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index 04a01820fee..254a7d209bc 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -40,12 +40,42 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/multiModule"), Pattern.compile("^([^\\.]+)$"), true); } + @TestMetadata("circularDependencyClasses") + public void testCircularDependencyClasses() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/circularDependencyClasses/"); + doTest(fileName); + } + @TestMetadata("circularDependencyTopLevelFunctions") public void testCircularDependencyTopLevelFunctions() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/circularDependencyTopLevelFunctions/"); doTest(fileName); } + @TestMetadata("simpleDependency") + public void testSimpleDependency() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/simpleDependency/"); + doTest(fileName); + } + + @TestMetadata("simpleDependencyUnchanged") + public void testSimpleDependencyUnchanged() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/"); + doTest(fileName); + } + + @TestMetadata("transitiveDependency") + public void testTransitiveDependency() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/transitiveDependency/"); + doTest(fileName); + } + + @TestMetadata("twoDependants") + public void testTwoDependants() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/twoDependants/"); + doTest(fileName); + } + } @TestMetadata("jps-plugin/testData/incremental/pureKotlin") diff --git a/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/build.log b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/build.log new file mode 100644 index 00000000000..6d84c7b51a9 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/build.log @@ -0,0 +1,14 @@ +Cleaning output files: +out/production/module2/b/B.class +out/production/module2/b/BB.class +End of files +Compiling files: +module2/src/module2_b.kt +End of files +Cleaning output files: +out/production/module1/a/A.class +out/production/module1/a/AA.class +End of files +Compiling files: +module1/src/module1_a.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/dependencies.txt b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/dependencies.txt new file mode 100644 index 00000000000..02d5c8ca1a7 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/dependencies.txt @@ -0,0 +1,2 @@ +module1->module2 +module2->module1 diff --git a/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module1_a.kt b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module1_a.kt new file mode 100644 index 00000000000..653e6a5b31f --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module1_a.kt @@ -0,0 +1,5 @@ +package a + +open class A + +class AA: b.BB() \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt new file mode 100644 index 00000000000..1cc0414c989 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt @@ -0,0 +1,8 @@ +package b + +class B: a.A() { +} + +open class BB { + +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt.new b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt.new new file mode 100644 index 00000000000..dd98580a43e --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/circularDependencyClasses/module2_b.kt.new @@ -0,0 +1,11 @@ +package b + +class B: a.A() { + fun f() { + } +} + +open class BB { + fun f() { + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependency/build.log b/jps-plugin/testData/incremental/multiModule/simpleDependency/build.log new file mode 100644 index 00000000000..ec0b0e5da7c --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependency/build.log @@ -0,0 +1,15 @@ +Cleaning output files: +out/production/module1/a/A.class +out/production/module1/a/APackage$module1_a$*.class +out/production/module1/a/APackage.class +End of files +Compiling files: +module1/src/module1_a.kt +End of files +Cleaning output files: +out/production/module2/b/BPackage$module2_b$*.class +out/production/module2/b/BPackage.class +End of files +Compiling files: +module2/src/module2_b.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependency/dependencies.txt b/jps-plugin/testData/incremental/multiModule/simpleDependency/dependencies.txt new file mode 100644 index 00000000000..827bf04cc58 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependency/dependencies.txt @@ -0,0 +1,2 @@ +module1-> +module2->module1 diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt b/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt new file mode 100644 index 00000000000..a3470c00a84 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt @@ -0,0 +1,6 @@ +package a + +class A + +fun a() { +} diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt.new b/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt.new new file mode 100644 index 00000000000..38e7ea70acf --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependency/module1_a.kt.new @@ -0,0 +1,7 @@ +package a + +class A + +fun a(): String { + return ":)" +} diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependency/module2_b.kt b/jps-plugin/testData/incremental/multiModule/simpleDependency/module2_b.kt new file mode 100644 index 00000000000..5c19b61add7 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependency/module2_b.kt @@ -0,0 +1,5 @@ +package b + +fun b(param: a.A) { + a.a() +} diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/build.log b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/build.log new file mode 100644 index 00000000000..490a4ad2f8a --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/build.log @@ -0,0 +1,8 @@ +Cleaning output files: +out/production/module1/a/A.class +out/production/module1/a/APackage$module1_a$*.class +out/production/module1/a/APackage.class +End of files +Compiling files: +module1/src/module1_a.kt +End of files diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/dependencies.txt b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/dependencies.txt new file mode 100644 index 00000000000..827bf04cc58 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/dependencies.txt @@ -0,0 +1,2 @@ +module1-> +module2->module1 diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt new file mode 100644 index 00000000000..3f615e23d4e --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt @@ -0,0 +1,7 @@ +package a + +class A + +fun a() { + println("I'm an old body") +} diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt.new b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt.new new file mode 100644 index 00000000000..8579ae24e37 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module1_a.kt.new @@ -0,0 +1,7 @@ +package a + +class A + +fun a() { + println("I'm a new body") +} diff --git a/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module2_b.kt b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module2_b.kt new file mode 100644 index 00000000000..5c19b61add7 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/simpleDependencyUnchanged/module2_b.kt @@ -0,0 +1,5 @@ +package b + +fun b(param: a.A) { + a.a() +} diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/build.log b/jps-plugin/testData/incremental/multiModule/transitiveDependency/build.log new file mode 100644 index 00000000000..ec0b0e5da7c --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/build.log @@ -0,0 +1,15 @@ +Cleaning output files: +out/production/module1/a/A.class +out/production/module1/a/APackage$module1_a$*.class +out/production/module1/a/APackage.class +End of files +Compiling files: +module1/src/module1_a.kt +End of files +Cleaning output files: +out/production/module2/b/BPackage$module2_b$*.class +out/production/module2/b/BPackage.class +End of files +Compiling files: +module2/src/module2_b.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/dependencies.txt b/jps-plugin/testData/incremental/multiModule/transitiveDependency/dependencies.txt new file mode 100644 index 00000000000..0341c1ffd5c --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/dependencies.txt @@ -0,0 +1,3 @@ +module1-> +module2->module1 +module3->module2 diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt new file mode 100644 index 00000000000..a3470c00a84 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt @@ -0,0 +1,6 @@ +package a + +class A + +fun a() { +} diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt.new b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt.new new file mode 100644 index 00000000000..38e7ea70acf --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module1_a.kt.new @@ -0,0 +1,7 @@ +package a + +class A + +fun a(): String { + return ":)" +} diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/module2_b.kt b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module2_b.kt new file mode 100644 index 00000000000..64f75565c38 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module2_b.kt @@ -0,0 +1,9 @@ +package b + +fun b(param: a.A) { + a.a() +} + +fun bb() { + +} diff --git a/jps-plugin/testData/incremental/multiModule/transitiveDependency/module3_c.kt b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module3_c.kt new file mode 100644 index 00000000000..e45bff75ab8 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/transitiveDependency/module3_c.kt @@ -0,0 +1,5 @@ +package c + +fun c() { + b.bb() +} diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/build.log b/jps-plugin/testData/incremental/multiModule/twoDependants/build.log new file mode 100644 index 00000000000..0bcfc0ab0e0 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/build.log @@ -0,0 +1,22 @@ +Cleaning output files: +out/production/module1/a/A.class +out/production/module1/a/APackage$module1_a$*.class +out/production/module1/a/APackage.class +End of files +Compiling files: +module1/src/module1_a.kt +End of files +Cleaning output files: +out/production/module3/c/CPackage$module3_c$*.class +out/production/module3/c/CPackage.class +End of files +Compiling files: +module3/src/module3_c.kt +End of files +Cleaning output files: +out/production/module2/b/BPackage$module2_b$*.class +out/production/module2/b/BPackage.class +End of files +Compiling files: +module2/src/module2_b.kt +End of files \ No newline at end of file diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/dependencies.txt b/jps-plugin/testData/incremental/multiModule/twoDependants/dependencies.txt new file mode 100644 index 00000000000..1365e57e135 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/dependencies.txt @@ -0,0 +1,3 @@ +module1-> +module2->module1 +module3->module1 diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt b/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt new file mode 100644 index 00000000000..a3470c00a84 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt @@ -0,0 +1,6 @@ +package a + +class A + +fun a() { +} diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt.new b/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt.new new file mode 100644 index 00000000000..38e7ea70acf --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/module1_a.kt.new @@ -0,0 +1,7 @@ +package a + +class A + +fun a(): String { + return ":)" +} diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/module2_b.kt b/jps-plugin/testData/incremental/multiModule/twoDependants/module2_b.kt new file mode 100644 index 00000000000..5c19b61add7 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/module2_b.kt @@ -0,0 +1,5 @@ +package b + +fun b(param: a.A) { + a.a() +} diff --git a/jps-plugin/testData/incremental/multiModule/twoDependants/module3_c.kt b/jps-plugin/testData/incremental/multiModule/twoDependants/module3_c.kt new file mode 100644 index 00000000000..68a8f9a70f0 --- /dev/null +++ b/jps-plugin/testData/incremental/multiModule/twoDependants/module3_c.kt @@ -0,0 +1,5 @@ +package c + +fun c(param: a.A) { + a.a() +}