From 68b70854646b6067e995079c0b7a423537709c63 Mon Sep 17 00:00:00 2001 From: Ashish Reddy Podduturi Date: Fri, 31 May 2024 15:33:43 -0500 Subject: [PATCH 1/2] Fix to trigger scans for only active editor text change. --- .../codescan/CodeWhispererCodeScanManager.kt | 1 - .../listeners/CodeWhispererCodeScanDocumentListener.kt | 9 +++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt index 0b7a20f2d87..2e791bb4634 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt @@ -387,7 +387,6 @@ class CodeWhispererCodeScanManager(val project: Project) { */ fun addCodeScanUI(setSelected: Boolean = false) = runInEdt { reset() - EditorFactory.getInstance().eventMulticaster.addDocumentListener(documentListener, project) val problemsWindow = getProblemsWindow() if (!problemsWindow.contentManager.contents.contains(codeScanIssuesContent)) { problemsWindow.contentManager.addContent(codeScanIssuesContent) diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanDocumentListener.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanDocumentListener.kt index cee4a8afbb6..fde9fcf05a2 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanDocumentListener.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanDocumentListener.kt @@ -6,8 +6,10 @@ package software.aws.toolkits.jetbrains.services.codewhisperer.codescan.listener import com.intellij.openapi.editor.event.DocumentEvent import com.intellij.openapi.editor.event.DocumentListener import com.intellij.openapi.fileEditor.FileDocumentManager +import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.openapi.util.TextRange +import com.intellij.openapi.vfs.isFile import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanIssue import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanManager import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager @@ -22,6 +24,9 @@ internal class CodeWhispererCodeScanDocumentListener(val project: Project) : Doc val scanManager = CodeWhispererCodeScanManager.getInstance(project) val treeModel = scanManager.getScanTree().model + val fileEditorManager = FileEditorManager.getInstance(project) + val activeEditor = fileEditorManager.selectedEditor + val editedTextRange = TextRange.create(event.offset, event.offset + event.oldLength) val nodes = scanManager.getOverlappingScanNodes(file, editedTextRange) nodes.forEach { @@ -33,8 +38,8 @@ internal class CodeWhispererCodeScanDocumentListener(val project: Project) : Doc issue.rangeHighlighter?.textAttributes = null } scanManager.updateScanNodes(file) - - if (CodeWhispererExplorerActionManager.getInstance().isAutoEnabledForCodeScan() && + if (activeEditor != null && activeEditor.file == file && + file.isFile && CodeWhispererExplorerActionManager.getInstance().isAutoEnabledForCodeScan() && !CodeWhispererExplorerActionManager.getInstance().isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project) ) { From 7735ec22f9236ca3ea9889dbe7528fdbd9d4dc61 Mon Sep 17 00:00:00 2001 From: Ashish Reddy Podduturi Date: Fri, 31 May 2024 16:16:45 -0500 Subject: [PATCH 2/2] Adding checks to other triggers. --- .../codescan/listeners/CodeWhispererCodeScanFileListener.kt | 6 +++++- .../codewhisperer/explorer/actions/ResumeCodeScans.kt | 2 +- .../codewhisperer/explorer/nodes/ResumeCodeScanNode.kt | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanFileListener.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanFileListener.kt index 1dae4a94748..373df118f23 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanFileListener.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/listeners/CodeWhispererCodeScanFileListener.kt @@ -6,6 +6,7 @@ package software.aws.toolkits.jetbrains.services.codewhisperer.codescan.listener import com.intellij.openapi.editor.event.EditorFactoryEvent import com.intellij.openapi.editor.event.EditorFactoryListener import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.isFile import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanManager import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isUserBuilderId @@ -13,7 +14,10 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer internal class CodeWhispererCodeScanFileListener(val project: Project) : EditorFactoryListener { override fun editorCreated(event: EditorFactoryEvent) { - if (!CodeWhispererExplorerActionManager.getInstance().isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project)) { + val actionManager = CodeWhispererExplorerActionManager.getInstance() + if (event.editor.virtualFile.isFile && actionManager.isAutoEnabledForCodeScan() && + !actionManager.isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project) + ) { CodeWhispererCodeScanManager.getInstance(project).createDebouncedRunCodeScan(CodeWhispererConstants.CodeAnalysisScope.FILE) } } diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/actions/ResumeCodeScans.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/actions/ResumeCodeScans.kt index 1aa5b6430cf..3d53c2b90de 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/actions/ResumeCodeScans.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/actions/ResumeCodeScans.kt @@ -22,7 +22,7 @@ class ResumeCodeScans : DumbAwareAction( val actionManager = CodeWhispererExplorerActionManager.getInstance() actionManager.setAutoCodeScan(project, true) // Run Proactive Code File Scan once toggle is enabled - if (!actionManager.isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project)) { + if (actionManager.isAutoEnabledForCodeScan() && !actionManager.isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project)) { CodeWhispererCodeScanManager.getInstance(project).createDebouncedRunCodeScan(CodeWhispererConstants.CodeAnalysisScope.FILE) } } diff --git a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/nodes/ResumeCodeScanNode.kt b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/nodes/ResumeCodeScanNode.kt index 9537119e4c8..f7ebca14bab 100644 --- a/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/nodes/ResumeCodeScanNode.kt +++ b/plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/explorer/nodes/ResumeCodeScanNode.kt @@ -24,7 +24,7 @@ class ResumeCodeScanNode(nodeProject: Project) : CodeWhispererActionNode( actionManager.setAutoCodeScan(project, true) // Run Proactive Code File Scan once toggle is enabled - if (!actionManager.isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project)) { + if (actionManager.isAutoEnabledForCodeScan() && !actionManager.isMonthlyQuotaForCodeScansExceeded() && !isUserBuilderId(project)) { CodeWhispererCodeScanManager.getInstance(project).createDebouncedRunCodeScan(CodeWhispererConstants.CodeAnalysisScope.FILE) } }