diff options
author | Paul Phillips <paulp@improving.org> | 2011-09-29 16:41:42 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-09-29 16:41:42 +0000 |
commit | 1c4765a4169c653df8501f904f047cb581578085 (patch) | |
tree | 8c11175fee59c00dd5036445396d4ebb3f32d34b /src | |
parent | f9aa83a6e5086774e904638d183726edfe324a00 (diff) | |
download | scala-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/reflect/runtime/JavaToScala.scala | 14 |
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 = |