public void update(UsingItem[] oldUsingItems, List<UsingItem> newUsingItemsList, Summarizer summarizer, DataConsNameComparator dataconsComparator, ModuleTypeInfo importedModuleTypeInfo){
if(preserveItems) {
for (final UsingItem oldUsingItem : oldUsingItems) {
Comparator<String> comparator = (oldUsingItem instanceof UsingItem.DataConstructor) ? dataconsComparator : null;
UsingItem newItem = calculateFactoredUsingItem(summarizer, oldUsingItem.getUsingItemCategoryName(), oldUsingItem.getUsingNames(), comparator);
if(newItem != null) {
newUsingItemsList.add(newItem);
}
}
} else {
String[] emptyStingArray = new String[0];
List<String> functionNames = new ArrayList<String>();
List<String> dataConsNames = new ArrayList<String>();
List<String> typeConsNames = new ArrayList<String>();
List<String> typeClassNames = new ArrayList<String>();
Map<String, List<String>> groups = new HashMap<String, List<String>>();
groups.put(UsingItem.Function.CATEGORY_NAME, functionNames);
groups.put(UsingItem.DataConstructor.CATEGORY_NAME, dataConsNames);
groups.put(UsingItem.TypeConstructor.CATEGORY_NAME, typeConsNames);
groups.put(UsingItem.TypeClass.CATEGORY_NAME, typeClassNames);
for (final UsingItem oldUsingItem : oldUsingItems) {
List<String> groupNames = groups.get(oldUsingItem.getUsingItemCategoryName());
groupNames.addAll(Arrays.asList(oldUsingItem.getUsingNames()));
}
UsingItem typeClassUsingItem = calculateFactoredUsingItem(summarizer, UsingItem.TypeClass.CATEGORY_NAME, typeClassNames.toArray(emptyStingArray), null);
if(typeClassUsingItem != null) {
newUsingItemsList.add(typeClassUsingItem);
}
UsingItem typeConsUsingItem = calculateFactoredUsingItem(summarizer, UsingItem.TypeConstructor.CATEGORY_NAME, typeConsNames.toArray(emptyStingArray), null);
if(typeConsUsingItem != null) {
newUsingItemsList.add(typeConsUsingItem);
}
UsingItem dataConsUsingItem = calculateFactoredUsingItem(summarizer, UsingItem.DataConstructor.CATEGORY_NAME, dataConsNames.toArray(emptyStingArray), dataconsComparator);
if(dataConsUsingItem != null) {
newUsingItemsList.add(dataConsUsingItem);
}
UsingItem functionUsingItem = calculateFactoredUsingItem(summarizer, UsingItem.Function.CATEGORY_NAME, functionNames.toArray(emptyStingArray), null);
if(functionUsingItem != null) {
newUsingItemsList.add(functionUsingItem);
}
}
}