public static void checkConsistency( Database database, BootstrapPackage pkg, Set<BootstrapPackage> allPackages, Set<ObjectType> additionalTypes) { Set<ObjectType> allMyTypes = getAllTypes(database, pkg); Set<ObjectType> allTypes = new HashSet<ObjectType>(); for (BootstrapPackage otherPkg : allPackages) { allTypes.addAll(getAllTypes(database, otherPkg)); } Map<ObjectField, ObjectType> checkFields = new HashMap<ObjectField, ObjectType>(); for (ObjectType type : allMyTypes) { for (ObjectField field : type.getFields()) { for (ObjectType t : field.getTypes()) { if (!field.isEmbedded() && !t.isEmbedded()) { checkFields.put(field, t); } } } } if (additionalTypes != null) { for (ObjectType type : additionalTypes) { for (ObjectField field : type.getFields()) { for (ObjectType t : field.getTypes()) { if (!field.isEmbedded() && !t.isEmbedded()) { checkFields.put(field, t); } } } } } for (ObjectField field : database.getEnvironment().getFields()) { for (ObjectType t : field.getTypes()) { if (!field.isEmbedded() && !t.isEmbedded()) { checkFields.put(field, t); } } } for (Map.Entry<ObjectField, ObjectType> entry : checkFields.entrySet()) { ObjectField field = entry.getKey(); ObjectType t = entry.getValue(); if (field.getParentType() != null && field .getParentType() .as(TypeData.class) .getFollowReferencesFields() .contains(field.getInternalName())) { continue; } if (!allMyTypes.contains(t)) { if (allTypes.contains(t)) { if (!pkg.getTypesInOtherPackages().containsKey(t)) { pkg.getTypesInOtherPackages().put(t, new HashSet<BootstrapPackage>()); } for (BootstrapPackage otherPkg : allPackages) { if (getAllTypes(database, otherPkg).contains(t)) { pkg.getTypesInOtherPackages().get(t).add(otherPkg); } } } if (t.as(TypeData.class).getTypeMappableGroups().isEmpty() || t.as(TypeData.class).getTypeMappableUniqueKey() == null) { if (!pkg.getMissingTypes().containsKey(t)) { pkg.getMissingTypes().put(t, new HashSet<ObjectField>()); } pkg.getMissingTypes().get(t).add(field); } } } }