diff options
Diffstat (limited to 'container-di/src')
-rw-r--r-- | container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala | 13 | ||||
-rw-r--r-- | container-di/src/main/scala/com/yahoo/container/di/package.scala | 2 |
2 files changed, 10 insertions, 5 deletions
diff --git a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala index 61f3c7a049c..16856930e54 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala @@ -99,14 +99,19 @@ class ComponentNode(componentId: ComponentId, constructor.newInstance(actualArguments: _*) } catch { case e: InvocationTargetException => - throw removeStackTrace(new RuntimeException(s"An exception occurred while constructing $idAndType", - cutStackTraceAtConstructor(e.getCause))) - + throw removeStackTrace(constructThrowable(cutStackTraceAtConstructor(e.getCause), s"Error constructing $idAndType")) } initId(instance) } - + + private def constructThrowable(cause: Throwable, message: String) : Throwable = { + if (cause != null && cause.isInstanceOf[Error]) // don't convert Errors to RuntimeExceptions + new Error(message, cause) + else + new RuntimeException(message, cause) + } + private def initId(component: AnyRef) = { def checkAndSetId(c: AbstractComponent) { if (c.hasInitializedId && c.getId != componentId ) diff --git a/container-di/src/main/scala/com/yahoo/container/di/package.scala b/container-di/src/main/scala/com/yahoo/container/di/package.scala index f1e2a35797e..ec621af3830 100644 --- a/container-di/src/main/scala/com/yahoo/container/di/package.scala +++ b/container-di/src/main/scala/com/yahoo/container/di/package.scala @@ -28,7 +28,7 @@ package object di { clazz.asInstanceOf[Class[SUPER]] } - def removeStackTrace(exception: RuntimeException): RuntimeException = { + def removeStackTrace(exception: Throwable): Throwable = { if (preserveStackTrace) exception else { exception.setStackTrace(Array()) |