diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/history/FileHistoryPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/history/FileHistoryPanel.java index ee68c478b618..38e14d322416 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/history/FileHistoryPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/history/FileHistoryPanel.java @@ -26,6 +26,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.*; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; +import com.intellij.vcs.log.CommitId; import com.intellij.vcs.log.VcsFullCommitDetails; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.impl.CommonUiProperties; @@ -80,10 +81,10 @@ public class FileHistoryPanel extends JPanel implements DataProvider, Disposable myDetailsPanel = new DetailsPanel(logData, myUi.getColorManager(), this) { @Override - protected void navigate(@NotNull String hash) { + protected void navigate(@NotNull CommitId commit) { VcsLogUiImpl mainLogUi = VcsProjectLog.getInstance(logData.getProject()).getMainLogUi(); if (mainLogUi != null) { - mainLogUi.getVcsLog().jumpToReference(hash); + mainLogUi.jumpToCommit(commit.getHash(), commit.getRoot()); } } }; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java index 3b82228e09be..60239f2c67c3 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java @@ -45,6 +45,7 @@ import java.util.List; import java.util.stream.Collectors; import static com.intellij.openapi.vcs.history.VcsHistoryUtil.getCommitDetailsFont; +import static com.intellij.util.ObjectUtils.notNull; import static com.intellij.vcs.log.ui.frame.CommitPresentationUtil.GO_TO_HASH; import static com.intellij.vcs.log.ui.frame.CommitPresentationUtil.SHOW_HIDE_BRANCHES; @@ -61,11 +62,11 @@ public class CommitPanel extends JBPanel { @NotNull private final BranchesPanel myContainingBranchesPanel; @NotNull private final RootPanel myRootPanel; @NotNull private final VcsLogColorManager myColorManager; - @NotNull private final Consumer myNavigate; + @NotNull private final Consumer myNavigate; @Nullable private CommitId myCommit; - public CommitPanel(@NotNull VcsLogData logData, @NotNull VcsLogColorManager colorManager, @NotNull Consumer navigate) { + public CommitPanel(@NotNull VcsLogData logData, @NotNull VcsLogColorManager colorManager, @NotNull Consumer navigate) { myLogData = logData; myColorManager = colorManager; myNavigate = navigate; @@ -181,7 +182,8 @@ public class CommitPanel extends JBPanel { @Override public void hyperlinkUpdate(@NotNull HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED && e.getDescription().startsWith(GO_TO_HASH)) { - myNavigate.consume(e.getDescription().substring(GO_TO_HASH.length())); + CommitId commitId = notNull(myPresentation).parseTargetCommit(e); + if (commitId != null) myNavigate.consume(commitId); } else { BrowserHyperlinkListener.INSTANCE.hyperlinkUpdate(e); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java index 0799ef1e532b..d9d2519fcb5c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java @@ -16,7 +16,9 @@ import com.intellij.vcs.log.util.VcsUserUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.event.HyperlinkEvent; import java.awt.*; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -82,7 +84,7 @@ public class CommitPresentationUtil { CommitId commitId = resolvedHashes.get(hash); if (commitId != null) { - hash = "" + hash + ""; + hash = "" + hash + ""; } matcher.appendReplacement(result, hash); } @@ -268,7 +270,7 @@ public class CommitPresentationUtil { Set unresolvedHashesForCommit = findHashes(project, subject, description); String text = formatCommitText(project, subject, description, hashAndAuthor, ContainerUtil.newHashMap()); if (unresolvedHashesForCommit.isEmpty()) { - return new CommitPresentation(text); + return new CommitPresentation(text, Collections.emptyMap()); } unresolvedHashes.addAll(unresolvedHashesForCommit); @@ -286,7 +288,7 @@ public class CommitPresentationUtil { @NotNull String description, @NotNull String hashAndAuthor, @NotNull String text) { - super(text); + super(text, Collections.emptyMap()); myProject = project; mySubject = subject; myDescription = description; @@ -296,7 +298,7 @@ public class CommitPresentationUtil { @NotNull public CommitPresentation resolve(@NotNull Map resolvedHashes) { String text = formatCommitText(myProject, mySubject, myDescription, myHashAndAuthor, resolvedHashes); - return new CommitPresentation(text); + return new CommitPresentation(text, resolvedHashes); } @Override @@ -307,9 +309,11 @@ public class CommitPresentationUtil { public static class CommitPresentation { @NotNull protected final String myText; + @NotNull private final Map myResolvedHashes; - public CommitPresentation(@NotNull String text) { + public CommitPresentation(@NotNull String text, @NotNull Map resolvedHashes) { myText = text; + myResolvedHashes = resolvedHashes; } @NotNull @@ -317,6 +321,13 @@ public class CommitPresentationUtil { return myText; } + @Nullable + public CommitId parseTargetCommit(@NotNull HyperlinkEvent e) { + if (!e.getDescription().startsWith(GO_TO_HASH)) return null; + String hash = e.getDescription().substring(GO_TO_HASH.length()); + return myResolvedHashes.get(hash); + } + @NotNull public CommitPresentation resolve(@NotNull Map resolvedHashes) { return this; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java index ce000c3a5078..d6ed48044ccc 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/DetailsPanel.java @@ -139,7 +139,7 @@ public class DetailsPanel extends JPanel implements EditorColorsListener, Dispos } } - protected void navigate(@NotNull String hash) { + protected void navigate(@NotNull CommitId commitId) { } private void rebuildCommitPanels(int[] selection) { diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java index 675c5a3c25f5..2d7d9709ab8f 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/MainFrame.java @@ -21,14 +21,12 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.table.ComponentsListFocusTraversalPolicy; import com.intellij.vcs.CommittedChangeListForRevision; -import com.intellij.vcs.log.VcsFullCommitDetails; -import com.intellij.vcs.log.VcsLog; -import com.intellij.vcs.log.VcsLogFilterUi; -import com.intellij.vcs.log.VcsLogUi; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.impl.CommonUiProperties; import com.intellij.vcs.log.impl.MainVcsLogUiProperties; import com.intellij.vcs.log.util.VcsLogUtil; +import com.intellij.vcs.log.ui.AbstractVcsLogUi; import com.intellij.vcs.log.ui.VcsLogActionPlaces; import com.intellij.vcs.log.ui.VcsLogInternalDataKeys; import com.intellij.vcs.log.ui.VcsLogUiImpl; @@ -56,7 +54,7 @@ public class MainFrame extends JPanel implements DataProvider, Disposable { private static final String HELP_ID = "reference.changesToolWindow.log"; @NotNull private final VcsLogData myLogData; - @NotNull private final VcsLogUi myUi; + @NotNull private final AbstractVcsLogUi myUi; @NotNull private final VcsLog myLog; @NotNull private final VcsLogClassicFilterUi myFilterUi; @@ -91,8 +89,8 @@ public class MainFrame extends JPanel implements DataProvider, Disposable { PopupHandler.installPopupHandler(myGraphTable, VcsLogActionPlaces.POPUP_ACTION_GROUP, VcsLogActionPlaces.VCS_LOG_TABLE_PLACE); myDetailsPanel = new DetailsPanel(logData, ui.getColorManager(), this) { @Override - protected void navigate(@NotNull String hash) { - myLog.jumpToReference(hash); + protected void navigate(@NotNull CommitId commit) { + myUi.jumpToCommit(commit.getHash(), commit.getRoot()); } };