1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package git4idea.annotate;
4 import com.intellij.openapi.project.Project;
5 import com.intellij.openapi.util.NlsSafe;
6 import com.intellij.openapi.vcs.VcsBundle;
7 import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer;
8 import com.intellij.openapi.vcs.history.VcsRevisionNumber;
9 import com.intellij.util.containers.Convertor;
10 import com.intellij.vcsUtil.VcsUtil;
11 import com.intellij.xml.util.XmlStringUtil;
12 import org.jetbrains.annotations.Nls;
13 import org.jetbrains.annotations.NotNull;
14 import org.jetbrains.annotations.Nullable;
16 public class AnnotationTooltipBuilder {
17 @NotNull private final Project myProject;
18 private final boolean myAsHtml;
20 private final @Nls StringBuilder sb = new StringBuilder();
22 public AnnotationTooltipBuilder(@NotNull Project project, boolean asHtml) {
27 private void append(@NotNull @Nls String text) {
28 sb.append(myAsHtml ? XmlStringUtil.escapeString(text) : text);
31 private void appendRaw(@NotNull @Nls String text) {
35 public void appendRevisionLine(@NotNull VcsRevisionNumber revisionNumber,
36 @Nullable Convertor<? super VcsRevisionNumber, String> linkBuilder) {
41 revision = linkBuilder != null ? linkBuilder.convert(revisionNumber) : null;
42 if (revision == null) {
43 revision = XmlStringUtil.escapeString(revisionNumber.asString());
47 revision = revisionNumber.asString();
49 appendRaw(VcsBundle.message("commit.description.tooltip.commit", revision));
52 public void appendLine(@NotNull @Nls String content) {
57 public void appendCommitMessageBlock(@NotNull @Nls String message) {
59 appendTextWithLinks(message);
62 public void appendTextWithLinks(@NotNull @Nls String message) {
64 appendRaw(IssueLinkHtmlRenderer.formatTextWithLinks(myProject, message));
67 append(VcsUtil.trimCommitMessageToSaneSize(message));
71 private void appendNewline() {
72 if (sb.length() != 0) append("\n");
77 public String toString() {
82 public static String buildSimpleTooltip(@NotNull Project project,
84 @NotNull @Nls String prefix,
85 @NotNull @NlsSafe String revision,
86 @Nullable @Nls String commitMessage) {
87 AnnotationTooltipBuilder builder = new AnnotationTooltipBuilder(project, asHtml);
88 builder.append(prefix);
90 builder.append(revision);
91 if (commitMessage != null) {
93 builder.appendTextWithLinks(commitMessage);
95 return builder.toString();