From f360a33a1dde8bf3f0c8a03bdb7b8b3d359eec6f Mon Sep 17 00:00:00 2001 From: Nicolas Stucki Date: Wed, 22 Nov 2023 15:55:21 +0100 Subject: [PATCH] Cache stable TASTyVersion --- tasty/src/dotty/tools/tasty/TastyVersion.scala | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tasty/src/dotty/tools/tasty/TastyVersion.scala b/tasty/src/dotty/tools/tasty/TastyVersion.scala index 0d2f1b8c76d8..8bf53c7e7135 100644 --- a/tasty/src/dotty/tools/tasty/TastyVersion.scala +++ b/tasty/src/dotty/tools/tasty/TastyVersion.scala @@ -1,6 +1,8 @@ package dotty.tools.tasty -case class TastyVersion(major: Int, minor: Int, experimental: Int) { +import scala.collection.mutable + +case class TastyVersion private(major: Int, minor: Int, experimental: Int) { def isExperimental: Boolean = experimental > 0 def nextStable: TastyVersion = copy(experimental = 0) @@ -21,4 +23,12 @@ case class TastyVersion(major: Int, minor: Int, experimental: Int) { val extra = Option.when(experimental > 0)(this) s"stable TASTy from ${min.show} to ${max.show}${extra.fold("")(e => s", or exactly ${e.show}")}" } -} \ No newline at end of file +} + +object TastyVersion { + + private val cache: mutable.Map[(Int, Int, Int), TastyVersion] = mutable.Map.empty + + def apply(major: Int, minor: Int, experimental: Int): TastyVersion = + cache.getOrElseUpdate((major, minor, experimental), new TastyVersion(major, minor, experimental)) +}