Object (final Class returnType, final List<Object> implementations) { for (int i = myMergingStrategies.size() - 1; i >= 0; i--) { if (ReflectionUtil.isAssignable(myMergingStrategyClasses.get(i), returnType)) { final Object o = myMergingStrategies.get(i).mergeChildren(returnType, implementations); if (o != null) { return o; } } } if (implementations.size() == 1) { return implementations.get(0); } return mergeModels(returnType, implementations); }