[commit] extract recent commit messages contributor
authorJulia Beliaeva <Julia.Beliaeva@jetbrains.com>
Thu, 13 May 2021 16:37:35 +0000 (19:37 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Wed, 7 Jul 2021 08:29:26 +0000 (08:29 +0000)
GitOrigin-RevId: ad0ca289fefc3a56dda8ec18b1576c338f39bad5

platform/vcs-impl/resources/META-INF/VcsExtensions.xml
platform/vcs-impl/src/com/intellij/openapi/vcs/ChangedFilesCommitCompletionContributor.java [moved from platform/vcs-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java with 88% similarity]
platform/vcs-impl/src/com/intellij/openapi/vcs/RecentMessagesCommitCompletionContributor.kt [new file with mode: 0644]

index bffe66c37e806a9bc1fbf8b42c9cbc9c363a3429..b08f7de9a8e91387baeb74236fc829d055c0a3c3 100644 (file)
     <checkinHandlerFactory implementation="com.intellij.openapi.vcs.checkin.CodeCleanupCheckinHandlerFactory" id="codeCleanup"/>
 
     <completion.preselectionBehaviourProvider implementation="com.intellij.openapi.vcs.CommitCompletionPreselectionBehaviourProvider"/>
-    <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.CommitCompletionContributor" id="commitCompletion"
+    <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.RecentMessagesCommitCompletionContributor" id="commitCompletion"
                             order="first, before liveTemplates"/>
+    <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.ChangedFilesCommitCompletionContributor" 
+                            order="first, before liveTemplates, after commitCompletion"/>
     <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.changes.ChangeListCompletionContributor"
                             order="first"/>
 
similarity index 88%
rename from platform/vcs-impl/src/com/intellij/openapi/vcs/CommitCompletionContributor.java
rename to platform/vcs-impl/src/com/intellij/openapi/vcs/ChangedFilesCommitCompletionContributor.java
index 66eac56d1092998721e6d564356ea2fb5d1bb2cd..a9d1d6fe00215029989549bfc1476cfae6f5ad01 100644 (file)
@@ -39,7 +39,7 @@ import java.util.List;
 /**
  * @author Dmitry Avdeev
  */
-public class CommitCompletionContributor extends CompletionContributor {
+public class ChangedFilesCommitCompletionContributor extends CompletionContributor {
 
   @Override
   public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) {
@@ -54,6 +54,9 @@ public class CommitCompletionContributor extends CompletionContributor {
     result.stopHere();
     int count = parameters.getInvocationCount();
 
+    List<ChangeList> lists = commitMessage.getChangeLists();
+    if (lists.isEmpty()) return;
+
     String prefix = TextFieldWithAutoCompletionListProvider.getCompletionPrefix(parameters);
     if (count == 0 && prefix.length() < 5) {
       result.restartCompletionOnPrefixChange(StandardPatterns.string().withLength(5));
@@ -62,7 +65,7 @@ public class CommitCompletionContributor extends CompletionContributor {
     CompletionResultSet resultSet = result.caseInsensitive().withPrefixMatcher(
       count == 0 ? new PlainPrefixMatcher(prefix, true) : new CamelHumpMatcher(prefix));
     CompletionResultSet prefixed = result.withPrefixMatcher(new PlainPrefixMatcher(prefix, count == 0));
-    for (ChangeList list : commitMessage.getChangeLists()) {
+    for (ChangeList list : lists) {
       ProgressManager.checkCanceled();
       for (Change change : list.getChanges()) {
         ProgressManager.checkCanceled();
@@ -79,15 +82,6 @@ public class CommitCompletionContributor extends CompletionContributor {
         }
       }
     }
-
-    if (count > 0) {
-      result.caseInsensitive()
-        .withPrefixMatcher(new PlainPrefixMatcher(prefix))
-        .addAllElements(
-          StreamEx.of(VcsConfiguration.getInstance(project).getRecentMessages())
-            .reverseSorted()
-            .map(lookupString -> PrioritizedLookupElement.withPriority(LookupElementBuilder.create(lookupString), Integer.MIN_VALUE)));
-    }
   }
 
   private static void addFilePathName(CompletionResultSet resultSet, FilePath filePath, boolean strikeout) {
diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/RecentMessagesCommitCompletionContributor.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/RecentMessagesCommitCompletionContributor.kt
new file mode 100644 (file)
index 0000000..c046f5d
--- /dev/null
@@ -0,0 +1,27 @@
+package com.intellij.openapi.vcs
+
+import com.intellij.codeInsight.completion.*
+import com.intellij.codeInsight.lookup.LookupElementBuilder
+import com.intellij.openapi.vcs.ui.CommitMessage
+import com.intellij.psi.PsiDocumentManager
+import com.intellij.ui.TextFieldWithAutoCompletionListProvider
+import one.util.streamex.StreamEx
+
+class RecentMessagesCommitCompletionContributor : CompletionContributor() {
+  override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
+    val file = parameters.originalFile
+    val project = file.project
+    val document = PsiDocumentManager.getInstance(project).getDocument(file) ?: return
+    if (document.getUserData(CommitMessage.DATA_KEY) == null) return
+    if (parameters.invocationCount == 0) return
+
+    result.caseInsensitive()
+      .withPrefixMatcher(PlainPrefixMatcher(TextFieldWithAutoCompletionListProvider.getCompletionPrefix(parameters)))
+      .addAllElements(
+        StreamEx.of(VcsConfiguration.getInstance(project).recentMessages)
+          .reverseSorted()
+          .map { lookupString: String ->
+            PrioritizedLookupElement.withPriority(LookupElementBuilder.create(lookupString), Int.MIN_VALUE.toDouble())
+          })
+  }
+}
\ No newline at end of file