@@ -7,10 +7,12 @@ import com.intellij.icons.AllIcons
7
7
import com.intellij.openapi.actionSystem.ActionGroup
8
8
import com.intellij.openapi.actionSystem.ActionManager
9
9
import com.intellij.openapi.actionSystem.ActionToolbar
10
+ import com.intellij.openapi.application.runInEdt
11
+ import com.intellij.openapi.fileEditor.FileEditorManager
12
+ import com.intellij.openapi.fileEditor.OpenFileDescriptor
10
13
import com.intellij.openapi.project.Project
11
14
import com.intellij.openapi.vfs.VirtualFile
12
15
import com.intellij.ui.AnimatedIcon
13
- import com.intellij.ui.ClickListener
14
16
import com.intellij.ui.OnePixelSplitter
15
17
import com.intellij.ui.ScrollPaneFactory
16
18
import com.intellij.ui.border.CustomLineBorder
@@ -19,7 +21,8 @@ import com.intellij.ui.treeStructure.Tree
19
21
import com.intellij.util.ui.JBUI
20
22
import icons.AwsIcons
21
23
import kotlinx.coroutines.CoroutineScope
22
- import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.listeners.CodeWhispererCodeScanTreeMouseListener
24
+ import software.aws.toolkits.core.utils.error
25
+ import software.aws.toolkits.core.utils.getLogger
23
26
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.IssueGroupingStrategy
24
27
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.utils.IssueSeverity
25
28
import software.aws.toolkits.jetbrains.services.codewhisperer.layout.CodeWhispererLayoutConfig
@@ -31,7 +34,6 @@ import java.awt.BorderLayout
31
34
import java.awt.Component
32
35
import java.awt.GridBagConstraints
33
36
import java.awt.GridBagLayout
34
- import java.awt.event.MouseEvent
35
37
import java.time.Instant
36
38
import java.time.format.DateTimeFormatter
37
39
import javax.swing.BorderFactory
@@ -52,15 +54,18 @@ internal class CodeWhispererCodeScanResultsView(private val project: Project, pr
52
54
53
55
private val codeScanTree: Tree = Tree ().apply {
54
56
isRootVisible = false
55
- CodeWhispererCodeScanTreeMouseListener (project).installOn(this )
56
- object : ClickListener () {
57
- override fun onClick (event : MouseEvent , clickCount : Int ): Boolean {
58
- val issueNode = (event.source as Tree ).selectionPath?.lastPathComponent as ? DefaultMutableTreeNode
59
- val issue = issueNode?.userObject as ? CodeWhispererCodeScanIssue ? : return false
60
- showIssueDetails(issue, defaultScope)
61
- return true
57
+
58
+ addTreeSelectionListener { e ->
59
+ val issueNode = e.path.lastPathComponent as ? DefaultMutableTreeNode
60
+ val issue = issueNode?.userObject as ? CodeWhispererCodeScanIssue ? : return @addTreeSelectionListener
61
+
62
+ showIssueDetails(issue, defaultScope)
63
+
64
+ synchronized(issueNode) {
65
+ if (issueNode.userObject !is CodeWhispererCodeScanIssue ) return @addTreeSelectionListener
66
+ navigateToIssue(issueNode.userObject as CodeWhispererCodeScanIssue )
62
67
}
63
- }.installOn( this )
68
+ }
64
69
cellRenderer = ColoredTreeCellRenderer ()
65
70
}
66
71
@@ -390,8 +395,30 @@ internal class CodeWhispererCodeScanResultsView(private val project: Project, pr
390
395
}
391
396
}
392
397
398
+ private fun navigateToIssue (codeScanIssue : CodeWhispererCodeScanIssue ) {
399
+ val textRange = codeScanIssue.textRange ? : return
400
+ val startOffset = textRange.startOffset
401
+
402
+ if (codeScanIssue.isInvalid) return
403
+
404
+ runInEdt {
405
+ val editor = FileEditorManager .getInstance(project).openTextEditor(
406
+ OpenFileDescriptor (project, codeScanIssue.file, startOffset),
407
+ false
408
+ )
409
+ if (editor == null ) {
410
+ LOG .error { " Cannot fetch editor for the file ${codeScanIssue.file.path} " }
411
+ return @runInEdt
412
+ }
413
+ if (codeScanIssue.rangeHighlighter == null ) {
414
+ codeScanIssue.rangeHighlighter = codeScanIssue.addRangeHighlighter(editor.markupModel)
415
+ }
416
+ }
417
+ }
418
+
393
419
private companion object {
394
420
const val ACTION_PLACE = " CodeScanResultsPanel"
395
421
const val CODE_SCAN_SPLITTER_PROPORTION_KEY = " CODE_SCAN_SPLITTER_PROPORTION"
422
+ private val LOG = getLogger<CodeWhispererCodeScanResultsView >()
396
423
}
397
424
}
0 commit comments