Skip to content

Commit 6b44b2e

Browse files
Merge main into feature/bid-paid
2 parents e6a33d3 + 9df2368 commit 6b44b2e

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/textdocument/TextDocumentServiceHandler.kt

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManagerListener
1313
import com.intellij.openapi.fileEditor.FileEditorManager
1414
import com.intellij.openapi.fileEditor.FileEditorManagerListener
1515
import com.intellij.openapi.project.Project
16+
import com.intellij.openapi.util.Key
1617
import com.intellij.openapi.vfs.VirtualFile
1718
import com.intellij.openapi.vfs.VirtualFileManager
1819
import com.intellij.openapi.vfs.newvfs.BulkFileListener
@@ -22,8 +23,6 @@ import org.eclipse.lsp4j.DidChangeTextDocumentParams
2223
import org.eclipse.lsp4j.DidCloseTextDocumentParams
2324
import org.eclipse.lsp4j.DidOpenTextDocumentParams
2425
import org.eclipse.lsp4j.DidSaveTextDocumentParams
25-
import org.eclipse.lsp4j.Position
26-
import org.eclipse.lsp4j.Range
2726
import org.eclipse.lsp4j.TextDocumentContentChangeEvent
2827
import org.eclipse.lsp4j.TextDocumentIdentifier
2928
import org.eclipse.lsp4j.TextDocumentItem
@@ -66,15 +65,16 @@ class TextDocumentServiceHandler(
6665
}
6766

6867
private fun handleFileOpened(file: VirtualFile) {
69-
ApplicationManager.getApplication().runReadAction {
70-
FileDocumentManager.getInstance().getDocument(file)?.addDocumentListener(
71-
object : DocumentListener {
72-
override fun documentChanged(event: DocumentEvent) {
73-
realTimeEdit(event)
74-
}
75-
},
76-
this
77-
)
68+
if (file.getUserData(KEY_REAL_TIME_EDIT_LISTENER) == null) {
69+
val listener = object : DocumentListener {
70+
override fun documentChanged(event: DocumentEvent) {
71+
realTimeEdit(event)
72+
}
73+
}
74+
file.putUserData(KEY_REAL_TIME_EDIT_LISTENER, listener)
75+
ApplicationManager.getApplication().runReadAction {
76+
FileDocumentManager.getInstance().getDocument(file)?.addDocumentListener(listener, this)
77+
}
7878
}
7979
AmazonQLspService.executeIfRunning(project) { languageServer ->
8080
toUriString(file)?.let { uri ->
@@ -148,6 +148,11 @@ class TextDocumentServiceHandler(
148148
source: FileEditorManager,
149149
file: VirtualFile,
150150
) {
151+
val listener = file.getUserData(KEY_REAL_TIME_EDIT_LISTENER)
152+
if (listener != null) {
153+
FileDocumentManager.getInstance().getDocument(file)?.removeDocumentListener(listener)
154+
file.putUserData(KEY_REAL_TIME_EDIT_LISTENER, null)
155+
}
151156
AmazonQLspService.executeIfRunning(project) { languageServer ->
152157
toUriString(file)?.let { uri ->
153158
languageServer.textDocumentService.didClose(
@@ -166,9 +171,6 @@ class TextDocumentServiceHandler(
166171
pluginAwareExecuteOnPooledThread {
167172
val vFile = FileDocumentManager.getInstance().getFile(event.document) ?: return@pluginAwareExecuteOnPooledThread
168173
toUriString(vFile)?.let { uri ->
169-
val editor = FileEditorManager.getInstance(project).selectedTextEditor ?: return@pluginAwareExecuteOnPooledThread
170-
val logicalPosition = editor.offsetToLogicalPosition(event.offset)
171-
val newLogicalPosition = editor.offsetToLogicalPosition(event.offset + event.newLength)
172174
languageServer.textDocumentService.didChange(
173175
DidChangeTextDocumentParams().apply {
174176
textDocument = VersionedTextDocumentIdentifier().apply {
@@ -177,11 +179,7 @@ class TextDocumentServiceHandler(
177179
}
178180
contentChanges = listOf(
179181
TextDocumentContentChangeEvent().apply {
180-
text = event.newFragment.toString()
181-
range = Range(
182-
Position(logicalPosition.line, logicalPosition.column),
183-
Position(newLogicalPosition.line, newLogicalPosition.column)
184-
)
182+
text = event.document.text
185183
}
186184
)
187185
}
@@ -194,4 +192,8 @@ class TextDocumentServiceHandler(
194192

195193
override fun dispose() {
196194
}
195+
196+
companion object {
197+
private val KEY_REAL_TIME_EDIT_LISTENER = Key.create<DocumentListener>("amazonq.textdocument.realtimeedit.listener")
198+
}
197199
}

0 commit comments

Comments
 (0)