summaryrefslogtreecommitdiff
path: root/project/ScalaToolRunner.scala
diff options
context:
space:
mode:
authorJosh Suereth <joshua.suereth@gmail.com>2012-06-13 19:55:57 -0400
committerJosh Suereth <joshua.suereth@gmail.com>2012-06-13 19:55:57 -0400
commit456799bf08d27e1572a479c6b8d09a7d2d2445a0 (patch)
tree17772f4598750b52639085aeb6f2ceb500af0833 /project/ScalaToolRunner.scala
parented1b1b1d4544d4c2dba088e923c362151dd9eed2 (diff)
downloadscala-456799bf08d27e1572a479c6b8d09a7d2d2445a0.tar.gz
scala-456799bf08d27e1572a479c6b8d09a7d2d2445a0.tar.bz2
scala-456799bf08d27e1572a479c6b8d09a7d2d2445a0.zip
Refactoring and temporary commit before finishing the fix.
Diffstat (limited to 'project/ScalaToolRunner.scala')
-rw-r--r--project/ScalaToolRunner.scala21
1 files changed, 21 insertions, 0 deletions
diff --git a/project/ScalaToolRunner.scala b/project/ScalaToolRunner.scala
new file mode 100644
index 0000000000..d7338a54b3
--- /dev/null
+++ b/project/ScalaToolRunner.scala
@@ -0,0 +1,21 @@
+import sbt._
+import Keys._
+
+/** Reflection helper that runs ScalaTool.
+ * TODO - When SBT is on 2.10.x try to use Dynamic + Reflection. COULD BE FUN.
+ */
+class ScalaToolRunner(classpath: Classpath) {
+ // TODO - Don't use the ant task directly...
+ lazy val classLoader = new java.net.URLClassLoader(classpath.map(_.data.toURI.toURL).toArray, null)
+ lazy val mainClass = classLoader.loadClass("scala.tools.ant.ScalaTool")
+ lazy val executeMethod = mainClass.getMethod("execute")
+ lazy val setFileMethod = mainClass.getMethod("setFile", classOf[java.io.File])
+ lazy val setClassMethod = mainClass.getMethod("setClass", classOf[String])
+ lazy val setClasspathMethod = mainClass.getMethod("setClassPath", classOf[String])
+ lazy val instance = mainClass.newInstance()
+
+ def setClass(cls: String): Unit = setClassMethod.invoke(instance, cls)
+ def setFile(file: File): Unit = setFileMethod.invoke(instance, file)
+ def setClasspath(cp: String): Unit = setClasspathMethod.invoke(instance, cp)
+ def execute(): Unit = executeMethod.invoke(instance)
+}