From 6d1484dbed24e711b1fc5d870f7d30d5db677a49 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 13 Jan 2015 21:26:44 +0100 Subject: [PATCH] Better diagnostics in injector generator --- .../kotlin/generators/di/Dependencies.java | 25 +++++++++++++------ .../di/InstantiationFailedException.java | 23 +++++++++++++++++ 2 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 generators/injector-generator/src/org/jetbrains/kotlin/generators/di/InstantiationFailedException.java diff --git a/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/Dependencies.java b/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/Dependencies.java index d2a9fcb5a30..e2f77f6c5e3 100644 --- a/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/Dependencies.java +++ b/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/Dependencies.java @@ -158,14 +158,25 @@ public class Dependencies { // Find arguments ConstructorCall dependency = new ConstructorCall(publicConstructor); Type[] parameterTypes = publicConstructor.getGenericParameterTypes(); - for (Type parameterType : parameterTypes) { - Field fieldForParameter = findDependencyOfType( - DiType.fromReflectionType(parameterType), - "constructor: " + publicConstructor + ", parameter: " + parameterType, - neededFor.prepend(field) + try { + for (Type parameterType : parameterTypes) { + Field fieldForParameter = findDependencyOfType( + DiType.fromReflectionType(parameterType), + "constructor: " + publicConstructor + ", parameter: " + parameterType, + neededFor.prepend(field) + ); + used.add(fieldForParameter); + dependency.getConstructorArguments().add(fieldForParameter); + } + } + catch (InstantiationFailedException e) { + throw e; + } + catch (RuntimeException e) { + throw new InstantiationFailedException( + "Could not instantiate '" + field + "' by calling " + publicConstructor + "\nneeded for " + neededFor, + e ); - used.add(fieldForParameter); - dependency.getConstructorArguments().add(fieldForParameter); } field.setInitialization(dependency); diff --git a/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/InstantiationFailedException.java b/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/InstantiationFailedException.java new file mode 100644 index 00000000000..2481b91a4ad --- /dev/null +++ b/generators/injector-generator/src/org/jetbrains/kotlin/generators/di/InstantiationFailedException.java @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.generators.di; + +public class InstantiationFailedException extends RuntimeException { + public InstantiationFailedException(String message, Throwable cause) { + super(message, cause); + } +}