From 70c52ca512f010307078909bbdfcedffa95d61d4 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 7 Mar 2014 17:08:27 +0400 Subject: [PATCH] [log] Remove the obsolete NoGraphTableModel & simplify the code which used to use it --- .../vcs/log/data/VcsLogDataHolder.java | 32 ++---- .../intellij/vcs/log/data/VcsLogFilterer.java | 63 +++--------- .../vcs/log/ui/tables/NoGraphTableModel.java | 98 ------------------- 3 files changed, 22 insertions(+), 171 deletions(-) delete mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java index cec3b5d02e4b..1373aa81e84f 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java @@ -34,7 +34,6 @@ import com.intellij.util.containers.HashSet; import com.intellij.util.messages.Topic; import com.intellij.util.ui.UIUtil; import com.intellij.vcs.log.*; -import com.intellij.vcs.log.impl.TimedVcsCommitImpl; import com.intellij.vcs.log.util.StopWatch; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -506,8 +505,7 @@ public class VcsLogDataHolder implements Disposable { } public void getFilteredDetailsFromTheVcs(@NotNull final VcsLogFilterCollection filterCollection, - @NotNull final Consumer>> success, - final int maxCount) { + @NotNull final Consumer> success, final int maxCount) { runInBackground(new ThrowableConsumer() { @Override public void consume(ProgressIndicator indicator) throws VcsException { @@ -520,24 +518,16 @@ public class VcsLogDataHolder implements Disposable { continue; } - List details = ContainerUtil.map(entry.getValue().getCommitsMatchingFilter(root, filterCollection, maxCount), - new Function() { - @Override - public CommitWithRoot fun(TimedVcsCommit timedVcsCommit) { - return new CommitWithRoot(root, timedVcsCommit.getHash(), - timedVcsCommit.getParents(), - timedVcsCommit.getTime()); - } - }); - logs.add(details); + List matchingCommits = entry.getValue().getCommitsMatchingFilter(root, filterCollection, maxCount); + logs.add(matchingCommits); } final List compoundLog = myMultiRepoJoiner.join(logs); - final List> list = ContainerUtil.map(compoundLog, new Function>() { + final List list = ContainerUtil.map(compoundLog, new Function() { @Override - public Pair fun(TimedVcsCommit timedVcsCommit) { - return Pair.create(timedVcsCommit.getHash(), ((CommitWithRoot)timedVcsCommit).myRoot); + public Hash fun(TimedVcsCommit commit) { + return commit.getHash(); } }); @@ -551,16 +541,6 @@ public class VcsLogDataHolder implements Disposable { }, "Looking for more results..."); } - private static class CommitWithRoot extends TimedVcsCommitImpl { - - @NotNull private final VirtualFile myRoot; - - public CommitWithRoot(@NotNull VirtualFile root, @NotNull Hash hash, @NotNull List parents, long timeStamp) { - super(hash, parents, timeStamp); - myRoot = root; - } - } - @NotNull public Map getCurrentUser() { return myCurrentUser; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java index 811c235f3cbe..6e5544a3e867 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java @@ -3,9 +3,7 @@ package com.intellij.vcs.log.data; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; @@ -16,7 +14,6 @@ import com.intellij.vcs.log.ui.VcsLogUI; import com.intellij.vcs.log.ui.tables.AbstractVcsLogTableModel; import com.intellij.vcs.log.ui.tables.EmptyTableModel; import com.intellij.vcs.log.ui.tables.GraphTableModel; -import com.intellij.vcs.log.ui.tables.NoGraphTableModel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,9 +29,6 @@ public class VcsLogFilterer { @NotNull private final VcsLogDataHolder myLogDataHolder; @NotNull private final VcsLogUI myUI; - // TODO remove after new Graph supports filtering - private static final boolean USE_NEW_GRAPH_FOR_FILTERING = true; - public VcsLogFilterer(@NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUI ui) { myLogDataHolder = logDataHolder; myUI = ui; @@ -44,33 +38,13 @@ public class VcsLogFilterer { public AbstractVcsLogTableModel applyFiltersAndUpdateUi(@NotNull DataPack dataPack, @NotNull VcsLogFilterCollection filters) { List detailsFilters = filters.getDetailsFilters(); - // it is important to apply graph filters first: - // if we apply other filters first, we loose the graph and won't be able to apple graph filters in that case - // (e.g. won't be able to find out if a commit belongs to the branch selected by user). - - // hide invisible nodes from the graph applyGraphFilters(dataPack, filters.getBranchFilter()); - - // apply details filters, and use simple table without graph (we can't filter by details and keep the graph yet). - final AbstractVcsLogTableModel model; - if (USE_NEW_GRAPH_FOR_FILTERING) { - model = updateFacadeAndCreateModel(dataPack, detailsFilters); - } - else { - if (!detailsFilters.isEmpty()) { - List> filteredCommits = filterByDetails(dataPack, detailsFilters); - model = new NoGraphTableModel(dataPack, myLogDataHolder, myUI, filteredCommits, LoadMoreStage.INITIAL); - } - else { - model = new GraphTableModel(dataPack, myLogDataHolder, myUI, LoadMoreStage.INITIAL); - } - } - return model; + return applyDetailsFilter(dataPack, detailsFilters); } - private AbstractVcsLogTableModel updateFacadeAndCreateModel(DataPack dataPack, List detailsFilters) { + private AbstractVcsLogTableModel applyDetailsFilter(DataPack dataPack, List detailsFilters) { if (!detailsFilters.isEmpty()) { - List> filteredCommits = filterByDetails(dataPack, detailsFilters); + List filteredCommits = filterByDetails(dataPack, detailsFilters); if (filteredCommits.isEmpty()) { return new EmptyTableModel(dataPack, myLogDataHolder, myUI, LoadMoreStage.INITIAL); } @@ -85,11 +59,11 @@ public class VcsLogFilterer { return new GraphTableModel(dataPack, myLogDataHolder, myUI, LoadMoreStage.INITIAL); } - private Condition getFilterFromCommits(List> filteredCommits) { - final Set commitSet = ContainerUtil.map2Set(filteredCommits, new Function, Integer>() { + private Condition getFilterFromCommits(List filteredCommits) { + final Set commitSet = ContainerUtil.map2Set(filteredCommits, new Function() { @Override - public Integer fun(Pair pair) { - return myLogDataHolder.putHash(pair.getFirst()); + public Integer fun(Hash hash) { + return myLogDataHolder.putHash(hash); } }); return new Condition() { @@ -104,22 +78,17 @@ public class VcsLogFilterer { @NotNull final LoadMoreStage loadMoreStage, @NotNull final Runnable onSuccess) { ApplicationManager.getApplication().assertIsDispatchThread(); int maxCount = loadMoreStage == LoadMoreStage.INITIAL ? LOAD_MORE_COMMITS_FIRST_STEP_LIMIT : -1; - myLogDataHolder.getFilteredDetailsFromTheVcs(filters, new Consumer>>() { + myLogDataHolder.getFilteredDetailsFromTheVcs(filters, new Consumer>() { @Override - public void consume(List> details) { + public void consume(List hashes) { LoadMoreStage newLoadMoreStage = advanceLoadMoreStage(loadMoreStage); AbstractVcsLogTableModel model; - if (!USE_NEW_GRAPH_FOR_FILTERING) { - model = new NoGraphTableModel(dataPack, myLogDataHolder, myUI, details, newLoadMoreStage); + if (hashes.isEmpty()) { + model = new EmptyTableModel(dataPack, myLogDataHolder, myUI, newLoadMoreStage); } else { - if (details.isEmpty()) { - model = new EmptyTableModel(dataPack, myLogDataHolder, myUI, newLoadMoreStage); - } - else { - dataPack.getGraphFacade().setFilter(getFilterFromCommits(details)); - model = new GraphTableModel(dataPack, myLogDataHolder, myUI, newLoadMoreStage); - } + dataPack.getGraphFacade().setFilter(getFilterFromCommits(hashes)); + model = new GraphTableModel(dataPack, myLogDataHolder, myUI, newLoadMoreStage); } myUI.setModel(model); myUI.repaintUI(); @@ -154,8 +123,8 @@ public class VcsLogFilterer { } @NotNull - private List> filterByDetails(@NotNull DataPack dataPack, @NotNull List detailsFilters) { - List> result = ContainerUtil.newArrayList(); + private List filterByDetails(@NotNull DataPack dataPack, @NotNull List detailsFilters) { + List result = ContainerUtil.newArrayList(); int topCommits = myLogDataHolder.getSettings().getRecentCommitsCount(); List visibleCommits = VcsLogUtil.getVisibleCommits(dataPack.getGraphFacade()); for (int i = 0; i < topCommits && i < visibleCommits.size(); i++) { @@ -179,7 +148,7 @@ public class VcsLogFilterer { } }); if (allFiltersMatch) { - result.add(Pair.create(details.getHash(), details.getRoot())); + result.add(details.getHash()); } } return result; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java deleted file mode 100644 index e8e68e3b3c33..000000000000 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/NoGraphTableModel.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.intellij.vcs.log.ui.tables; - -import com.intellij.openapi.diagnostic.Attachment; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.vcs.log.Hash; -import com.intellij.vcs.log.VcsRef; -import com.intellij.vcs.log.VcsShortCommitDetails; -import com.intellij.vcs.log.data.DataPack; -import com.intellij.vcs.log.data.LoadMoreStage; -import com.intellij.vcs.log.data.VcsLogDataHolder; -import com.intellij.vcs.log.graph.render.CommitCell; -import com.intellij.vcs.log.ui.VcsLogUI; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -public class NoGraphTableModel extends AbstractVcsLogTableModel { - - private static final Logger LOG = Logger.getInstance(NoGraphTableModel.class); - - @NotNull private final List> myCommitsWithRoots; - - public NoGraphTableModel(@NotNull DataPack dataPack, @NotNull VcsLogDataHolder logDataHolder, @NotNull VcsLogUI ui, - @NotNull List> commitsWithRoots, @NotNull LoadMoreStage loadMoreStage) { - super(logDataHolder, ui, dataPack, loadMoreStage); - myCommitsWithRoots = commitsWithRoots; - } - - @Override - public int getRowCount() { - return myCommitsWithRoots.size(); - } - - @NotNull - @Override - public VirtualFile getRoot(int rowIndex) { - Pair commit = myCommitsWithRoots.get(rowIndex); - if (commit != null) { - return commit.getSecond(); - } - else { - LOG.error("Couldn't identify root for commit at " + rowIndex, new Attachment("loaded_commits", myCommitsWithRoots.toString())); - return FAKE_ROOT; - } - } - - @NotNull - @Override - protected CommitCell getCommitColumnCell(int index, @Nullable VcsShortCommitDetails details) { - String subject = ""; - Collection refs = Collections.emptyList(); - if (details != null) { - subject = details.getSubject(); - refs = myDataPack.getRefsModel().refsToCommit(details.getHash()); - } - return new CommitCell(subject, refs); - } - - @NotNull - @Override - protected Class getCommitColumnClass() { - return CommitCell.class; - } - - @Nullable - @Override - public Hash getHashAtRow(int row) { - return myCommitsWithRoots.get(row).getFirst(); - } - - @Override - public int getRowOfCommit(@NotNull Hash hash) { - for (int i = 0; i < myCommitsWithRoots.size(); i++) { - if (hash.equals(myCommitsWithRoots.get(i).getFirst())) { - return i; - } - } - return -1; - } - - @Override - public int getRowOfCommitByPartOfHash(@NotNull String hash) { - String lowercaseHash = hash.toLowerCase(); - for (int i = 0; i < myCommitsWithRoots.size(); i++) { - Hash commit = myCommitsWithRoots.get(i).getFirst(); - if (commit.toString().toLowerCase().startsWith(lowercaseHash)) { - return i; - } - } - return -1; - } - -}