From c7c164564c55fd170b1cb5cac8e7c32b0db40a7c Mon Sep 17 00:00:00 2001
From: shiraji <isogai.shiraji@gmail.com>
Date: Wed, 20 Mar 2024 17:56:45 +0900
Subject: [PATCH] Use UpToDateLineNumberProviderImpl to calculate current line

---
 .../action/ListPullRequestToggleAction.kt            | 12 ++++++++++--
 .../ListPullRequestTextAnnotationGutterProvider.kt   |  9 +++++----
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/main/kotlin/com/github/shiraji/findpullrequest/action/ListPullRequestToggleAction.kt b/src/main/kotlin/com/github/shiraji/findpullrequest/action/ListPullRequestToggleAction.kt
index 98795d8..1601f51 100644
--- a/src/main/kotlin/com/github/shiraji/findpullrequest/action/ListPullRequestToggleAction.kt
+++ b/src/main/kotlin/com/github/shiraji/findpullrequest/action/ListPullRequestToggleAction.kt
@@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project
 import com.intellij.openapi.util.Disposer
 import com.intellij.openapi.vcs.ProjectLevelVcsManager
 import com.intellij.openapi.vcs.VcsException
+import com.intellij.openapi.vcs.impl.UpToDateLineNumberProviderImpl
 import com.intellij.openapi.vfs.VirtualFile
 import com.intellij.util.ui.UIUtil
 import git4idea.GitRevisionNumber
@@ -167,8 +168,15 @@ class ListPullRequestToggleAction : ToggleAction() {
                 }
 
                 ApplicationManager.getApplication().invokeLater {
-                    val provider =
-                        ListPullRequestTextAnnotationGutterProvider(map, virtualFile, fileAnnotation, model, repository)
+                    val upToDateLineNumberProvider = UpToDateLineNumberProviderImpl(editor.document, project)
+                    val provider = ListPullRequestTextAnnotationGutterProvider(
+                        map,
+                        virtualFile,
+                        fileAnnotation,
+                        model,
+                        repository,
+                        upToDateLineNumberProvider
+                    )
                     editor.gutter.registerTextAnnotation(provider, provider)
                 }
             }
diff --git a/src/main/kotlin/com/github/shiraji/findpullrequest/annotation/ListPullRequestTextAnnotationGutterProvider.kt b/src/main/kotlin/com/github/shiraji/findpullrequest/annotation/ListPullRequestTextAnnotationGutterProvider.kt
index 1f03b0a..da5f1d8 100644
--- a/src/main/kotlin/com/github/shiraji/findpullrequest/annotation/ListPullRequestTextAnnotationGutterProvider.kt
+++ b/src/main/kotlin/com/github/shiraji/findpullrequest/annotation/ListPullRequestTextAnnotationGutterProvider.kt
@@ -19,12 +19,13 @@ import git4idea.repo.GitRepository
 import java.awt.Color
 import java.awt.Cursor
 
-class ListPullRequestTextAnnotationGutterProvider constructor(
+class ListPullRequestTextAnnotationGutterProvider(
     private val gitHashesMap: HashMap<String, GitPullRequestInfo>,
     val virtualFile: VirtualFile,
     private val fileAnnotation: FileAnnotation,
     private val model: FindPullRequestModel,
-    private val repository: GitRepository
+    private val repository: GitRepository,
+    private val upToDateLineNumberProvider: UpToDateLineNumberProviderImpl,
 ) : TextAnnotationGutterProvider, EditorGutterAction {
 
     override fun getPopupActions(line: Int, editor: Editor?): MutableList<AnAction> {
@@ -36,7 +37,6 @@ class ListPullRequestTextAnnotationGutterProvider constructor(
     }
 
     override fun getLineText(line: Int, editor: Editor?): String? {
-        val upToDateLineNumberProvider = UpToDateLineNumberProviderImpl(editor?.document, editor?.project)
         val currentLine = upToDateLineNumberProvider.getLineNumber(line)
         if (currentLine < 0) return ""
         val hash = fileAnnotation.getLineRevisionNumber(currentLine)?.asString() ?: ""
@@ -62,7 +62,8 @@ class ListPullRequestTextAnnotationGutterProvider constructor(
     override fun doAction(lineNum: Int) {
         object : Task.Backgroundable(fileAnnotation.project, "Opening Pull Request...") {
             override fun run(indicator: ProgressIndicator) {
-                val hash = fileAnnotation.getLineRevisionNumber(lineNum)?.asString() ?: ""
+                val currentLine = upToDateLineNumberProvider.getLineNumber(lineNum)
+                val hash = fileAnnotation.getLineRevisionNumber(currentLine)?.asString() ?: ""
                 val gitPullRequestInfo = gitHashesMap[hash] ?: return
                 val hostingService = gitPullRequestInfo.hostingServices ?: return
                 val webRepoUrl = model.createWebRepoUrl(repository) ?: return