From 0f447c201e800c4c5e9a20aba37ff6162a2fa4f1 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Wed, 5 Oct 2011 18:09:27 -0400 Subject: [PATCH] directly read compiler.properties so that Scala classes don't need to be loaded when no work needs to be done. --- util/classpath/ScalaInstance.scala | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/util/classpath/ScalaInstance.scala b/util/classpath/ScalaInstance.scala index a112ebcd2..de6cabc24 100644 --- a/util/classpath/ScalaInstance.scala +++ b/util/classpath/ScalaInstance.scala @@ -58,11 +58,24 @@ object ScalaInstance /** Gets the version of Scala in the compiler.properties file from the loader.*/ private def actualVersion(scalaLoader: ClassLoader)(label: String) = + try fastActualVersion(scalaLoader) + catch { case e: Exception => slowActualVersion(scalaLoader)(label) } + private def slowActualVersion(scalaLoader: ClassLoader)(label: String) = { val v = try { Class.forName("scala.tools.nsc.Properties", true, scalaLoader).getMethod("versionString").invoke(null).toString } catch { case cause: Exception => throw new InvalidScalaInstance("Scala instance doesn't exist or is invalid: " + label, cause) } if(v.startsWith(VersionPrefix)) v.substring(VersionPrefix.length) else v } + private def fastActualVersion(scalaLoader: ClassLoader): String = + { + val stream = scalaLoader.getResourceAsStream("compiler.properties") + try { + val props = new java.util.Properties + props.load(stream) + props.getProperty("version.number") + } + finally stream.close() + } import java.net.{URL, URLClassLoader} private def scalaLoader(launcher: xsbti.Launcher, jars: Seq[File]): ClassLoader =