From 81fabc90f9ebdfa65d8f5417f4d22ac64153075f Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 27 Aug 2014 18:15:05 +0400 Subject: [PATCH] Fixed redeclaration from incremental compilation. Added workaround for JPS bug. Original commit: 3226093fa6a75fc3086df488087a6848eb804d1b --- .../jps/build/KotlinSourceFileCollector.java | 5 +++++ .../build/IncrementalJpsTestGenerated.java | 22 ++++++++++++++++++- .../circularDependency/simple/build.log | 15 +++++++++++++ .../simple/dependencies.txt | 2 ++ .../circularDependency/simple/module1_a.kt | 9 ++++++++ .../circularDependency/simple/module2_b.kt | 7 ++++++ .../simple/module2_b.kt.new | 11 ++++++++++ 7 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 jps/jps-plugin/testData/incremental/circularDependency/simple/build.log create mode 100644 jps/jps-plugin/testData/incremental/circularDependency/simple/dependencies.txt create mode 100644 jps/jps-plugin/testData/incremental/circularDependency/simple/module1_a.kt create mode 100644 jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt create mode 100644 jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt.new diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java index c1e77ab0d3d..402086b3e03 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java @@ -49,6 +49,11 @@ public class KotlinSourceFileCollector { dirtyFilesHolder.processDirtyFiles(new FileProcessor() { @Override public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor root) throws IOException { + //TODO this is a workaround for bug in JPS: the latter erroneously calls process with invalid parameters + if (!root.getTarget().equals(target)) { + return true; + } + if (isKotlinSourceFile(file)) { result.putValue(target, file); } 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 58756f3e9ce..d1f2f8d6972 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 @@ -28,12 +28,31 @@ import java.util.regex.Pattern; /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("jps-plugin/testData/incremental") -@InnerTestClasses({IncrementalJpsTestGenerated.PureKotlin.class}) +@InnerTestClasses({IncrementalJpsTestGenerated.CircularDependency.class, IncrementalJpsTestGenerated.PureKotlin.class}) public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { public void testAllFilesPresentInIncremental() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental"), Pattern.compile("^([^\\.]+)$"), true); } + @TestMetadata("jps-plugin/testData/incremental/circularDependency") + @InnerTestClasses({}) + public static class CircularDependency extends AbstractIncrementalJpsTest { + public void testAllFilesPresentInCircularDependency() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("jps-plugin/testData/incremental/circularDependency"), Pattern.compile("^([^\\.]+)$"), true); + } + + @TestMetadata("simple") + public void testSimple() throws Exception { + doTest("jps-plugin/testData/incremental/circularDependency/simple/"); + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("CircularDependency"); + suite.addTestSuite(CircularDependency.class); + return suite; + } + } + @TestMetadata("jps-plugin/testData/incremental/pureKotlin") @InnerTestClasses({}) public static class PureKotlin extends AbstractIncrementalJpsTest { @@ -231,6 +250,7 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { public static Test suite() { TestSuite suite = new TestSuite("IncrementalJpsTestGenerated"); suite.addTestSuite(IncrementalJpsTestGenerated.class); + suite.addTest(CircularDependency.innerSuite()); suite.addTest(PureKotlin.innerSuite()); return suite; } diff --git a/jps/jps-plugin/testData/incremental/circularDependency/simple/build.log b/jps/jps-plugin/testData/incremental/circularDependency/simple/build.log new file mode 100644 index 00000000000..ee01130e93f --- /dev/null +++ b/jps/jps-plugin/testData/incremental/circularDependency/simple/build.log @@ -0,0 +1,15 @@ +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 +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 \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/circularDependency/simple/dependencies.txt b/jps/jps-plugin/testData/incremental/circularDependency/simple/dependencies.txt new file mode 100644 index 00000000000..02d5c8ca1a7 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/circularDependency/simple/dependencies.txt @@ -0,0 +1,2 @@ +module1->module2 +module2->module1 diff --git a/jps/jps-plugin/testData/incremental/circularDependency/simple/module1_a.kt b/jps/jps-plugin/testData/incremental/circularDependency/simple/module1_a.kt new file mode 100644 index 00000000000..5f77590e624 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/circularDependency/simple/module1_a.kt @@ -0,0 +1,9 @@ +package a + +class A + +fun a() { + // TODO: this call is compiled via package facade or package part depending on if callee comes from compiled or source + // Must be uncommented when modules are supported in compiler + //b.b() +} diff --git a/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt b/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt new file mode 100644 index 00000000000..164222697b7 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt @@ -0,0 +1,7 @@ +package b + +fun b() { + // TODO: this call is compiled via package facade or package part depending on if callee comes from compiled or source + // Must be uncommented when modules are supported in compiler + // a.a() +} diff --git a/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt.new b/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt.new new file mode 100644 index 00000000000..b6a3f3fd029 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/circularDependency/simple/module2_b.kt.new @@ -0,0 +1,11 @@ +package b + +fun b() { + // TODO: this call is compiled via package facade or package part depending on if callee comes from compiled or source + // Must be uncommented when modules are supported in compiler + // a.a() +} + +fun bb() { + +}