private static void intersectPropertySets(final List<TypeInfo> reducedTypeInfos) { // substract property set from type info with more than one // occurrence from type infos with the given superclass for (final TypeInfo info : reducedTypeInfos) { if (info.getHierarchyLevel() > 1) { final Set<String> supertypeKeySet = info.getPropertySet().keySet(); for (final TypeInfo subType : reducedTypeInfos) { final Set<String> subtypeKeySet = subType.getPropertySet().keySet(); // only substract property set if it is a true subtype (and not the same :)) // if ( subType.getUsages() == 1 && subType.hasSuperclass(info.getPrimaryType())) { if (subType.getHierarchyLevel() < info.getHierarchyLevel() && subType.hasSuperclass(info.getPrimaryType())) { subtypeKeySet.removeAll(supertypeKeySet); } } } } }
@Override public int compare(TypeInfo o1, TypeInfo o2) { if (reverse) { return Integer.valueOf(o1.getHierarchyLevel()).compareTo(o2.getHierarchyLevel()); } else { return Integer.valueOf(o2.getHierarchyLevel()).compareTo(o1.getHierarchyLevel()); } }