From 1c99b42c204069a0af90c5117237c4f9cb747f0a Mon Sep 17 00:00:00 2001 From: Grzegorz Kossakowski Date: Wed, 6 Nov 2013 11:44:57 +0100 Subject: [PATCH] Add pending test case for #958 (incremental compiler bug) The ticket contains detailed description of the problem. The test case just shows that if we set `incOptions := sbt.inc.IncOptions.Default` then the incremental compiler doesn't recover from compiler errors properly. --- .../compiler-project/error-in-invalidated/build.sbt | 1 + .../error-in-invalidated/changes/A1.scala | 3 +++ .../error-in-invalidated/changes/A2.scala | 3 +++ .../compiler-project/error-in-invalidated/pending | 9 +++++++++ .../error-in-invalidated/src/main/scala/A.scala | 3 +++ .../error-in-invalidated/src/main/scala/B.scala | 3 +++ 6 files changed, 22 insertions(+) create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/build.sbt create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A1.scala create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A2.scala create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/pending create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/A.scala create mode 100644 sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/B.scala diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/build.sbt b/sbt/src/sbt-test/compiler-project/error-in-invalidated/build.sbt new file mode 100644 index 000000000..f06e1de7d --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/build.sbt @@ -0,0 +1 @@ +incOptions := sbt.inc.IncOptions.Default diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A1.scala b/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A1.scala new file mode 100644 index 000000000..713316bf2 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A1.scala @@ -0,0 +1,3 @@ +class A { +// def initialized: Boolean = false +} diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A2.scala b/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A2.scala new file mode 100644 index 000000000..c52c45808 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/changes/A2.scala @@ -0,0 +1,3 @@ +class A { + def initialized: Boolean = false +} diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/pending b/sbt/src/sbt-test/compiler-project/error-in-invalidated/pending new file mode 100644 index 000000000..5f4cf63f8 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/pending @@ -0,0 +1,9 @@ +> compile +# comment out `initialized` method in A +$ copy-file changes/A1.scala src/main/scala/A.scala +# compilation of A.scala succeeds but B.scala gets invalidated (properly) and B.scala fails to compile +-> compile +# we change A.scala to its original shape so compilation should succeed again +$ copy-file changes/A2.scala src/main/scala/A.scala +# this fails at the moment due to use of stale class file for A, see #958 for details +> compile diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/A.scala b/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/A.scala new file mode 100644 index 000000000..c52c45808 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/A.scala @@ -0,0 +1,3 @@ +class A { + def initialized: Boolean = false +} diff --git a/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/B.scala b/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/B.scala new file mode 100644 index 000000000..066d5fc59 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/error-in-invalidated/src/main/scala/B.scala @@ -0,0 +1,3 @@ +class B { + def foo(a: A): Boolean = a.initialized +}