Skip to content

Commit a020abf

Browse files
authored
Merge pull request #983 from retronym/ticket/690-package-object
Fix package object invalidation when ancestor has inner class (avoiding "Symbol 'type b.A' is missing from the classpath" error)
2 parents d56686b + 7eeca24 commit a020abf

File tree

6 files changed

+30
-1
lines changed

6 files changed

+30
-1
lines changed

internal/zinc-core/src/main/scala/sbt/internal/inc/IncrementalNameHashing.scala

+8-1
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,16 @@ private[inc] class IncrementalNameHashingCommon(
4444
apis: APIs
4545
): Set[String] = {
4646
val findSubclasses = relations.inheritance.internal.reverse _
47+
val invalidatedClassesAndCodefinedClasses = for {
48+
cls <- invalidatedClasses.iterator
49+
file <- relations.definesClass(cls).iterator
50+
cls1 <- relations.classNames(file)
51+
} yield cls1
52+
4753
debug("Invalidate package objects by inheritance only...")
4854
val invalidatedPackageObjects =
49-
transitiveDeps(invalidatedClasses, log)(findSubclasses).filter(_.endsWith(".package"))
55+
transitiveDeps(invalidatedClassesAndCodefinedClasses.toSet, log)(findSubclasses)
56+
.filter(_.endsWith(".package"))
5057
debug(s"Package object invalidations: ${invalidatedPackageObjects.mkString(", ")}")
5158
invalidatedPackageObjects
5259
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package b
2+
3+
class A {
4+
class Inner {
5+
O.o
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package b
2+
3+
object O {
4+
def o = ""
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package object b extends A
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package b
2+
3+
object O {
4+
def o = 42
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
> compile
2+
$ copy-file changes/O1.scala O.scala
3+
> compile
4+
> checkIterations 3

0 commit comments

Comments
 (0)