From 29920360c1195c6084d7b5a3aec0228e5aee5cbb Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 14:30:46 +0400 Subject: [PATCH 01/11] Minor. Correct map with expected size creation. Original commit: 7742755de44f1c3c969588f90db29d7fd99cee45 --- .../org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index e06193a161d..fb71bfd94b5 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.java.JvmClassName import java.util.HashSet import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache import java.util.HashMap +import com.google.common.collect.Maps public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { class object { @@ -203,7 +204,7 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { override fun read(`in`: DataInput): Map? { val size = `in`.readInt() - val map = HashMap(size) + val map = Maps.newHashMapWithExpectedSize(size)!! for (i in size.indices) { val name = IOUtil.readString(`in`)!! From 4c8ff1616e0137f80a072ed7526d678c1ded6cbf Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 14:33:47 +0400 Subject: [PATCH 02/11] Added tests with removing files and changing packages. Original commit: 111feb257451c204e52065788d5e7dd68ad47872 --- .../build/IncrementalJpsTestGenerated.java | 20 +++++++++++++++++++ .../incremental/filesExchangePackages/a.kt | 3 +++ .../incremental/filesExchangePackages/b.kt | 3 +++ .../filesExchangePackages/b.kt.new | 3 +++ .../filesExchangePackages/build.log | 17 ++++++++++++++++ .../incremental/filesExchangePackages/c.kt | 3 +++ .../filesExchangePackages/c.kt.new | 3 +++ .../multiplePackagesModified/a1.kt | 3 +++ .../multiplePackagesModified/a2.kt.new | 3 +++ .../multiplePackagesModified/b1.kt | 3 +++ .../multiplePackagesModified/b2.kt | 3 +++ .../multiplePackagesModified/b2.kt.delete | 0 .../multiplePackagesModified/build.log | 17 ++++++++++++++++ .../testData/incremental/packageRemoved/a.kt | 3 +++ .../incremental/packageRemoved/a.kt.delete | 0 .../testData/incremental/packageRemoved/b.kt | 3 +++ .../incremental/packageRemoved/b.kt.delete | 0 .../incremental/packageRemoved/build.log | 9 +++++++++ .../incremental/soleFileChangesPackage/a.kt | 3 +++ .../soleFileChangesPackage/a.kt.new | 4 ++++ .../soleFileChangesPackage/build.log | 7 +++++++ 21 files changed, 110 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/a.kt create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt.new create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/build.log create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt create mode 100644 jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt.new create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/a1.kt create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/a2.kt.new create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/b1.kt create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt.delete create mode 100644 jps/jps-plugin/testData/incremental/multiplePackagesModified/build.log create mode 100644 jps/jps-plugin/testData/incremental/packageRemoved/a.kt create mode 100644 jps/jps-plugin/testData/incremental/packageRemoved/a.kt.delete create mode 100644 jps/jps-plugin/testData/incremental/packageRemoved/b.kt create mode 100644 jps/jps-plugin/testData/incremental/packageRemoved/b.kt.delete create mode 100644 jps/jps-plugin/testData/incremental/packageRemoved/build.log create mode 100644 jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt create mode 100644 jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt.new create mode 100644 jps/jps-plugin/testData/incremental/soleFileChangesPackage/build.log diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index c8359bf9773..8ac2e37fa69 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -56,11 +56,21 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/constantValue/"); } + @TestMetadata("filesExchangePackages") + public void testFilesExchangePackages() throws Exception { + doTest("jps-plugin/testData/incremental/filesExchangePackages/"); + } + @TestMetadata("independentClasses") public void testIndependentClasses() throws Exception { doTest("jps-plugin/testData/incremental/independentClasses/"); } + @TestMetadata("multiplePackagesModified") + public void testMultiplePackagesModified() throws Exception { + doTest("jps-plugin/testData/incremental/multiplePackagesModified/"); + } + @TestMetadata("packageFileAdded") public void testPackageFileAdded() throws Exception { doTest("jps-plugin/testData/incremental/packageFileAdded/"); @@ -86,6 +96,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/packageFilesChangedInTurn/"); } + @TestMetadata("packageRemoved") + public void testPackageRemoved() throws Exception { + doTest("jps-plugin/testData/incremental/packageRemoved/"); + } + @TestMetadata("returnTypeChanged") public void testReturnTypeChanged() throws Exception { doTest("jps-plugin/testData/incremental/returnTypeChanged/"); @@ -96,6 +111,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/simpleClassDependency/"); } + @TestMetadata("soleFileChangesPackage") + public void testSoleFileChangesPackage() throws Exception { + doTest("jps-plugin/testData/incremental/soleFileChangesPackage/"); + } + @TestMetadata("topLevelFunctionSameSignature") public void testTopLevelFunctionSameSignature() throws Exception { doTest("jps-plugin/testData/incremental/topLevelFunctionSameSignature/"); diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/a.kt b/jps/jps-plugin/testData/incremental/filesExchangePackages/a.kt new file mode 100644 index 00000000000..058137655b8 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/a.kt @@ -0,0 +1,3 @@ +package foo + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt b/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt new file mode 100644 index 00000000000..d838bdff1a4 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt @@ -0,0 +1,3 @@ +package foo + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt.new b/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt.new new file mode 100644 index 00000000000..75675fcebb4 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/b.kt.new @@ -0,0 +1,3 @@ +package bar + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/build.log b/jps/jps-plugin/testData/incremental/filesExchangePackages/build.log new file mode 100644 index 00000000000..492218cc4a6 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/build.log @@ -0,0 +1,17 @@ +Cleaning output files: +out/production/module/bar/BarPackage-c-*.class +out/production/module/bar/BarPackage.class +out/production/module/foo/FooPackage-b-*.class +out/production/module/foo/FooPackage.class +End of files +Compiling files: +src/b.kt +src/c.kt +End of files +Cleaning output files: +out/production/module/foo/FooPackage-a-*.class +out/production/module/foo/FooPackage.class +End of files +Compiling files: +src/a.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt b/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt new file mode 100644 index 00000000000..ba081bb0bbd --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt @@ -0,0 +1,3 @@ +package bar + +fun c() = "c" diff --git a/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt.new b/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt.new new file mode 100644 index 00000000000..e51d910bb9d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/filesExchangePackages/c.kt.new @@ -0,0 +1,3 @@ +package foo + +fun c() = "c" diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/a1.kt b/jps/jps-plugin/testData/incremental/multiplePackagesModified/a1.kt new file mode 100644 index 00000000000..2bd705934bc --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiplePackagesModified/a1.kt @@ -0,0 +1,3 @@ +package a + +fun a1() = ":)" \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/a2.kt.new b/jps/jps-plugin/testData/incremental/multiplePackagesModified/a2.kt.new new file mode 100644 index 00000000000..4e46bd9087f --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiplePackagesModified/a2.kt.new @@ -0,0 +1,3 @@ +package a + +fun a2() = ":))" \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/b1.kt b/jps/jps-plugin/testData/incremental/multiplePackagesModified/b1.kt new file mode 100644 index 00000000000..21999b4bfe6 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiplePackagesModified/b1.kt @@ -0,0 +1,3 @@ +package b + +fun b1() = ":(" \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt b/jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt new file mode 100644 index 00000000000..d2f49a90033 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt @@ -0,0 +1,3 @@ +package b + +fun b2() = ":((" \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt.delete b/jps/jps-plugin/testData/incremental/multiplePackagesModified/b2.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps/jps-plugin/testData/incremental/multiplePackagesModified/build.log b/jps/jps-plugin/testData/incremental/multiplePackagesModified/build.log new file mode 100644 index 00000000000..914a8b69528 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/multiplePackagesModified/build.log @@ -0,0 +1,17 @@ +Cleaning output files: +out/production/module/b/BPackage-b2-*.class +out/production/module/b/BPackage.class +End of files +Compiling files: +src/a2.kt +End of files +Cleaning output files: +out/production/module/a/APackage-a1-*.class +out/production/module/a/APackage.class +out/production/module/b/BPackage-b1-*.class +out/production/module/b/BPackage.class +End of files +Compiling files: +src/a1.kt +src/b1.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/packageRemoved/a.kt b/jps/jps-plugin/testData/incremental/packageRemoved/a.kt new file mode 100644 index 00000000000..30ca24b5576 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRemoved/a.kt @@ -0,0 +1,3 @@ +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/packageRemoved/a.kt.delete b/jps/jps-plugin/testData/incremental/packageRemoved/a.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps/jps-plugin/testData/incremental/packageRemoved/b.kt b/jps/jps-plugin/testData/incremental/packageRemoved/b.kt new file mode 100644 index 00000000000..5c782f47a25 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRemoved/b.kt @@ -0,0 +1,3 @@ +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/packageRemoved/b.kt.delete b/jps/jps-plugin/testData/incremental/packageRemoved/b.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps/jps-plugin/testData/incremental/packageRemoved/build.log b/jps/jps-plugin/testData/incremental/packageRemoved/build.log new file mode 100644 index 00000000000..c307a197264 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRemoved/build.log @@ -0,0 +1,9 @@ +Cleaning output files: +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Cleaning output files: +out/production/module/test/TestPackage-b-*.class +End of files +Compiling files: +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt new file mode 100644 index 00000000000..058137655b8 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt @@ -0,0 +1,3 @@ +package foo + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt.new b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt.new new file mode 100644 index 00000000000..eb3b7b757d2 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/a.kt.new @@ -0,0 +1,4 @@ +package bar + +fun a() = "a" +fun aa() = "aa" diff --git a/jps/jps-plugin/testData/incremental/soleFileChangesPackage/build.log b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/build.log new file mode 100644 index 00000000000..3c8fdd9ea17 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/soleFileChangesPackage/build.log @@ -0,0 +1,7 @@ +Cleaning output files: +out/production/module/foo/FooPackage-a-*.class +out/production/module/foo/FooPackage.class +End of files +Compiling files: +src/a.kt +End of files \ No newline at end of file From ab55592b5e683e583fb2d0231177474c92403a60 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 17:50:26 +0400 Subject: [PATCH 03/11] Added test with all types of constants. Original commit: 3ee92da6f0fe46c7203de1676259ca4bbff0022f --- .../build/IncrementalJpsTestGenerated.java | 5 +++++ .../incremental/allConstants/build.log | 22 +++++++++++++++++++ .../incremental/allConstants/const.kt | 12 ++++++++++ .../incremental/allConstants/const.kt.new.1 | 12 ++++++++++ .../incremental/allConstants/const.kt.new.2 | 12 ++++++++++ .../incremental/allConstants/usage.kt | 4 ++++ 6 files changed, 67 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/allConstants/build.log create mode 100644 jps/jps-plugin/testData/incremental/allConstants/const.kt create mode 100644 jps/jps-plugin/testData/incremental/allConstants/const.kt.new.1 create mode 100644 jps/jps-plugin/testData/incremental/allConstants/const.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/allConstants/usage.kt diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index 8ac2e37fa69..d91f934ed53 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -32,6 +32,11 @@ import org.jetbrains.jet.jps.build.AbstractIncrementalJpsTest; @SuppressWarnings("all") @TestMetadata("jps-plugin/testData/incremental") public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { + @TestMetadata("allConstants") + public void testAllConstants() throws Exception { + doTest("jps-plugin/testData/incremental/allConstants/"); + } + public void testAllFilesPresentInIncremental() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("jps-plugin/testData/incremental"), Pattern.compile("^([^\\.]+)$"), false); } diff --git a/jps/jps-plugin/testData/incremental/allConstants/build.log b/jps/jps-plugin/testData/incremental/allConstants/build.log new file mode 100644 index 00000000000..22f4d62f635 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/allConstants/build.log @@ -0,0 +1,22 @@ +Cleaning output files: +out/production/module/test/TestPackage-const-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/const.kt +End of files + + +Cleaning output files: +out/production/module/test/TestPackage-const-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/const.kt +End of files +Cleaning output files: +out/production/module/test/Usage.class +End of files +Compiling files: +src/usage.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/allConstants/const.kt b/jps/jps-plugin/testData/incremental/allConstants/const.kt new file mode 100644 index 00000000000..d0d300c1312 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/allConstants/const.kt @@ -0,0 +1,12 @@ +package test + +val b: Byte = 100 +val s: Short = 20000 +val i: Int = 2000000 +val l: Long = 2000000000000L +val f: Float = 3.14f +val d: Double = 3.14 +val bb: Boolean = true +val c: Char = '\u03c0' // pi symbol + +val str: String = ":)" diff --git a/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.1 b/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.1 new file mode 100644 index 00000000000..26796869ddc --- /dev/null +++ b/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.1 @@ -0,0 +1,12 @@ +package test + +val b: Byte = 50 + 50 +val s: Short = 10000 + 10000 +val i: Int = 1000000 + 1000000 +val l: Long = 1000000000000L + 1000000000000L +val f: Float = 0.0f + 3.14f +val d: Double = 0.0 + 3.14 +val bb: Boolean = !false +val c: Char = '\u03c0' // pi symbol + +val str: String = ":)" diff --git a/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.2 b/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.2 new file mode 100644 index 00000000000..668b4009dce --- /dev/null +++ b/jps/jps-plugin/testData/incremental/allConstants/const.kt.new.2 @@ -0,0 +1,12 @@ +package test + +val b: Byte = 0 +val s: Short = 0 +val i: Int = 0 +val l: Long = 0 +val f: Float = 0.0f +val d: Double = 0.0 +val bb: Boolean = false +val c: Char = 'x' + +val str: String = ":(" diff --git a/jps/jps-plugin/testData/incremental/allConstants/usage.kt b/jps/jps-plugin/testData/incremental/allConstants/usage.kt new file mode 100644 index 00000000000..a52256d1a83 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/allConstants/usage.kt @@ -0,0 +1,4 @@ +package test + +deprecated("$b $s $i $l $f $d $bb $c $str") +class Usage From 42ad41f4d55b2f36cf1b309da0fbfadbb8285e43 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 17:48:47 +0400 Subject: [PATCH 04/11] Changing lastModified manually in case when it wasn't changed after file overwriting. Original commit: ab442754d6bf2eb27e0ffbba3646254a26ffe48f --- .../jet/jps/build/AbstractIncrementalJpsTest.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt index 1879580f7d1..edd44cf39c1 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt @@ -187,7 +187,16 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { private class ModifyContent(name: String, val dataFile: File) : Modification(name) { override fun perform(workDir: File) { - dataFile.copyTo(File(workDir, "src/$name")) + val file = File(workDir, "src/$name") + + val oldLastModified = file.lastModified() + dataFile.copyTo(file) + + val newLastModified = file.lastModified() + if (newLastModified <= oldLastModified) { + //Mac OS and some versions of Linux truncate timestamp to nearest second + file.setLastModified(oldLastModified + 1000) + } } } From 851a500b88c1ecd8d2d4d46dea028f01b76d2675 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 19:01:47 +0400 Subject: [PATCH 05/11] Removed ingoring files facility from incremental tests. It is not necessary since script.xml are not generated in out directory anymore. Original commit: 9dd627a23db033c5c01ec7c33bd08c9e2aabd603 --- .../jps/build/AbstractIncrementalJpsTest.kt | 2 +- .../jet/jps/build/classFilesComparison.kt | 20 ++++++++----------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt index edd44cf39c1..1878b410108 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt @@ -111,7 +111,7 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { rebuild() - assertEqualDirectories(outDir, outAfterMake, { it.name == "script.xml" }) + assertEqualDirectories(outDir, outAfterMake) FileUtil.delete(outAfterMake) } diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/classFilesComparison.kt b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/classFilesComparison.kt index d5cf4a3667e..1811f5ed2d4 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/classFilesComparison.kt +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/classFilesComparison.kt @@ -39,7 +39,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClass fun File.hash() = Files.hash(this, Hashing.crc32()) -fun getDirectoryString(dir: File, interestingPaths: List, ignore: (File) -> Boolean): String { +fun getDirectoryString(dir: File, interestingPaths: List): String { val buf = StringBuilder() val p = Printer(buf) @@ -52,10 +52,6 @@ fun getDirectoryString(dir: File, interestingPaths: List, ignore: (File) val children = listFiles!!.toList().sortBy { it.getName() }.sortBy { it.isDirectory() } for (child in children) { - if (ignore(child)) { - continue - } - if (child.isDirectory()) { p.println(child.name) addDirContent(child) @@ -82,10 +78,10 @@ fun getDirectoryString(dir: File, interestingPaths: List, ignore: (File) return buf.toString() } -fun getAllRelativePaths(dir: File, ignore: (File) -> Boolean): Set { +fun getAllRelativePaths(dir: File): Set { val result = HashSet() FileUtil.processFilesRecursively(dir) { - if (it!!.isFile() && !ignore(it)) { + if (it!!.isFile()) { result.add(FileUtil.getRelativePath(dir, it)!!) } @@ -95,16 +91,16 @@ fun getAllRelativePaths(dir: File, ignore: (File) -> Boolean): Set { return result } -fun assertEqualDirectories(expected: File, actual: File, ignore: (File) -> Boolean) { - val pathsInExpected = getAllRelativePaths(expected, ignore) - val pathsInActual = getAllRelativePaths(actual, ignore) +fun assertEqualDirectories(expected: File, actual: File) { + val pathsInExpected = getAllRelativePaths(expected) + val pathsInActual = getAllRelativePaths(actual) val changedPaths = Sets.intersection(pathsInExpected, pathsInActual) .filter { !Arrays.equals(File(expected, it).readBytes(), File(actual, it).readBytes()) } .sort() - val expectedString = getDirectoryString(expected, changedPaths, ignore) - val actualString = getDirectoryString(actual, changedPaths, ignore) + val expectedString = getDirectoryString(expected, changedPaths) + val actualString = getDirectoryString(actual, changedPaths) assertEquals(expectedString, actualString) } From 703972b02016f2901fbe3a1c0a790f47958d8523 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 20:52:28 +0400 Subject: [PATCH 06/11] Clearing constants data when removing file. Original commit: fc7dceba5ad3acc42f87246ae03f872c74ce9c29 --- .../jps/incremental/IncrementalCacheImpl.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index fb71bfd94b5..5a42f4e58bb 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -74,13 +74,14 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { if (header.syntheticClassKind == JvmAnnotationNames.KotlinSyntheticClass.Kind.PACKAGE_PART) { assert(sourceFiles.size == 1) { "Package part from several source files: $sourceFiles" } packagePartMap.putPackagePartSourceData(moduleId, sourceFiles.first(), className) - return constantsMap.process(className, fileBytes) + return constantsMap.process(moduleId, sourceFiles.first(), fileBytes) } return false } public fun clearCacheForRemovedFile(moduleId: String, sourceFile: File) { + constantsMap.remove(moduleId, sourceFile) packagePartMap.remove(moduleId, sourceFile) } @@ -135,6 +136,10 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { ConstantsMapExternalizer ) + private fun getKey(moduleId: String, sourceFile: File): String { + return moduleId + File.pathSeparator + sourceFile.getAbsolutePath() + } + private fun getConstantsMap(bytes: ByteArray): Map { val result = HashMap() @@ -150,12 +155,12 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return result } - public fun process(packagePartClass: JvmClassName, bytes: ByteArray): Boolean { - return put(packagePartClass, getConstantsMap(bytes)) + public fun process(moduleId: String, file: File, bytes: ByteArray): Boolean { + return put(moduleId, file, getConstantsMap(bytes)) } - private fun put(packagePartClass: JvmClassName, constantsMap: Map): Boolean { - val key = packagePartClass.getInternalName() + private fun put(moduleId: String, file: File, constantsMap: Map): Boolean { + val key = getKey(moduleId, file) val oldMap = map[key] if (oldMap == constantsMap) { @@ -165,6 +170,10 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return true } + public fun remove(moduleId: String, file: File) { + map.remove(getKey(moduleId, file)) + } + public fun close() { map.close() } From ed03bec629186d63ddd75c13284c91b2e0f2978c Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 21:32:15 +0400 Subject: [PATCH 07/11] Writing class names in proto map (to avoid ambiguities) Original commit: 5c49eb0a540482caef80629746740faa5fe50006 --- .../jps/incremental/IncrementalCacheImpl.kt | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index 5a42f4e58bb..6a4e2c54947 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -37,6 +37,7 @@ import java.util.HashSet import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache import java.util.HashMap import com.google.common.collect.Maps +import org.jetbrains.jet.lang.resolve.java.PackageClassUtils public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { class object { @@ -55,16 +56,15 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { if (classNameAndHeader == null) return false val (className, header) = classNameAndHeader - val classFqName = className.getFqNameForClassNameWithoutDollars() val annotationDataEncoded = header.annotationData if (annotationDataEncoded != null) { val data = BitEncoding.decodeBytes(annotationDataEncoded) when (header.kind) { KotlinClassHeader.Kind.PACKAGE_FACADE -> { - return protoMap.put(moduleId, classFqName.parent(), data) + return protoMap.put(moduleId, className, data) } KotlinClassHeader.Kind.CLASS -> { - return protoMap.put(moduleId, classFqName, data) + return protoMap.put(moduleId, className, data) } else -> { throw IllegalStateException("Unexpected kind with annotationData: ${header.kind}") @@ -90,7 +90,7 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { } public override fun getPackageData(moduleId: String, fqName: String): ByteArray? { - return protoMap[moduleId, fqName] + return protoMap[moduleId, JvmClassName.byFqNameWithoutInnerClasses(PackageClassUtils.getPackageClassFqName(FqName(fqName)))] } public fun close() { @@ -106,12 +106,12 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { ByteArrayExternalizer ) - private fun getKeyString(moduleId: String, fqName: FqName): String { - return moduleId + ":" + fqName + private fun getKeyString(moduleId: String, className: JvmClassName): String { + return moduleId + ":" + className.getInternalName() } - public fun put(moduleId: String, fqName: FqName, data: ByteArray): Boolean { - val key = getKeyString(moduleId, fqName) + public fun put(moduleId: String, className: JvmClassName, data: ByteArray): Boolean { + val key = getKeyString(moduleId, className) val oldData = map[key] if (Arrays.equals(data, oldData)) { return false @@ -120,8 +120,8 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return true } - public fun get(moduleId: String, fqName: String): ByteArray? { - return map[getKeyString(moduleId, FqName(fqName))] + public fun get(moduleId: String, className: JvmClassName): ByteArray? { + return map[getKeyString(moduleId, className)] } public fun close() { From 4462ad48eed50a49bec40d7246e3f49a31d0a98b Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 21:49:20 +0400 Subject: [PATCH 08/11] Minor. Fixed mixed up error messages in test. Original commit: 471e3e80f29653a37aa1a8b0532b845c84bec7e3 --- .../org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt index 1878b410108..3fb918b3e7e 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt @@ -88,10 +88,10 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { val haveFilesWithNumbers = testDataDir.listFiles { it.getName().matches(".+\\.(new|delete)\\.\\d+$") }?.isNotEmpty() ?: false if (haveFilesWithoutNumbers && haveFilesWithNumbers) { - fail("Bad test data format: no files ending with \".new\" or \".delete\" found") + fail("Bad test data format: files ending with both unnumbered and numbered \".new\"/\".delete\" were found") } if (!haveFilesWithoutNumbers && !haveFilesWithNumbers) { - fail("Bad test data format: files ending with both unnumbered and numbered \".new\"/\".delete\" were found") + fail("Bad test data format: no files ending with \".new\" or \".delete\" found") } if (haveFilesWithoutNumbers) { From 18113ed61a87529b77c9d65e2ba386ebea15b66f Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 20 Jun 2014 21:51:27 +0400 Subject: [PATCH 09/11] Added clearing proto data in incremental cache. Original commit: 8479ca76b0e815cc104ca7143a2b355dc45a7a77 --- .../jet/jps/build/KotlinBuilder.java | 11 +++- .../jps/incremental/IncrementalCacheImpl.kt | 59 +++++++++++++++++-- .../build/IncrementalJpsTestGenerated.java | 15 +++++ .../incremental/classRecreated/A.kt.new.2 | 3 + .../testData/incremental/classRecreated/a.kt | 3 + .../incremental/classRecreated/a.kt.delete.1 | 1 + .../incremental/classRecreated/build.log | 17 ++++++ .../incremental/classRecreated/other.kt | 4 ++ .../incremental/packageRecreated/a.kt | 3 + .../packageRecreated/a.kt.delete.1 | 1 + .../incremental/packageRecreated/b.kt.new.2 | 3 + .../incremental/packageRecreated/build.log | 11 ++++ .../packageRecreatedAfterRenaming/a.kt | 3 + .../packageRecreatedAfterRenaming/a.kt.new.1 | 3 + .../packageRecreatedAfterRenaming/b.kt.new.2 | 3 + .../packageRecreatedAfterRenaming/build.log | 19 ++++++ 16 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 jps/jps-plugin/testData/incremental/classRecreated/A.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/classRecreated/a.kt create mode 100644 jps/jps-plugin/testData/incremental/classRecreated/a.kt.delete.1 create mode 100644 jps/jps-plugin/testData/incremental/classRecreated/build.log create mode 100644 jps/jps-plugin/testData/incremental/classRecreated/other.kt create mode 100644 jps/jps-plugin/testData/incremental/packageRecreated/a.kt create mode 100644 jps/jps-plugin/testData/incremental/packageRecreated/a.kt.delete.1 create mode 100644 jps/jps-plugin/testData/incremental/packageRecreated/b.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/packageRecreated/build.log create mode 100644 jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt create mode 100644 jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt.new.1 create mode 100644 jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/b.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/build.log diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java index 8faa3f15c23..853be538fc2 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.jps.build; +import com.google.common.collect.Lists; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.StreamUtil; @@ -23,6 +24,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; +import kotlin.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.cli.common.KotlinVersion; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; @@ -222,11 +224,18 @@ public class KotlinBuilder extends ModuleLevelBuilder { IncrementalCacheImpl cache = new IncrementalCacheImpl(KotlinBuilderModuleScriptGenerator.getIncrementalCacheDir(context)); try { + List> moduleIdsAndFiles = Lists.newArrayList(); + Map outDirectories = new HashMap(); + for (ModuleBuildTarget target : chunk.getTargets()) { + String targetId = target.getId(); + outDirectories.put(targetId, target.getOutputDir()); + for (String file : dirtyFilesHolder.getRemovedFiles(target)) { - cache.clearCacheForRemovedFile(target.getId(), new File(file)); + moduleIdsAndFiles.add(new Pair(targetId, new File(file))); } } + cache.clearCacheForRemovedFiles(moduleIdsAndFiles, outDirectories); boolean significantChanges = false; diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index 6a4e2c54947..56a64060821 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -17,7 +17,6 @@ package org.jetbrains.jet.jps.incremental import java.io.File -import com.intellij.util.io.PersistentMap import com.intellij.util.io.PersistentHashMap import java.io.DataOutput import com.intellij.util.io.IOUtil @@ -38,6 +37,8 @@ import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache import java.util.HashMap import com.google.common.collect.Maps import org.jetbrains.jet.lang.resolve.java.PackageClassUtils +import com.intellij.util.containers.MultiMap +import com.intellij.openapi.util.io.FileUtil public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { class object { @@ -80,9 +81,13 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return false } - public fun clearCacheForRemovedFile(moduleId: String, sourceFile: File) { - constantsMap.remove(moduleId, sourceFile) - packagePartMap.remove(moduleId, sourceFile) + public fun clearCacheForRemovedFiles(moduleIdsAndFiles: Collection>, outDirectories: Map) { + for ((moduleId, sourceFile) in moduleIdsAndFiles) { + constantsMap.remove(moduleId, sourceFile) + packagePartMap.remove(moduleId, sourceFile) + } + + protoMap.clearOutdated(outDirectories) } public override fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map): Collection { @@ -100,7 +105,7 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { } private inner class ProtoMap { - private val map: PersistentMap = PersistentHashMap( + private val map: PersistentHashMap = PersistentHashMap( File(baseDir, PROTO_MAP), EnumeratorStringDescriptor(), ByteArrayExternalizer @@ -110,6 +115,11 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return moduleId + ":" + className.getInternalName() } + private fun parseKeyString(key: String): Pair { + val colon = key.lastIndexOf(":") + return Pair(key.substring(0, colon), JvmClassName.byInternalName(key.substring(colon + 1))) + } + public fun put(moduleId: String, className: JvmClassName, data: ByteArray): Boolean { val key = getKeyString(moduleId, className) val oldData = map[key] @@ -124,6 +134,27 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return map[getKeyString(moduleId, className)] } + public fun clearOutdated(outDirectories: Map) { + val keysToRemove = HashSet() + + map.processKeys { key -> + val (moduleId, className) = parseKeyString(key!!) + val outDir = outDirectories[moduleId] + if (outDir != null) { + val classFile = File(outDir, FileUtil.toSystemDependentName(className.getInternalName()) + ".class") + if (!classFile.exists()) { + keysToRemove.add(key) + } + } + + true + } + + for (key in keysToRemove) { + map.remove(key) + } + } + public fun close() { map.close() } @@ -283,6 +314,24 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache { return result } + public fun getModulesToPackages(): MultiMap { + val result = MultiMap.createSet() + + map.processKeysWithExistingMapping { key -> + val indexOf = key!!.indexOf(File.pathSeparator) + val moduleId = key.substring(0, indexOf) + val packagePartClassName = map[key]!! + + val packageFqName = JvmClassName.byInternalName(packagePartClassName).getFqNameForClassNameWithoutDollars().parent() + + result.putValue(moduleId, packageFqName) + + true + } + + return result + } + public fun close() { map.close() } diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index d91f934ed53..c475e1dda7a 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -41,6 +41,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("jps-plugin/testData/incremental"), Pattern.compile("^([^\\.]+)$"), false); } + @TestMetadata("classRecreated") + public void testClassRecreated() throws Exception { + doTest("jps-plugin/testData/incremental/classRecreated/"); + } + @TestMetadata("classSignatureChanged") public void testClassSignatureChanged() throws Exception { doTest("jps-plugin/testData/incremental/classSignatureChanged/"); @@ -101,6 +106,16 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/packageFilesChangedInTurn/"); } + @TestMetadata("packageRecreated") + public void testPackageRecreated() throws Exception { + doTest("jps-plugin/testData/incremental/packageRecreated/"); + } + + @TestMetadata("packageRecreatedAfterRenaming") + public void testPackageRecreatedAfterRenaming() throws Exception { + doTest("jps-plugin/testData/incremental/packageRecreatedAfterRenaming/"); + } + @TestMetadata("packageRemoved") public void testPackageRemoved() throws Exception { doTest("jps-plugin/testData/incremental/packageRemoved/"); diff --git a/jps/jps-plugin/testData/incremental/classRecreated/A.kt.new.2 b/jps/jps-plugin/testData/incremental/classRecreated/A.kt.new.2 new file mode 100644 index 00000000000..1b0178fd9be --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classRecreated/A.kt.new.2 @@ -0,0 +1,3 @@ +package test + +class A diff --git a/jps/jps-plugin/testData/incremental/classRecreated/a.kt b/jps/jps-plugin/testData/incremental/classRecreated/a.kt new file mode 100644 index 00000000000..1b0178fd9be --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classRecreated/a.kt @@ -0,0 +1,3 @@ +package test + +class A diff --git a/jps/jps-plugin/testData/incremental/classRecreated/a.kt.delete.1 b/jps/jps-plugin/testData/incremental/classRecreated/a.kt.delete.1 new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classRecreated/a.kt.delete.1 @@ -0,0 +1 @@ + diff --git a/jps/jps-plugin/testData/incremental/classRecreated/build.log b/jps/jps-plugin/testData/incremental/classRecreated/build.log new file mode 100644 index 00000000000..d59630c7ce7 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classRecreated/build.log @@ -0,0 +1,17 @@ +Cleaning output files: +out/production/module/test/A.class +End of files +Compiling files: +End of files + + +Compiling files: +src/A.kt +End of files +Cleaning output files: +out/production/module/test/TestPackage-other-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/other.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/classRecreated/other.kt b/jps/jps-plugin/testData/incremental/classRecreated/other.kt new file mode 100644 index 00000000000..dc156549ce5 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/classRecreated/other.kt @@ -0,0 +1,4 @@ +package test + +fun other() { +} diff --git a/jps/jps-plugin/testData/incremental/packageRecreated/a.kt b/jps/jps-plugin/testData/incremental/packageRecreated/a.kt new file mode 100644 index 00000000000..30ca24b5576 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreated/a.kt @@ -0,0 +1,3 @@ +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/packageRecreated/a.kt.delete.1 b/jps/jps-plugin/testData/incremental/packageRecreated/a.kt.delete.1 new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreated/a.kt.delete.1 @@ -0,0 +1 @@ + diff --git a/jps/jps-plugin/testData/incremental/packageRecreated/b.kt.new.2 b/jps/jps-plugin/testData/incremental/packageRecreated/b.kt.new.2 new file mode 100644 index 00000000000..5c782f47a25 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreated/b.kt.new.2 @@ -0,0 +1,3 @@ +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/packageRecreated/build.log b/jps/jps-plugin/testData/incremental/packageRecreated/build.log new file mode 100644 index 00000000000..73408189236 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreated/build.log @@ -0,0 +1,11 @@ +Cleaning output files: +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +End of files + + +Compiling files: +src/b.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt new file mode 100644 index 00000000000..30ca24b5576 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt @@ -0,0 +1,3 @@ +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt.new.1 b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt.new.1 new file mode 100644 index 00000000000..9d39f81713e --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/a.kt.new.1 @@ -0,0 +1,3 @@ +package test2 + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/b.kt.new.2 b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/b.kt.new.2 new file mode 100644 index 00000000000..5c782f47a25 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/b.kt.new.2 @@ -0,0 +1,3 @@ +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/build.log b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/build.log new file mode 100644 index 00000000000..7cb5ae7d3e1 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/packageRecreatedAfterRenaming/build.log @@ -0,0 +1,19 @@ +Cleaning output files: +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/a.kt +End of files + + +Compiling files: +src/b.kt +End of files +Cleaning output files: +out/production/module/test2/Test2Package-a-*.class +out/production/module/test2/Test2Package.class +End of files +Compiling files: +src/a.kt +End of files From bdc735f48f7c295af6fc02687e669ac73d852155 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 23 Jun 2014 14:23:26 +0400 Subject: [PATCH 10/11] Added tests with class referenced from proto. Original commit: ca4ac43add86c8718e1c04a01c700d977662fa03 --- .../jps/build/IncrementalJpsTestGenerated.java | 10 ++++++++++ .../incremental/dependencyClassReferenced/a.kt | 6 ++++++ .../dependencyClassReferenced/a.kt.new | 6 ++++++ .../incremental/dependencyClassReferenced/b.kt | 6 ++++++ .../dependencyClassReferenced/build.log | 7 +++++++ .../incremental/ourClassReferenced/Klass.kt | 3 +++ .../ourClassReferenced/Klass.kt.new.2 | 3 +++ .../incremental/ourClassReferenced/a.kt | 8 ++++++++ .../incremental/ourClassReferenced/a.kt.new.1 | 8 ++++++++ .../incremental/ourClassReferenced/a.kt.new.2 | 8 ++++++++ .../incremental/ourClassReferenced/b.kt | 8 ++++++++ .../incremental/ourClassReferenced/build.log | 18 ++++++++++++++++++ 12 files changed, 91 insertions(+) create mode 100644 jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt create mode 100644 jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt.new create mode 100644 jps/jps-plugin/testData/incremental/dependencyClassReferenced/b.kt create mode 100644 jps/jps-plugin/testData/incremental/dependencyClassReferenced/build.log create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.1 create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.2 create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/b.kt create mode 100644 jps/jps-plugin/testData/incremental/ourClassReferenced/build.log diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index c475e1dda7a..487dbaee338 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -66,6 +66,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/constantValue/"); } + @TestMetadata("dependencyClassReferenced") + public void testDependencyClassReferenced() throws Exception { + doTest("jps-plugin/testData/incremental/dependencyClassReferenced/"); + } + @TestMetadata("filesExchangePackages") public void testFilesExchangePackages() throws Exception { doTest("jps-plugin/testData/incremental/filesExchangePackages/"); @@ -81,6 +86,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/multiplePackagesModified/"); } + @TestMetadata("ourClassReferenced") + public void testOurClassReferenced() throws Exception { + doTest("jps-plugin/testData/incremental/ourClassReferenced/"); + } + @TestMetadata("packageFileAdded") public void testPackageFileAdded() throws Exception { doTest("jps-plugin/testData/incremental/packageFileAdded/"); diff --git a/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt new file mode 100644 index 00000000000..89692d95832 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt @@ -0,0 +1,6 @@ +package test + +fun a(ref: kotlin.test.Asserter) { + b(ref) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt.new b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt.new new file mode 100644 index 00000000000..89692d95832 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/a.kt.new @@ -0,0 +1,6 @@ +package test + +fun a(ref: kotlin.test.Asserter) { + b(ref) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/dependencyClassReferenced/b.kt b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/b.kt new file mode 100644 index 00000000000..9addb367f04 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/b.kt @@ -0,0 +1,6 @@ +package test + +fun b(ref: kotlin.test.Asserter) { + a(ref) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/dependencyClassReferenced/build.log b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/build.log new file mode 100644 index 00000000000..37112dda098 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/dependencyClassReferenced/build.log @@ -0,0 +1,7 @@ +Cleaning output files: +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/a.kt +End of files diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt b/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt new file mode 100644 index 00000000000..a8ac38430eb --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt @@ -0,0 +1,3 @@ +package klass + +class Klass \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt.new.2 b/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt.new.2 new file mode 100644 index 00000000000..a8ac38430eb --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/Klass.kt.new.2 @@ -0,0 +1,3 @@ +package klass + +class Klass \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt new file mode 100644 index 00000000000..3682a9d2913 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt @@ -0,0 +1,8 @@ +package test + +import klass.* + +fun a(klass: Klass) { + b(klass) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.1 b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.1 new file mode 100644 index 00000000000..3682a9d2913 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.1 @@ -0,0 +1,8 @@ +package test + +import klass.* + +fun a(klass: Klass) { + b(klass) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.2 b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.2 new file mode 100644 index 00000000000..3682a9d2913 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/a.kt.new.2 @@ -0,0 +1,8 @@ +package test + +import klass.* + +fun a(klass: Klass) { + b(klass) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/b.kt b/jps/jps-plugin/testData/incremental/ourClassReferenced/b.kt new file mode 100644 index 00000000000..0d41f8e3417 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/b.kt @@ -0,0 +1,8 @@ +package test + +import klass.* + +fun b(klass: Klass) { + a(klass) + println(":)") +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/ourClassReferenced/build.log b/jps/jps-plugin/testData/incremental/ourClassReferenced/build.log new file mode 100644 index 00000000000..ccf56d9e65b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/ourClassReferenced/build.log @@ -0,0 +1,18 @@ +Cleaning output files: +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/a.kt +End of files + + +Cleaning output files: +out/production/module/klass/Klass.class +out/production/module/test/TestPackage-a-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/Klass.kt +src/a.kt +End of files From df1a3f7a55c7d055cf8b478b39600fe9dc945bb7 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 24 Jun 2014 16:29:00 +0400 Subject: [PATCH 11/11] Added exceptions for proguard: constants are used in JPS plugin. Original commit: 1ce0e6cd3e7d2934f04fba1ddae41657a972484c --- .../src/org/jetbrains/jet/jps/build/KotlinBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java index 853be538fc2..7df7be35870 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java @@ -224,7 +224,7 @@ public class KotlinBuilder extends ModuleLevelBuilder { IncrementalCacheImpl cache = new IncrementalCacheImpl(KotlinBuilderModuleScriptGenerator.getIncrementalCacheDir(context)); try { - List> moduleIdsAndFiles = Lists.newArrayList(); + List> moduleIdsAndFiles = new ArrayList>(); Map outDirectories = new HashMap(); for (ModuleBuildTarget target : chunk.getTargets()) {