Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "Fix 'Slow operations are prohibited on EDT.' when Amazon Q is determining if a file supports inline suggestions (#4823)"
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import com.intellij.openapi.editor.event.DocumentEvent
import com.intellij.openapi.editor.event.EditorFactoryEvent
import com.intellij.openapi.editor.event.EditorFactoryListener
import com.intellij.openapi.editor.impl.EditorImpl
import com.intellij.psi.PsiDocumentManager
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhispererEnabled
import software.aws.toolkits.jetbrains.services.codewhisperer.language.programmingLanguage
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererInvocationStatus
Expand All @@ -17,27 +16,26 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhis
class CodeWhispererEditorListener : EditorFactoryListener {
override fun editorCreated(event: EditorFactoryEvent) {
val editor = (event.editor as? EditorImpl) ?: return
editor.project?.let { project ->
PsiDocumentManager.getInstance(project).getPsiFile(editor.document)?.programmingLanguage() ?. let { language ->
// If language is not supported by CodeWhisperer, no action needed
if (!language.isCodeCompletionSupported()) return
// If language is supported, install document listener for CodeWhisperer service
editor.document.addDocumentListener(
object : BulkAwareDocumentListener {
// TODO: Track only deletion changes within the current 5-min interval which will give
// the most accurate code percentage data.
override fun documentChanged(event: DocumentEvent) {
if (!isCodeWhispererEnabled(project)) return
CodeWhispererInvocationStatus.getInstance().documentChanged()
CodeWhispererCodeCoverageTracker.getInstance(project, language).apply {
activateTrackerIfNotActive()
documentChanged(event)
}
}
},
editor.disposable
)
}
}
val project = editor.project ?: return

val language = editor.virtualFile.programmingLanguage()
// If language is not supported by CodeWhisperer, no action needed
if (!language.isCodeCompletionSupported()) return
// If language is supported, install document listener for CodeWhisperer service
editor.document.addDocumentListener(
object : BulkAwareDocumentListener {
// TODO: Track only deletion changes within the current 5-min interval which will give
// the most accurate code percentage data.
override fun documentChanged(event: DocumentEvent) {
if (!isCodeWhispererEnabled(project)) return
CodeWhispererInvocationStatus.getInstance().documentChanged()
CodeWhispererCodeCoverageTracker.getInstance(project, language).apply {
activateTrackerIfNotActive()
documentChanged(event)
}
}
},
editor.disposable
)
}
}
Loading