@SuppressWarnings("unchecked")
private <T> Map<NameKey, ProviderInfo<T>> addToPostMatching(
Map<NameKey, ProviderInfo<T>> map, Object provider, int priority, boolean asc) {
Map<NameKey, ProviderInfo<T>> newMap = new LinkedHashMap<NameKey, ProviderInfo<T>>();
Iterator<Map.Entry<NameKey, ProviderInfo<T>>> it = map.entrySet().iterator();
if (it.hasNext()) {
boolean added = false;
while (it.hasNext()) {
Map.Entry<NameKey, ProviderInfo<T>> entry = it.next();
int providerPriority = entry.getKey().getPriority();
if (!added && asc && (priority < providerPriority || !it.hasNext())) {
addNewProvider(newMap, entry, provider, priority, providerPriority >= priority);
added = true;
} else if (!added && !asc && (priority > providerPriority || !it.hasNext())) {
addNewProvider(newMap, entry, provider, priority, priority > providerPriority);
added = true;
} else {
newMap.put(entry.getKey(), entry.getValue());
}
}
} else {
newMap.put(new NameKey(nameBinding, priority), (ProviderInfo<T>)newProvider(provider));
}
return newMap;
}