diff options
author | Som Snytt <som.snytt@gmail.com> | 2015-07-02 12:22:33 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2015-07-02 12:22:33 -0700 |
commit | 421955c6d7d6fb4eb11f6b30f9f95adb1470fc23 (patch) | |
tree | dee9adacf298199ae499e311780f382045abeabf /src/reflect/scala/reflect/internal/util | |
parent | 7a076931491ee2467e76f480386ea05e319ec3a2 (diff) | |
download | scala-421955c6d7d6fb4eb11f6b30f9f95adb1470fc23.tar.gz scala-421955c6d7d6fb4eb11f6b30f9f95adb1470fc23.tar.bz2 scala-421955c6d7d6fb4eb11f6b30f9f95adb1470fc23.zip |
SI-9350 Preserve exceptions
On error, rethrow the exception or `IllegalArgumentException`.
Diffstat (limited to 'src/reflect/scala/reflect/internal/util')
-rw-r--r-- | src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala b/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala index 04bc2dd7e8..296934e253 100644 --- a/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala +++ b/src/reflect/scala/reflect/internal/util/ScalaClassLoader.scala @@ -47,12 +47,10 @@ trait ScalaClassLoader extends JClassLoader { def create(path: String): AnyRef = tryToInitializeClass[AnyRef](path).map(_.newInstance()).orNull - /** Create an instance with ctor args, or invoke errorFn before throwing FatalError. */ + /** Create an instance with ctor args, or invoke errorFn before throwing. */ def create[T <: AnyRef : ClassTag](path: String, errorFn: String => Unit)(args: AnyRef*): T = { - def fail(msg: String) = { - errorFn(msg) - throw FatalError(msg) - } + def fail(msg: String) = error(msg, new IllegalArgumentException(msg)) + def error(msg: String, e: Throwable) = { errorFn(msg) ; throw e } try { val clazz = Class.forName(path, /*initialize =*/ true, /*loader =*/ this) if (classTag[T].runtimeClass isAssignableFrom clazz) { @@ -69,10 +67,10 @@ trait ScalaClassLoader extends JClassLoader { fail(s"Not a ${classTag[T]}: ${path}") } } catch { - case _: ClassNotFoundException => - fail(s"Class not found: ${path}") + case e: ClassNotFoundException => + error(s"Class not found: ${path}", e) case e @ (_: LinkageError | _: ReflectiveOperationException) => - fail(s"Unable to create instance: ${path}: ${e.toString}") + error(s"Unable to create instance: ${path}: ${e.toString}", e) } } |