@@ -47,12 +47,10 @@ trait ScalaClassLoader extends JClassLoader {
47
47
def create (path : String ): AnyRef =
48
48
tryToInitializeClass[AnyRef ](path).map(_.newInstance()).orNull
49
49
50
- /** Create an instance with ctor args, or invoke errorFn before throwing FatalError . */
50
+ /** Create an instance with ctor args, or invoke errorFn before throwing. */
51
51
def create [T <: AnyRef : ClassTag ](path : String , errorFn : String => Unit )(args : AnyRef * ): T = {
52
- def fail (msg : String ) = {
53
- errorFn(msg)
54
- throw FatalError (msg)
55
- }
52
+ def fail (msg : String ) = error(msg, new IllegalArgumentException (msg))
53
+ def error (msg : String , e : Throwable ) = { errorFn(msg) ; throw e }
56
54
try {
57
55
val clazz = Class .forName(path, /* initialize =*/ true , /* loader =*/ this )
58
56
if (classTag[T ].runtimeClass isAssignableFrom clazz) {
@@ -69,10 +67,10 @@ trait ScalaClassLoader extends JClassLoader {
69
67
fail(s " Not a ${classTag[T ]}: ${path}" )
70
68
}
71
69
} catch {
72
- case _ : ClassNotFoundException =>
73
- fail (s " Class not found: ${path}" )
70
+ case e : ClassNotFoundException =>
71
+ error (s " Class not found: ${path}" , e )
74
72
case e @ (_ : LinkageError | _ : ReflectiveOperationException ) =>
75
- fail (s " Unable to create instance: ${path}: ${e.toString}" )
73
+ error (s " Unable to create instance: ${path}: ${e.toString}" , e )
76
74
}
77
75
}
78
76
0 commit comments