Merge pull request #2432 from gkossakowski/nameHashing-pkg-objects

Invalidate package objects transitively in name hashing
This commit is contained in:
Martin Duhem 2016-02-03 14:28:30 +01:00
commit a58eff8f5a
6 changed files with 30 additions and 22 deletions

View File

@ -18,7 +18,9 @@ private final class IncrementalNameHashing(log: Logger, options: IncOptions) ext
// Package objects are fragile: if they inherit from an invalidated source, get "class file needed by package is missing" error
// This might be too conservative: we probably only need package objects for packages of invalidated sources.
override protected def invalidatedPackageObjects(invalidated: Set[File], relations: Relations): Set[File] =
invalidated flatMap relations.inheritance.internal.reverse filter { _.getName == "package.scala" }
transitiveDeps(invalidated)(relations.inheritance.internal.reverse).filter {
_.getName == "package.scala"
}
override protected def sameAPI[T](src: T, a: Source, b: Source): Option[APIChange[T]] = {
if (SameAPI(a, b))

View File

@ -618,13 +618,14 @@ private class MRelationsDefaultImpl(srcProd: Relation[File, File], binaryDep: Re
override def toString = (
"""
|Relations:
| products: %s
| bin deps: %s
| src deps: %s
| ext deps: %s
| class names: %s
""".trim.stripMargin.format(List(srcProd, binaryDep, internalSrcDep, externalDep, classes) map relation_s: _*)
|Relations:
| products: %s
| bin deps: %s
| src deps direct: %s
| src deps inherited: %s
| ext deps: %s
| class names: %s
""".trim.stripMargin.format(List(srcProd, binaryDep, internalSrcDep, publicInherited.internal, externalDep, classes) map relation_s: _*)
)
}
@ -739,14 +740,15 @@ private class MRelationsNameHashing(srcProd: Relation[File, File], binaryDep: Re
override def toString = (
"""
|Relations (with name hashing enabled):
| products: %s
| bin deps: %s
| src deps: %s
| ext deps: %s
| class names: %s
| used names: %s
""".trim.stripMargin.format(List(srcProd, binaryDep, internalSrcDep, externalDep, classes, names) map relation_s: _*)
|Relations (with name hashing enabled):
| products: %s
| bin deps: %s
| src deps memberRef: %s
| src deps inheritance: %s
| ext deps: %s
| class names: %s
| used names: %s
""".trim.stripMargin.format(List(srcProd, binaryDep, memberRef.internal, inheritance.internal, externalDep, classes, names) map relation_s: _*)
)
}

View File

@ -1,5 +1,3 @@
package demo
package demo.sub
object B {
3.y
}
class B extends A

View File

@ -0,0 +1,5 @@
package demo
object D {
3.y
}

View File

@ -1,3 +1,3 @@
package object demo extends sub.A {
package object demo extends sub.B {
val y = 9
}

View File

@ -1,8 +1,9 @@
# Here we have a package object (demo) that extends a class in a subpackage (demo.sub.A)
# demo.sub.A provides an implicit used by demo.B
# demo.sub.A provides an implicit used by demo.D
$ copy-file changes/package.scala src/main/scala/demo/package.scala
$ copy-file changes/A1.scala src/main/scala/demo/sub/A.scala
$ copy-file changes/B.scala src/main/scala/demo/B.scala
$ copy-file changes/C.scala src/main/scala/demo/C.scala
> compile
# When recompiling A, we delete the class files for A