diff options
author | Josh Suereth <joshua.suereth@gmail.com> | 2012-06-13 19:55:57 -0400 |
---|---|---|
committer | Josh Suereth <joshua.suereth@gmail.com> | 2012-06-13 19:55:57 -0400 |
commit | 456799bf08d27e1572a479c6b8d09a7d2d2445a0 (patch) | |
tree | 17772f4598750b52639085aeb6f2ceb500af0833 /project/ScalaToolRunner.scala | |
parent | ed1b1b1d4544d4c2dba088e923c362151dd9eed2 (diff) | |
download | scala-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.scala | 21 |
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) +} |