List<M> (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; }