@@ -169,16 +169,12 @@ public void registerInjectables() {
169169 // filter only dependencies that are needed for the dependency tree
170170 .filter (dependency -> dependency .getProvideMethod () == null && dependency .getInstance () == null )
171171 .forEach (dependency -> {
172- Constructor <?> validConstructor = getConstructor (dependency );
173- Arrays .stream (validConstructor .getParameterTypes ())
174- .forEach (type -> {
175- dependencies .stream ()
176- .filter (dep -> type .isAssignableFrom (dep .getClazz ()))
177- .findFirst ()
178- .ifPresent (dependency ::addDependency );
179- });
180-
181-
172+ Optional <? extends Constructor <?>> validConstructor = getConstructor (dependency );
173+ validConstructor .ifPresent (constructor -> Arrays .stream (constructor .getParameterTypes ())
174+ .forEach (type -> dependencies .stream ()
175+ .filter (dep -> type .isAssignableFrom (dep .getClazz ()))
176+ .findFirst ()
177+ .ifPresent (dependency ::addDependency )));
182178
183179 Arrays .stream (dependency .getClazz ().getDeclaredFields ())
184180 .filter (field -> field .isAnnotationPresent (Inject .class ))
@@ -231,16 +227,16 @@ public void registerInjectables() {
231227 }
232228
233229 @ SuppressWarnings ("unchecked" )
234- private <T > Constructor <T > getConstructor (Dependency <T > dependency ) {
235- return ( Constructor < T >) Arrays .stream (dependency .getClazz ().getConstructors ())
230+ private <T > Optional < Constructor <T > > getConstructor (Dependency <T > dependency ) {
231+ return Arrays .stream (dependency .getClazz ().getConstructors ())
236232 .filter (constructorElement -> constructorElement .getParameterTypes ().length == 0
237233 || Arrays .stream (constructorElement .getParameterTypes ())
238234 .allMatch (element ->
239235 containsByClass (element ) || (element .isInterface () && element .isAnnotationPresent (Component .class ))
240236 )
241237 )
242- .findAny ( )
243- .orElseThrow (() -> new InjectorException ( "No constructors with valid parameters found for " + dependency . getClazz (). getName ()) );
238+ .map ( constructor -> ( Constructor < T >) constructor )
239+ .findAny ( );
244240 }
245241
246242 private void initializeDependency (Dependency <?> dependency , List <Dependency <?>> sortedDependencies ) {
@@ -345,7 +341,8 @@ public void clearInjectables() {
345341 }
346342
347343 private <T > T instantiate (Dependency <T > dependency ) {
348- Constructor <T > constructor = getConstructor (dependency );
344+ Constructor <T > constructor = getConstructor (dependency )
345+ .orElseThrow (() -> new InjectorException ("Could not find valid constructor for " + dependency .getClazz ()));
349346
350347 try {
351348 if (constructor .getParameterCount () == 0 ) {
0 commit comments