private Object mergeImplementations(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);
  }
private Object mergeImplementations(final Class returnType, final List<Object> implementations)