diff options
Diffstat (limited to 'container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala')
-rw-r--r-- | container-di/src/main/scala/com/yahoo/container/di/componentgraph/core/ComponentNode.scala | 13 |
1 files changed, 9 insertions, 4 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 ) |