avoid quadratic time when processing committed changes (IDEA-170991 Repository/Incoming changes refresh takes long time)

This commit is contained in:
peter
2017-04-05 13:51:13 +02:00
parent dcd5141d30
commit d2bec707d8
@@ -20,6 +20,7 @@ import com.intellij.openapi.vcs.RepositoryLocation;
import com.intellij.openapi.vcs.changes.Change;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.util.containers.MultiMap;
import gnu.trove.THashSet;
import java.util.ArrayList;
import java.util.Collection;
@@ -68,12 +69,13 @@ public abstract class VcsCommittedListsZipperAdapter implements VcsCommittedList
return lists.get(0);
}
final CommittedChangeList result = lists.get(0);
Set<Change> processed = new THashSet<>(result.getChanges());
for (int i = 1; i < lists.size(); i++) {
final CommittedChangeList list = lists.get(i);
for (Change change : list.getChanges()) {
final Collection<Change> resultChanges = result.getChanges();
if (! resultChanges.contains(change)) {
resultChanges.add(change);
for (Change change : lists.get(i).getChanges()) {
if (!processed.add(change)) {
result.getChanges().add(change);
}
}
}