mirror of https://github.com/sbt/sbt.git
Merge pull request #2432 from gkossakowski/nameHashing-pkg-objects
Invalidate package objects transitively in name hashing
This commit is contained in:
commit
a58eff8f5a
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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: _*)
|
||||
)
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
package demo
|
||||
package demo.sub
|
||||
|
||||
object B {
|
||||
3.y
|
||||
}
|
||||
class B extends A
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package demo
|
||||
|
||||
object D {
|
||||
3.y
|
||||
}
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
package object demo extends sub.A {
|
||||
package object demo extends sub.B {
|
||||
val y = 9
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue