Skip to content

Commit 3f9925f

Browse files
committed
feat: Improve code completion and thread safety
- Add null check for editor project in documentChanged - Refactor debounce logic for better readability - Implement thread-safe access to editor offset
1 parent e03f017 commit 3f9925f

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/main/kotlin/ai/devchat/plugin/completion/editor/EditorListener.kt

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,19 @@ class EditorListener : EditorFactoryListener {
5858

5959
val documentListener = object : DocumentListener {
6060
override fun documentChanged(event: DocumentEvent) {
61-
logger.info("DocumentListener: documentChanged $event")
61+
logger.info("DocumentListener: documentChanged $event, Editor project: ${editor.project}")
62+
if (editor.project != null) {
63+
logger.info("DocumentListener: documentChanged $event")
6264

63-
debouncer.debounce {
64-
ApplicationManager.getApplication().invokeLater({
65-
processDocumentChange(event, editor, editorManager, completionProvider, inlineCompletionService)
66-
}, ModalityState.defaultModalityState())
65+
debouncer.debounce {
66+
processDocumentChange(
67+
event,
68+
editor,
69+
editorManager,
70+
completionProvider,
71+
inlineCompletionService
72+
)
73+
}
6774
}
6875
}
6976
}
@@ -110,17 +117,22 @@ class EditorListener : EditorFactoryListener {
110117
}
111118
}
112119

120+
var editorOffset: Int = 0
121+
ApplicationManager.getApplication().invokeAndWait({
122+
editorOffset = editor.caretModel.primaryCaret.offset
123+
}, ModalityState.defaultModalityState())
124+
113125
completionProvider.ongoingCompletion.value?.let {
114-
if (it.editor == editor && it.offset == editor.caretModel.primaryCaret.offset) {
126+
if (it.editor == editor && it.offset == editorOffset) {
115127
logger.info("Keeping ongoing completion.")
116128
} else {
117129
logger.info("Cancelling previous completion and providing new one.")
118130
completionProvider.clear()
119-
completionProvider.provideCompletion(editor, editor.caretModel.primaryCaret.offset)
131+
completionProvider.provideCompletion(editor, editorOffset)
120132
}
121133
} ?: run {
122134
logger.info("Providing new completion.")
123-
completionProvider.provideCompletion(editor, editor.caretModel.primaryCaret.offset)
135+
completionProvider.provideCompletion(editor, editorOffset)
124136
}
125137
} else {
126138
logger.debug("Completion is disabled.")

0 commit comments

Comments
 (0)