diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowBaseRevisionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowBaseRevisionAction.java index 3727d04e343d..1a9de92a4834 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowBaseRevisionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/ShowBaseRevisionAction.java @@ -24,12 +24,15 @@ import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.ui.popup.JBPopupFactory; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.changes.ChangesUtil; +import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer; import com.intellij.openapi.vcs.diff.DiffMixin; import com.intellij.openapi.vcs.history.VcsRevisionDescription; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.BrowserHyperlinkListener; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; @@ -70,26 +73,31 @@ public class ShowBaseRevisionAction extends AbstractVcsAction { @Override public void onSuccess() { - if (myProject.isDisposed() || ! myProject.isOpen()) return; + if (myProject.isDisposed() || !myProject.isOpen()) return; if (myDescription != null) { NotificationPanel panel = new NotificationPanel(); - panel.setText(createMessage(myDescription, selectedFile)); + panel.setText(createMessage(myProject, myDescription, selectedFile)); final JBPopup message = JBPopupFactory.getInstance().createComponentPopupBuilder(panel, panel.getLabel()).createPopup(); if (vcsContext.getEditor() != null) { message.showInBestPositionFor(vcsContext.getEditor()); - } else { - message.showCenteredInCurrentWindow(vcsContext.getProject()); + } + else { + message.showCenteredInCurrentWindow(myProject); } } } } - private static String createMessage(VcsRevisionDescription description, final VirtualFile vf) { - return "" + UIUtil.getCssFontDeclaration(UIUtil.getLabelFont()) + "" + - VcsBundle.message("current.version.text", description.getAuthor(), - DateFormatUtil.formatPrettyDateTime(description.getRevisionDate()), description.getCommitMessage(), - description.getRevisionNumber().asString(), vf.getName()) + ""; + private static String createMessage(@NotNull Project project, @NotNull VcsRevisionDescription description, @NotNull VirtualFile vf) { + String commitMessage = IssueLinkHtmlRenderer.formatTextWithLinks(project, StringUtil.notNullize(description.getCommitMessage())); + String message = VcsBundle.message("current.version.text", + description.getAuthor(), + DateFormatUtil.formatPrettyDateTime(description.getRevisionDate()), + commitMessage, + description.getRevisionNumber().asString(), + vf.getName()); + return "" + UIUtil.getCssFontDeclaration(UIUtil.getLabelFont()) + "" + message + ""; } @Override @@ -106,6 +114,7 @@ public class ShowBaseRevisionAction extends AbstractVcsAction { myLabel = new JEditorPane(UIUtil.HTML_MIME, ""); myLabel.setEditable(false); myLabel.setFont(UIUtil.getToolTipFont()); + myLabel.addHyperlinkListener(BrowserHyperlinkListener.INSTANCE); setBorder(JBUI.Borders.empty(1, 15)); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/IssueLinkHtmlRenderer.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/IssueLinkHtmlRenderer.java index 390c0027639d..83ff04cd51f8 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/IssueLinkHtmlRenderer.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/issueLinks/IssueLinkHtmlRenderer.java @@ -23,6 +23,7 @@ import com.intellij.util.containers.Convertor; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsUtil; import com.intellij.xml.util.XmlStringUtil; +import org.jetbrains.annotations.NotNull; import java.util.List; @@ -33,13 +34,16 @@ public class IssueLinkHtmlRenderer { private IssueLinkHtmlRenderer() { } - public static String formatTextIntoHtml(final Project project, final String c) { + @NotNull + public static String formatTextIntoHtml(@NotNull Project project, @NotNull String c) { return "" + UIUtil.getCssFontDeclaration(UIUtil.getLabelFont()) + "" + formatTextWithLinks(project, c) + ""; } - @SuppressWarnings({"HardCodedStringLiteral"}) - public static String formatTextWithLinks(Project project, String str, Convertor convertor) { + @NotNull + public static String formatTextWithLinks(@NotNull Project project, + @NotNull String str, + @NotNull Convertor convertor) { if (StringUtil.isEmpty(str)) return ""; String comment = XmlStringUtil.escapeString(VcsUtil.trimCommitMessageToSaneSize(str), false); @@ -59,7 +63,8 @@ public class IssueLinkHtmlRenderer { return comment.replace("\n", "
"); } - public static String formatTextWithLinks(final Project project, final String c) { + @NotNull + public static String formatTextWithLinks(@NotNull Project project, @NotNull final String c) { return formatTextWithLinks(project, c, Convertor.SELF); } } \ No newline at end of file