diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2017-02-09 02:29:44 +0000 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2017-02-09 21:44:23 -0500 |
commit | bee13ba7a4458482ce00a5c6bae4cd64328c4e5e (patch) | |
tree | 3eac3a3dee9fe2645673a7df09915d2f77f0b781 /stage1/Stage1Lib.scala | |
parent | 00157c927255a9c885287a7e16670561e8e6391e (diff) | |
download | cbt-bee13ba7a4458482ce00a5c6bae4cd64328c4e5e.tar.gz cbt-bee13ba7a4458482ce00a5c6bae4cd64328c4e5e.tar.bz2 cbt-bee13ba7a4458482ce00a5c6bae4cd64328c4e5e.zip |
memoize task results across classes within a single run
Diffstat (limited to 'stage1/Stage1Lib.scala')
-rw-r--r-- | stage1/Stage1Lib.scala | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/stage1/Stage1Lib.scala b/stage1/Stage1Lib.scala index 296581c..f0bb588 100644 --- a/stage1/Stage1Lib.scala +++ b/stage1/Stage1Lib.scala @@ -200,8 +200,9 @@ class Stage1Lib( val logger: Logger ) extends BaseLib{ classLoaderCache: ClassLoaderCache, zincVersion: String, scalaVersion: String + )( + implicit transientCache: java.util.Map[AnyRef, AnyRef] ): Option[File] = { - val classpath = Dependencies(dependencies).classpath val cp = classpath.string if(classpath.files.isEmpty) @@ -447,4 +448,26 @@ class Stage1Lib( val logger: Logger ) extends BaseLib{ else cache.cache.get( a.classpath.string, cl ).asInstanceOf[ClassLoader] } + +} + +import scala.reflect._ +import scala.language.existentials +case class PerClassCache(cache: java.util.Map[AnyRef,AnyRef], moduleKey: String)(implicit logger: Logger){ + def apply[D <: Dependency: ClassTag](key: AnyRef): MethodCache[D] = new MethodCache[D](key) + case class MethodCache[D <: Dependency: ClassTag](key: AnyRef){ + def memoize[T <: AnyRef](task: => T): T = { + val fullKey = (classTag[D].runtimeClass, moduleKey, key) + logger.transientCache("fetching key"+fullKey) + if( cache.containsKey(fullKey) ){ + logger.transientCache("found key"+fullKey) + cache.get(fullKey).asInstanceOf[T] + } else{ + val value = task + logger.transientCache("put key"+fullKey) + cache.put( fullKey, value ) + value + } + } + } } |