summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2011-09-29 16:41:42 +0000
committerPaul Phillips <paulp@improving.org>2011-09-29 16:41:42 +0000
commit1c4765a4169c653df8501f904f047cb581578085 (patch)
tree8c11175fee59c00dd5036445396d4ebb3f32d34b
parentf9aa83a6e5086774e904638d183726edfe324a00 (diff)
downloadscala-1c4765a4169c653df8501f904f047cb581578085.tar.gz
scala-1c4765a4169c653df8501f904f047cb581578085.tar.bz2
scala-1c4765a4169c653df8501f904f047cb581578085.zip
Reflection classloader hack.
Finding top level classes from the command line. Hackiness will diminish greatly. Review by odersky.
-rw-r--r--src/compiler/scala/reflect/runtime/JavaToScala.scala14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/reflect/runtime/JavaToScala.scala b/src/compiler/scala/reflect/runtime/JavaToScala.scala
index f1eedbcf30..18db32c3bb 100644
--- a/src/compiler/scala/reflect/runtime/JavaToScala.scala
+++ b/src/compiler/scala/reflect/runtime/JavaToScala.scala
@@ -23,6 +23,18 @@ import internal.ClassfileConstants._
import internal.pickling.UnPickler
import collection.mutable.{ HashMap, ListBuffer }
import internal.Flags._
+import scala.tools.nsc.util.ScalaClassLoader
+import scala.tools.nsc.util.ScalaClassLoader._
+
+class MultiCL(parent: ScalaClassLoader, others: ScalaClassLoader*) extends java.lang.ClassLoader(parent) {
+ override def findClass(name: String): jClass[_] = {
+ for (cl <- others) {
+ try { return cl.findClass(name) }
+ catch { case _: ClassNotFoundException => () }
+ }
+ super.findClass(name)
+ }
+}
trait JavaToScala extends ConversionUtil { self: SymbolTable =>
@@ -36,7 +48,7 @@ trait JavaToScala extends ConversionUtil { self: SymbolTable =>
* Can you check with your newly acquired classloader fu whether this implementation makes sense?
*/
def javaClass(path: String): jClass[_] =
- jClass.forName(path, false, getClass.getClassLoader)
+ jClass.forName(path, false, new MultiCL(getClass.getClassLoader, java.lang.ClassLoader.getSystemClassLoader))
/** Does `path` correspond to a Java class with that fully qualified name? */
def isJavaClass(path: String): Boolean =