From 1489879b80c1b1af9832936a410d5264f038d168 Mon Sep 17 00:00:00 2001 From: Ethan Atkins Date: Thu, 7 Feb 2019 17:03:41 -0800 Subject: [PATCH] Fix equals for FileCacheEntry The equals method didn't work exactly the way I thought. By delegating to the equivStamp object in sbt we can be more confident that it is actually comparing the stamp values and not object references or some other equals implementation. --- .../src/main/scala/sbt/internal/FileCacheEntry.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/main-command/src/main/scala/sbt/internal/FileCacheEntry.scala b/main-command/src/main/scala/sbt/internal/FileCacheEntry.scala index 417f49136..f7c0e71a4 100644 --- a/main-command/src/main/scala/sbt/internal/FileCacheEntry.scala +++ b/main-command/src/main/scala/sbt/internal/FileCacheEntry.scala @@ -36,6 +36,9 @@ object FileCacheEntry { } } + private implicit class Equiv(val xstamp: XStamp) extends AnyVal { + def equiv(that: XStamp): Boolean = Stamp.equivStamp.equiv(xstamp, that) + } private case class DelegateFileCacheEntry(private val stamp: XStamp) extends FileCacheEntry with XStamp { @@ -52,9 +55,9 @@ object FileCacheEntry { case _ => None } override def equals(o: Any): Boolean = o match { - case that: DelegateFileCacheEntry => this.stamp == that.stamp - case that: XStamp => this.stamp == that - case _ => false + case DelegateFileCacheEntry(thatStamp) => this.stamp equiv thatStamp + case xStamp: XStamp => this.stamp equiv xStamp + case _ => false } override def hashCode: Int = stamp.hashCode override def toString: String = s"FileCacheEntry(hash = $hash, lastModified = $lastModified)"