From 2bfe0e797c2b9c57277475c9296e36cbf868b7db Mon Sep 17 00:00:00 2001 From: Som Snytt Date: Fri, 18 Oct 2013 11:12:42 -0700 Subject: SI-6026 REPL checks for javap before tools.jar If javap is already available, don't go hunting for tools.jar This avoids the getResource bug in AbstractFileClassLoader. --- .../scala/tools/nsc/interpreter/ILoop.scala | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/compiler/scala/tools/nsc/interpreter/ILoop.scala b/src/compiler/scala/tools/nsc/interpreter/ILoop.scala index 6aef72a3b8..ee45dc558a 100644 --- a/src/compiler/scala/tools/nsc/interpreter/ILoop.scala +++ b/src/compiler/scala/tools/nsc/interpreter/ILoop.scala @@ -394,20 +394,24 @@ class ILoop(in0: Option[BufferedReader], protected val out: JPrintWriter) (install map (_.parent) flatMap jarAt) orElse (jdkDir flatMap deeply) } - private def addToolsJarToLoader() = { - val cl = platformTools match { - case Some(tools) => ScalaClassLoader.fromURLs(Seq(tools.toURL), intp.classLoader) - case _ => intp.classLoader - } - if (Javap.isAvailable(cl)) { - repldbg(":javap available.") - cl - } - else { - repldbg(":javap unavailable: no tools.jar at " + jdkHome) + private def addToolsJarToLoader() = ( + if (Javap isAvailable intp.classLoader) { + repldbg(":javap available on interpreter class path.") intp.classLoader + } else { + val cl = platformTools match { + case Some(tools) => ScalaClassLoader.fromURLs(Seq(tools.toURL), intp.classLoader) + case _ => intp.classLoader + } + if (Javap isAvailable cl) { + repldbg(":javap available on extended class path.") + cl + } else { + repldbg(s":javap unavailable: no tools.jar at $jdkHome") + intp.classLoader + } } - } + ) protected def newJavap() = new JavapClass(addToolsJarToLoader(), new IMain.ReplStrippingWriter(intp)) { override def tryClass(path: String): Array[Byte] = { -- cgit v1.2.3