aboutsummaryrefslogtreecommitdiff
path: root/stage1/ClassLoaderCache.scala
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2016-03-11 22:36:31 -0500
committerChristopher Vogt <oss.nsp@cvogt.org>2016-03-11 22:36:31 -0500
commit984a5f1f0f27d191695feeb3410968f2f35f8fc8 (patch)
tree56fd09257ebf8ff020fbb6a86c1ca529fa548da7 /stage1/ClassLoaderCache.scala
parentb408b441569dc165f4d41b048ff64253695a491d (diff)
downloadcbt-984a5f1f0f27d191695feeb3410968f2f35f8fc8.tar.gz
cbt-984a5f1f0f27d191695feeb3410968f2f35f8fc8.tar.bz2
cbt-984a5f1f0f27d191695feeb3410968f2f35f8fc8.zip
Split ClassLoader classes into separate files and a few fixes
Diffstat (limited to 'stage1/ClassLoaderCache.scala')
-rw-r--r--stage1/ClassLoaderCache.scala25
1 files changed, 25 insertions, 0 deletions
diff --git a/stage1/ClassLoaderCache.scala b/stage1/ClassLoaderCache.scala
new file mode 100644
index 0000000..ec343f4
--- /dev/null
+++ b/stage1/ClassLoaderCache.scala
@@ -0,0 +1,25 @@
+package cbt
+
+import java.net._
+
+object ClassLoaderCache{
+ private val cache = NailgunLauncher.classLoaderCache
+ def get( classpath: ClassPath )(implicit logger: Logger): ClassLoader
+ = cache.synchronized{
+ val lib = new Stage1Lib(logger)
+ val key = classpath.strings.sorted.mkString(":")
+ if( cache.containsKey(key) ){
+ logger.resolver("CACHE HIT: "++key)
+ cache.get(key)
+ } else {
+ logger.resolver("CACHE MISS: "++key)
+ val cl = new cbt.URLClassLoader( classpath, ClassLoader.getSystemClassLoader )
+ cache.put( key, cl )
+ cl
+ }
+ }
+ def remove( classpath: ClassPath ) = {
+ val key = classpath.strings.sorted.mkString(":")
+ cache.remove( key )
+ }
+}