Skip to content

Commit 2bdb889

Browse files
committed
Fix EDT issue on CodeWhispererEditorListener
1 parent e6f7ed2 commit 2bdb889

File tree

2 files changed

+26
-22
lines changed

2 files changed

+26
-22
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix 'Slow operations are prohibited on EDT.' when Amazon Q is determining if a file supports inline suggestions (#4823)"
4+
}

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorListener.kt

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.intellij.openapi.editor.event.DocumentEvent
88
import com.intellij.openapi.editor.event.EditorFactoryEvent
99
import com.intellij.openapi.editor.event.EditorFactoryListener
1010
import com.intellij.openapi.editor.impl.EditorImpl
11+
import com.intellij.openapi.vfs.findPsiFile
1112
import com.intellij.psi.PsiDocumentManager
1213
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
1314
import software.aws.toolkits.jetbrains.services.codewhisperer.language.programmingLanguage
@@ -17,27 +18,26 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhis
1718
class CodeWhispererEditorListener : EditorFactoryListener {
1819
override fun editorCreated(event: EditorFactoryEvent) {
1920
val editor = (event.editor as? EditorImpl) ?: return
20-
editor.project?.let { project ->
21-
PsiDocumentManager.getInstance(project).getPsiFile(editor.document)?.programmingLanguage() ?. let { language ->
22-
// If language is not supported by CodeWhisperer, no action needed
23-
if (!language.isCodeCompletionSupported()) return
24-
// If language is supported, install document listener for CodeWhisperer service
25-
editor.document.addDocumentListener(
26-
object : BulkAwareDocumentListener {
27-
// TODO: Track only deletion changes within the current 5-min interval which will give
28-
// the most accurate code percentage data.
29-
override fun documentChanged(event: DocumentEvent) {
30-
if (!isCodeWhispererEnabled(project)) return
31-
CodeWhispererInvocationStatus.getInstance().documentChanged()
32-
CodeWhispererCodeCoverageTracker.getInstance(project, language).apply {
33-
activateTrackerIfNotActive()
34-
documentChanged(event)
35-
}
36-
}
37-
},
38-
editor.disposable
39-
)
40-
}
41-
}
21+
val project = editor.project ?: return
22+
23+
val language = editor.virtualFile.programmingLanguage()
24+
// If language is not supported by CodeWhisperer, no action needed
25+
if (!language.isCodeCompletionSupported()) return
26+
// If language is supported, install document listener for CodeWhisperer service
27+
editor.document.addDocumentListener(
28+
object : BulkAwareDocumentListener {
29+
// TODO: Track only deletion changes within the current 5-min interval which will give
30+
// the most accurate code percentage data.
31+
override fun documentChanged(event: DocumentEvent) {
32+
if (!isCodeWhispererEnabled(project)) return
33+
CodeWhispererInvocationStatus.getInstance().documentChanged()
34+
CodeWhispererCodeCoverageTracker.getInstance(project, language).apply {
35+
activateTrackerIfNotActive()
36+
documentChanged(event)
37+
}
38+
}
39+
},
40+
editor.disposable
41+
)
4242
}
4343
}

0 commit comments

Comments
 (0)