public List<M> getIntermediateMemberInfosList(C baseClass) {
    List<M> result = myTargetClassToIntermediateMemberInfosMap.get(baseClass);

    if (result == null) {
      Set<M> list = getIntermediateClassesMemberInfosList(baseClass, new HashSet<>());
      result = Collections.unmodifiableList(new ArrayList<>(list));
      myTargetClassToIntermediateMemberInfosMap.put(baseClass, result);
    }

    return result;
  }
public List<M> getIntermediateMemberInfosList(C baseClass)