From 456e0717e9527d9a0710e36ef30bca16a86b3707 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 9 Oct 2017 16:09:12 -0400 Subject: [PATCH 1/5] Fix source-dependencies/sealed sealed test used to be implemented with `-> compile` in sbt/sbt but was marked pending in 8e65c0056618d642ddd91fcae65d1434ab5bd119. This changes back to the original state. --- .../sbt-test/source-dependencies/sealed/incOptions.properties | 1 + zinc/src/sbt-test/source-dependencies/sealed/test | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 zinc/src/sbt-test/source-dependencies/sealed/incOptions.properties diff --git a/zinc/src/sbt-test/source-dependencies/sealed/incOptions.properties b/zinc/src/sbt-test/source-dependencies/sealed/incOptions.properties new file mode 100644 index 0000000000..26949ab5dd --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/sealed/incOptions.properties @@ -0,0 +1 @@ +scalac.options = -Xfatal-warnings diff --git a/zinc/src/sbt-test/source-dependencies/sealed/test b/zinc/src/sbt-test/source-dependencies/sealed/test index 412e495308..7253703737 100644 --- a/zinc/src/sbt-test/source-dependencies/sealed/test +++ b/zinc/src/sbt-test/source-dependencies/sealed/test @@ -5,5 +5,4 @@ $ copy-file changes/A.scala A.scala # D.scala needs recompiling because the pattern match in D # is no longer exhaustive, which emits a warning -> checkRecompilations 1 A B C E -> checkRecompilations 2 D +-> compile From 6a829c2d648726e20efe4b021056da2df3a204a1 Mon Sep 17 00:00:00 2001 From: jvican Date: Tue, 10 Oct 2017 11:25:38 +0200 Subject: [PATCH 2/5] Add trait-trait-212 for Scala 2.12.3 This commit proves that the error only exists with 2.11.x. --- .../source-dependencies/trait-trait-212/build.json | 8 ++++++++ .../trait-trait-212/changes/SliceTransforms1.scala | 12 ++++++++++++ .../trait-trait-212/mirtest/EvaluatorSpecs.scala | 9 +++++++++ .../trait-trait-212/mirtest/Hello.scala | 8 ++++++++ .../trait-trait-212/mirtest/SliceTransforms.scala | 10 ++++++++++ .../trait-trait-212/mirtest/incOptions.properties | 1 + .../source-dependencies/trait-trait-212/test | 5 +++++ 7 files changed, 53 insertions(+) create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/build.json create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/incOptions.properties create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/test diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/build.json b/zinc/src/sbt-test/source-dependencies/trait-trait-212/build.json new file mode 100644 index 0000000000..c925de7e82 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/build.json @@ -0,0 +1,8 @@ +{ + "projects": [ + { + "name": "mirtest", + "scalaVersion": "2.12.3" + } + ] +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala new file mode 100644 index 0000000000..8004d156a8 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala @@ -0,0 +1,12 @@ +package gg +package table + +trait SliceTransforms { + def transform: Unit = { + // the use site is updated + buildNonemptyObjects(0, 1) + } + + // add extra parameter here + def buildNonemptyObjects(a: Int, b: Int): Unit = () +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala new file mode 100644 index 0000000000..32e7b8cf8d --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala @@ -0,0 +1,9 @@ +package xx + +import gg.table._ + +trait EvaluatorSpecification extends EvaluatorTestSupport { +} + +trait EvaluatorTestSupport extends SliceTransforms { +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala new file mode 100644 index 0000000000..10e1143812 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala @@ -0,0 +1,8 @@ +package xx + +object Hello extends App { + val consumer = new StringLibSpecs + consumer.transform +} + +class StringLibSpecs extends EvaluatorSpecification diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala new file mode 100644 index 0000000000..fb8c4c462d --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala @@ -0,0 +1,10 @@ +package gg +package table + +trait SliceTransforms { + def transform: Unit = { + buildNonemptyObjects(0) + } + + def buildNonemptyObjects(a: Int): Unit = () +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/incOptions.properties b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/incOptions.properties new file mode 100644 index 0000000000..adfc92c361 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/incOptions.properties @@ -0,0 +1 @@ +relationsDebug = true diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/test b/zinc/src/sbt-test/source-dependencies/trait-trait-212/test new file mode 100644 index 0000000000..d0fb2c1e75 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/test @@ -0,0 +1,5 @@ +> mirtest/run + +## After copying the Good implementation, we should be able to run successfully. +$ copy-file changes/SliceTransforms1.scala mirtest/SliceTransforms.scala +> mirtest/run From 91c0a69ec00c6e90ddea3bdd50f776b75c76ecec Mon Sep 17 00:00:00 2001 From: jvican Date: Wed, 11 Oct 2017 11:27:03 +0200 Subject: [PATCH 3/5] Add real reproduction case for sbt/zinc#417 --- .../src/sbt-test/source-dependencies/transitive-class/A.scala | 1 + .../sbt-test/source-dependencies/transitive-class/BC.scala | 2 ++ .../src/sbt-test/source-dependencies/transitive-class/D.scala | 4 ++++ .../source-dependencies/transitive-class/changes/A.scala | 3 +++ .../src/sbt-test/source-dependencies/transitive-class/pending | 3 +++ 5 files changed, 13 insertions(+) create mode 100644 zinc/src/sbt-test/source-dependencies/transitive-class/A.scala create mode 100644 zinc/src/sbt-test/source-dependencies/transitive-class/BC.scala create mode 100644 zinc/src/sbt-test/source-dependencies/transitive-class/D.scala create mode 100644 zinc/src/sbt-test/source-dependencies/transitive-class/changes/A.scala create mode 100644 zinc/src/sbt-test/source-dependencies/transitive-class/pending diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/A.scala b/zinc/src/sbt-test/source-dependencies/transitive-class/A.scala new file mode 100644 index 0000000000..68c5796a7c --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/transitive-class/A.scala @@ -0,0 +1 @@ +abstract class A diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/BC.scala b/zinc/src/sbt-test/source-dependencies/transitive-class/BC.scala new file mode 100644 index 0000000000..150a8f195a --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/transitive-class/BC.scala @@ -0,0 +1,2 @@ +class B extends A +class C extends B diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/D.scala b/zinc/src/sbt-test/source-dependencies/transitive-class/D.scala new file mode 100644 index 0000000000..08ebf2e960 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/transitive-class/D.scala @@ -0,0 +1,4 @@ +class D extends C +object Hello extends App { + new D +} diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/changes/A.scala b/zinc/src/sbt-test/source-dependencies/transitive-class/changes/A.scala new file mode 100644 index 0000000000..a02e9e5db4 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/transitive-class/changes/A.scala @@ -0,0 +1,3 @@ +abstract class A { + def foo: String = "" +} diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/pending b/zinc/src/sbt-test/source-dependencies/transitive-class/pending new file mode 100644 index 0000000000..b4847740f4 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/transitive-class/pending @@ -0,0 +1,3 @@ +> compile +$ copy-file changes/A.scala A.scala +> checkRecompilations 2 A B C D Hello From 05482d131346d645375263e1420d2cd19b2ea6ef Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 12 Oct 2017 03:01:37 -0400 Subject: [PATCH 4/5] Fixes undercompilation on inheritance on same source ### background In sbt 0.13 days, we could ignore the relationship between two classes defined in the same `*.scala` source file, because they will be compiled anyway, and the invalidation was done at the source file level. With class-based namehashing, the invalidation is done at the class level, so we can no longer ignore inheritance relationship coming from the same source, but we still have old assumptions scattered around the xsbt-dependency implementation. ### what we see without the fix ``` [info] Compiling 1 Scala source to ... .... [debug] [inv] internalDependencies: [debug] [inv] DependencyByInheritance Relation [ [debug] [inv] xx.B -> gg.table.A [debug] [inv] xx.Foo -> xx.C [debug] [inv] ] [debug] [inv] DependencyByMemberRef Relation [ [debug] [inv] xx.B -> gg.table.A [debug] [inv] xx.Hello -> gg.table.A [debug] [inv] xx.Foo -> xx.C [debug] [inv] ] .... Caused by: java.lang.AbstractMethodError: xx.Foo.buildNonemptyObjects(II)V ``` First, we see that `xx.C -> xx.B DependencyByInheritance` relationship is missing. Second, the error message seen is `java.lang.AbstractMethodError` happening on `xx.Foo`. ### what this changes This change changes two if expressions that was used to filter out dependency info coming from the same source. One might wonder why it's necessary to keep the local inheritance info, if two classes involved are compiled together anyways. The answer is transitive dependencies. Here's likely what was happening: 1. `gg.table.A` was changed, 2. causing `xx.B` to invalidate. 3. However, because of the missing same-source inheritance, it did not invalidate `xx.C`. 4. This meant that neither `xx.Foo` was invalidated. 5. Calling transform method on a new `xx.Foo` causes runtime error. By tracking same-source inheritance, we will now correctly invalidate `xx.C` and `xx.Foo`. I think the assumption that's broken here is that "we don't need to track inheritance that is happening between two classes in a same source." ### Is this 2.11 only issue? No. The simple trait-trait inheritance reproduction alone will not cause problem in Scala 2.12 because of the [compile-to-interface](http://www.scala-lang.org/news/2.12.0/#traits-compile-to-interfaces) traits. However, not all traits will compile to interface. This means that if we want to take advantage of the compile-to-interface traits, we still should keep track of the same-source inheritance, but introduce some more logic to determine whether recompilation is necessary. Fixes sbt/zinc#417 --- .../src/main/scala/xsbt/Dependency.scala | 21 ++++++---- .../scala/sbt/internal/inc/Relations.scala | 40 +++++++++---------- .../trait-trait-211/build.json | 8 ++++ .../changes/A1.scala} | 2 +- .../mirtest/A.scala} | 2 +- .../trait-trait-211/mirtest/B.scala | 9 +++++ .../trait-trait-211/mirtest/Hello.scala | 8 ++++ .../mirtest/incOptions.properties | 1 + .../source-dependencies/trait-trait-211/test | 5 +++ .../trait-trait-212/changes/A1.scala | 12 ++++++ .../trait-trait-212/mirtest/A.scala | 10 +++++ .../trait-trait-212/mirtest/B.scala | 9 +++++ .../mirtest/EvaluatorSpecs.scala | 9 ----- .../trait-trait-212/mirtest/Hello.scala | 4 +- .../source-dependencies/trait-trait-212/test | 2 +- .../transitive-class/{pending => test} | 0 16 files changed, 99 insertions(+), 43 deletions(-) create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-211/build.json rename zinc/src/sbt-test/source-dependencies/{trait-trait-212/changes/SliceTransforms1.scala => trait-trait-211/changes/A1.scala} (89%) rename zinc/src/sbt-test/source-dependencies/{trait-trait-212/mirtest/SliceTransforms.scala => trait-trait-211/mirtest/A.scala} (84%) create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/B.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/Hello.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/incOptions.properties create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-211/test create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/A1.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/A.scala create mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/B.scala delete mode 100644 zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala rename zinc/src/sbt-test/source-dependencies/transitive-class/{pending => test} (100%) diff --git a/internal/compiler-bridge/src/main/scala/xsbt/Dependency.scala b/internal/compiler-bridge/src/main/scala/xsbt/Dependency.scala index 20ce91c9d6..1bad94f944 100644 --- a/internal/compiler-bridge/src/main/scala/xsbt/Dependency.scala +++ b/internal/compiler-bridge/src/main/scala/xsbt/Dependency.scala @@ -92,16 +92,21 @@ final class Dependency(val global: CallbackGlobal) extends LocateClassFile with } // Define processor reusing `processDependency` definition - val memberRef = processDependency(DependencyByMemberRef) _ - val inheritance = processDependency(DependencyByInheritance) _ - val localInheritance = processDependency(LocalDependencyByInheritance) _ + val memberRef = processDependency(DependencyByMemberRef, false) _ + val inheritance = processDependency(DependencyByInheritance, true) _ + val localInheritance = processDependency(LocalDependencyByInheritance, true) _ + + @deprecated("Use processDependency that takes allowLocal.", "1.1.0") + def processDependency(context: DependencyContext)(dep: ClassDependency): Unit = + processDependency(context, true)(dep) /* * Handles dependency on given symbol by trying to figure out if represents a term * that is coming from either source code (not necessarily compiled in this compilation * run) or from class file and calls respective callback method. */ - def processDependency(context: DependencyContext)(dep: ClassDependency): Unit = { + def processDependency(context: DependencyContext, allowLocal: Boolean)( + dep: ClassDependency): Unit = { val fromClassName = classNameAsString(dep.from) def binaryDependency(file: File, binaryClassName: String) = @@ -133,11 +138,12 @@ final class Dependency(val global: CallbackGlobal) extends LocateClassFile with case None => debuglog(Feedback.noOriginFileForExternalSymbol(dep.to)) } - } else if (onSource.file != sourceFile) { - // Dependency is internal -- but from other file / compilation unit + } else if (onSource.file != sourceFile || allowLocal) { + // We cannot ignore dependencies coming from the same source file because + // the dependency info needs to propagate. See source-dependencies/trait-trait-211. val onClassName = classNameAsString(dep.to) callback.classDependency(onClassName, fromClassName, context) - } else () // Comes from the same file, ignore + } } } @@ -227,7 +233,6 @@ final class Dependency(val global: CallbackGlobal) extends LocateClassFile with val depClass = enclOrModuleClass(dep) val dependency = ClassDependency(fromClass, depClass) if (!cache.contains(dependency) && - fromClass.associatedFile != depClass.associatedFile && !depClass.isRefinementClass) { process(dependency) cache.add(dependency) diff --git a/internal/zinc-core/src/main/scala/sbt/internal/inc/Relations.scala b/internal/zinc-core/src/main/scala/sbt/internal/inc/Relations.scala index 16318212f6..6f78eb1524 100644 --- a/internal/zinc-core/src/main/scala/sbt/internal/inc/Relations.scala +++ b/internal/zinc-core/src/main/scala/sbt/internal/inc/Relations.scala @@ -275,6 +275,7 @@ object Relations { case o: ClassDependencies => internal == o.internal && external == o.external case _ => false } + override def toString: String = s"ClassDependencies(internal = $internal, external = $external)" override def hashCode = (internal, external).hashCode } @@ -661,26 +662,23 @@ private class MRelationsNameHashing( override def hashCode = (srcProd :: libraryDep :: libraryClassName :: memberRef :: inheritance :: classes :: Nil).hashCode - override def toString = ( - """ + override def toString: String = { + val internalDepsStr = (internalDependencies.dependencies map { + case (k, vs) => k + " " + relation_s(vs) + }).mkString("\n ", "\n ", "") + val externalDepsStr = (externalDependencies.dependencies map { + case (k, vs) => k + " " + relation_s(vs) + }).mkString("\n ", "\n ", "") + s""" |Relations (with name hashing enabled): - | products: %s - | library deps: %s - | library class names: %s - | class deps: %s - | ext deps: %s - | class names: %s - | used names: %s - | product class names: %s - """.trim.stripMargin.format( - List(srcProd, - libraryDep, - libraryClassName, - internalClassDep, - externalClassDep, - classes, - names, - productClassName) map relation_s: _*) - ) - + | products: ${relation_s(srcProd)} + | library deps: ${relation_s(libraryDep)} + | library class names: ${relation_s(libraryClassName)} + | internalDependencies: $internalDepsStr + | externalDependencies: $externalDepsStr + | class names: ${relation_s(classes)} + | used names: ${relation_s(names)} + | product class names: ${relation_s(productClassName)} + """.trim.stripMargin + } } diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-211/build.json b/zinc/src/sbt-test/source-dependencies/trait-trait-211/build.json new file mode 100644 index 0000000000..e2b0035d3b --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/build.json @@ -0,0 +1,8 @@ +{ + "projects": [ + { + "name": "mirtest", + "scalaVersion": "2.11.8" + } + ] +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-211/changes/A1.scala similarity index 89% rename from zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala rename to zinc/src/sbt-test/source-dependencies/trait-trait-211/changes/A1.scala index 8004d156a8..a68e162077 100644 --- a/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/SliceTransforms1.scala +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/changes/A1.scala @@ -1,7 +1,7 @@ package gg package table -trait SliceTransforms { +trait A { def transform: Unit = { // the use site is updated buildNonemptyObjects(0, 1) diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/A.scala similarity index 84% rename from zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala rename to zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/A.scala index fb8c4c462d..5414fa1748 100644 --- a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/SliceTransforms.scala +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/A.scala @@ -1,7 +1,7 @@ package gg package table -trait SliceTransforms { +trait A { def transform: Unit = { buildNonemptyObjects(0) } diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/B.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/B.scala new file mode 100644 index 0000000000..3378a548af --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/B.scala @@ -0,0 +1,9 @@ +package xx + +import gg.table._ + +trait C extends B { +} + +trait B extends A { +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/Hello.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/Hello.scala new file mode 100644 index 0000000000..c416916e23 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/Hello.scala @@ -0,0 +1,8 @@ +package xx + +object Hello extends App { + val consumer = new Foo + consumer.transform +} + +class Foo extends C diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/incOptions.properties b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/incOptions.properties new file mode 100644 index 0000000000..adfc92c361 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/mirtest/incOptions.properties @@ -0,0 +1 @@ +relationsDebug = true diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-211/test b/zinc/src/sbt-test/source-dependencies/trait-trait-211/test new file mode 100644 index 0000000000..fe0b9a28b2 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-211/test @@ -0,0 +1,5 @@ +> mirtest/run + +## After copying the Good implementation, we should be able to run successfully. +$ copy-file changes/A1.scala mirtest/A.scala +> mirtest/run diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/A1.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/A1.scala new file mode 100644 index 0000000000..a68e162077 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/changes/A1.scala @@ -0,0 +1,12 @@ +package gg +package table + +trait A { + def transform: Unit = { + // the use site is updated + buildNonemptyObjects(0, 1) + } + + // add extra parameter here + def buildNonemptyObjects(a: Int, b: Int): Unit = () +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/A.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/A.scala new file mode 100644 index 0000000000..5414fa1748 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/A.scala @@ -0,0 +1,10 @@ +package gg +package table + +trait A { + def transform: Unit = { + buildNonemptyObjects(0) + } + + def buildNonemptyObjects(a: Int): Unit = () +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/B.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/B.scala new file mode 100644 index 0000000000..3378a548af --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/B.scala @@ -0,0 +1,9 @@ +package xx + +import gg.table._ + +trait C extends B { +} + +trait B extends A { +} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala deleted file mode 100644 index 32e7b8cf8d..0000000000 --- a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/EvaluatorSpecs.scala +++ /dev/null @@ -1,9 +0,0 @@ -package xx - -import gg.table._ - -trait EvaluatorSpecification extends EvaluatorTestSupport { -} - -trait EvaluatorTestSupport extends SliceTransforms { -} diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala index 10e1143812..c416916e23 100644 --- a/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/mirtest/Hello.scala @@ -1,8 +1,8 @@ package xx object Hello extends App { - val consumer = new StringLibSpecs + val consumer = new Foo consumer.transform } -class StringLibSpecs extends EvaluatorSpecification +class Foo extends C diff --git a/zinc/src/sbt-test/source-dependencies/trait-trait-212/test b/zinc/src/sbt-test/source-dependencies/trait-trait-212/test index d0fb2c1e75..fe0b9a28b2 100644 --- a/zinc/src/sbt-test/source-dependencies/trait-trait-212/test +++ b/zinc/src/sbt-test/source-dependencies/trait-trait-212/test @@ -1,5 +1,5 @@ > mirtest/run ## After copying the Good implementation, we should be able to run successfully. -$ copy-file changes/SliceTransforms1.scala mirtest/SliceTransforms.scala +$ copy-file changes/A1.scala mirtest/A.scala > mirtest/run diff --git a/zinc/src/sbt-test/source-dependencies/transitive-class/pending b/zinc/src/sbt-test/source-dependencies/transitive-class/test similarity index 100% rename from zinc/src/sbt-test/source-dependencies/transitive-class/pending rename to zinc/src/sbt-test/source-dependencies/transitive-class/test From 9403160bc8577dc6934e9c0de96ffeffe16ca5ab Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Thu, 12 Oct 2017 12:59:42 -0400 Subject: [PATCH 5/5] source-dependencies / patMat-scope workaround `source-dependencies / patMat-scope` passes locally for me. The invalidation on the CI is likely caused by: ``` [debug] Recompiling all 3 sources: invalidated sources (2) exceeded 50.0% of all sources ``` This attempts to workaround that by adding more source. This does not affect the fidelity of the original test. --- .../patMat-scope/src/main/scala/foo/Bar.scala | 6 ++++++ .../patMat-scope/src/main/scala/foo/Foo.scala | 6 ++++++ 2 files changed, 12 insertions(+) create mode 100644 zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Bar.scala create mode 100644 zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Foo.scala diff --git a/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Bar.scala b/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Bar.scala new file mode 100644 index 0000000000..5553bbb07e --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Bar.scala @@ -0,0 +1,6 @@ +package foo + +// This class is used to pad the number of source code. +class Bar { + def bar: Unit = ??? +} diff --git a/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Foo.scala b/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Foo.scala new file mode 100644 index 0000000000..0941e4e3f4 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/patMat-scope/src/main/scala/foo/Foo.scala @@ -0,0 +1,6 @@ +package foo + +// This class is used to pad the number of source code. +class Foo { + def foo: Unit = ??? +}