fix: Fix incremental test with companion objects [merge-skip]

**Problem**
Incremental test (aka testQuick) has a bug when companion objects
depends on others since at some point it's failing to look up relationship from Zinc analysis.

**Solution**
This fixes the lookup.
This commit is contained in:
Eugene Yokota 2025-03-31 22:22:27 -04:00
parent baa9a919ba
commit 1415b2efa4
1 changed files with 20 additions and 12 deletions

View File

@ -1485,26 +1485,34 @@ object Defaults extends BuildCommon {
if (stamps.isEmpty) Long.MinValue
else stamps.max
}
def intlStamp(c: String, analysis: Analysis, s: Set[String]): Long = {
if (s contains c) Long.MinValue
def intlStamp0(javaClassName: String, analysis: Analysis, alreadySeen: Set[String])(
className: String
): Set[Long] = {
import analysis.{ apis, relations }
relations
.internalClassDeps(className)
.map(intlStamp(_, analysis, alreadySeen + javaClassName)) ++
relations.externalDeps(className).map(stamp) ++
apis.internal.get(javaClassName).toSeq.map(_.compilationTimestamp) ++
apis.internal.get(className).toSeq.map(_.compilationTimestamp)
}
def intlStamp(javaClassName: String, analysis: Analysis, alreadySeen: Set[String]): Long =
if (alreadySeen contains javaClassName) Long.MinValue
else
stamps.getOrElse(
c, {
val x = {
import analysis.{ apis, relations => rel }
rel.internalClassDeps(c).map(intlStamp(_, analysis, s + c)) ++
rel.externalDeps(c).map(stamp) ++
rel.productClassName.reverse(c).flatMap { pc =>
apis.internal.get(pc).map(_.compilationTimestamp)
} + Long.MinValue
javaClassName, {
val x: Long = {
val classNames = analysis.relations.productClassName.reverse(javaClassName).toSeq
classNames.flatMap(intlStamp0(javaClassName, analysis, alreadySeen)) ++ Seq(
Long.MinValue
)
}.max
if (x != Long.MinValue) {
stamps(c) = x
stamps(javaClassName) = x
}
x
}
)
}
def noSuccessYet(test: String) = succeeded.get(test) match {
case None => true
case Some(ts) => stamps.synchronized(stamp(test)) > ts