From 882ab1e4e8b36c1cc2b2cf03366ba115e392d22b Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Wed, 18 Apr 2012 03:15:14 -0400 Subject: [PATCH] Revert "Fix cavalier approach to reflection." (ClassNotFoundException) This reverts commit 1537a9d6b1458b182393c3d14e9dbc3b3500b986. --- compile/JavaCompiler.scala | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/compile/JavaCompiler.scala b/compile/JavaCompiler.scala index 3bd3eaeb4..7edd7ab24 100644 --- a/compile/JavaCompiler.scala +++ b/compile/JavaCompiler.scala @@ -23,27 +23,17 @@ object JavaCompiler { type Fork = (JavacContract, Seq[String], Logger) => Int - private def pwClass = classOf[PrintWriter] - private def arrayStringClass = classOf[Array[String]] - private def docletsClass = "com.sun.tools.doclets.standard.Standard" - - // The real performance gain comes if you can skip the indirection. - /* val javac = new JavacContract("javac", "com.sun.tools.javac.Main") { - def exec(args: Array[String], writer: PrintWriter): Int = - com.sun.tools.javac.Main.compile(args, writer) - } */ - val javac = new JavacContract("javac", "com.sun.tools.javac.Main") { - private val execMethod = Class.forName(clazz).getDeclaredMethod("compile", arrayStringClass, pwClass) - def exec(args: Array[String], writer: PrintWriter) = { - execMethod.invoke(null, args, writer).asInstanceOf[java.lang.Integer].intValue + def exec(args: Array[String], writer: PrintWriter) = { + val m = Class.forName(clazz).getDeclaredMethod("compile", classOf[Array[String]], classOf[PrintWriter]) + m.invoke(null, args, writer).asInstanceOf[java.lang.Integer].intValue } } val javadoc = new JavacContract("javadoc", "com.sun.tools.javadoc.Main") { - private val execMethod = Class.forName(clazz).getDeclaredMethod("execute", classOf[String], pwClass, pwClass, pwClass, classOf[String], arrayStringClass) - - def exec(args: Array[String], writer: PrintWriter) = - execMethod.invoke(null, name, writer, writer, writer, docletsClass, args).asInstanceOf[java.lang.Integer].intValue + def exec(args: Array[String], writer: PrintWriter) = { + val m = Class.forName(clazz).getDeclaredMethod("execute", classOf[String], classOf[PrintWriter], classOf[PrintWriter], classOf[PrintWriter], classOf[String], classOf[Array[String]]) + m.invoke(null, name, writer, writer, writer, "com.sun.tools.doclets.standard.Standard", args).asInstanceOf[java.lang.Integer].intValue + } } def construct(f: Fork, cp: ClasspathOptions, scalaInstance: ScalaInstance): JavaCompiler =