private Collection<ClassMap> checkForSuperTypeMapping(Class<?> srcClass, Class<?> destClass) {
Object cacheKey = CacheKeyFactory.createKey(destClass, srcClass);
Collection<ClassMap> cachedResult = (Collection<ClassMap>) superTypeCache.get(cacheKey);
if (cachedResult != null) {
return cachedResult;
}
List<ClassMap> superClasses = new ArrayList<ClassMap>();
List<Class<?>> superSrcClasses = MappingUtils.getSuperClassesAndInterfaces(srcClass);
List<Class<?>> superDestClasses = MappingUtils.getSuperClassesAndInterfaces(destClass);
superSrcClasses.add(0, srcClass);
superDestClasses.add(0, destClass);
for (Class<?> superSrcClass : superSrcClasses) {
for (Class<?> superDestClass : superDestClasses) {
if (!(superSrcClass.equals(srcClass) && superDestClass.equals(destClass))) {
checkForClassMapping(superSrcClass, superClasses, superDestClass);
}
}
}
Collections.reverse(superClasses);
superTypeCache.put(cacheKey, superClasses);
return superClasses;
}