Skip to content

Commit 8a93408

Browse files
committed
add to existing textDocumentServiceHandler
1 parent dad393e commit 8a93408

File tree

3 files changed

+64
-94
lines changed

3 files changed

+64
-94
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -780,21 +780,6 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
780780
}
781781
}
782782

783-
private fun buildInlineCompletionParams(requestContext: RequestContext): InlineCompletionWithReferencesParams {
784-
return InlineCompletionWithReferencesParams(
785-
context = InlineCompletionContext(
786-
triggerKind = when (requestContext.triggerTypeInfo.triggerType) {
787-
CodewhispererTriggerType.OnDemand -> InlineCompletionTriggerKind.Invoke
788-
CodewhispererTriggerType.AutoTrigger -> InlineCompletionTriggerKind.Automatic
789-
else -> InlineCompletionTriggerKind.Invoke
790-
}
791-
)
792-
).apply {
793-
textDocument = TextDocumentIdentifier(requestContext.fileContextInfo.filename)
794-
position = Position(requestContext.caretPosition.line, requestContext.caretPosition.column)
795-
}
796-
}
797-
798783
override fun dispose() {}
799784

800785
companion object {

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/codewhisperer/AWSTextDocumentServiceHandler.kt

Lines changed: 0 additions & 78 deletions
This file was deleted.

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

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument
55

6+
import com.intellij.codeInsight.lookup.Lookup
7+
import com.intellij.codeInsight.lookup.LookupEvent
8+
import com.intellij.codeInsight.lookup.LookupListener
9+
import com.intellij.codeInsight.lookup.LookupManagerListener
10+
import com.intellij.codeInsight.lookup.impl.LookupImpl
611
import com.intellij.openapi.Disposable
712
import com.intellij.openapi.editor.Document
13+
import com.intellij.openapi.editor.Editor
814
import com.intellij.openapi.fileEditor.FileDocumentManager
915
import com.intellij.openapi.fileEditor.FileDocumentManagerListener
1016
import com.intellij.openapi.fileEditor.FileEditorManager
@@ -19,11 +25,15 @@ import org.eclipse.lsp4j.DidChangeTextDocumentParams
1925
import org.eclipse.lsp4j.DidCloseTextDocumentParams
2026
import org.eclipse.lsp4j.DidOpenTextDocumentParams
2127
import org.eclipse.lsp4j.DidSaveTextDocumentParams
28+
import org.eclipse.lsp4j.Position
2229
import org.eclipse.lsp4j.TextDocumentContentChangeEvent
2330
import org.eclipse.lsp4j.TextDocumentIdentifier
2431
import org.eclipse.lsp4j.TextDocumentItem
2532
import org.eclipse.lsp4j.VersionedTextDocumentIdentifier
2633
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
34+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionContext
35+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionTriggerKind
36+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.textDocument.InlineCompletionWithReferencesParams
2737
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.FileUriUtil.toUriString
2838
import software.aws.toolkits.jetbrains.utils.pluginAwareExecuteOnPooledThread
2939

@@ -32,7 +42,8 @@ class TextDocumentServiceHandler(
3242
serverInstance: Disposable,
3343
) : FileDocumentManagerListener,
3444
FileEditorManagerListener,
35-
BulkFileListener {
45+
BulkFileListener,
46+
LookupManagerListener {
3647

3748
init {
3849
// didOpen & didClose events
@@ -52,6 +63,58 @@ class TextDocumentServiceHandler(
5263
FileDocumentManagerListener.TOPIC,
5364
this
5465
)
66+
67+
// aws/textDocument/inlineCompletionWithReferences events
68+
project.messageBus.connect(serverInstance).subscribe(
69+
LookupManagerListener.TOPIC,
70+
this
71+
)
72+
}
73+
74+
override fun activeLookupChanged(oldLookup: Lookup?, newLookup: Lookup?) {
75+
if (oldLookup != null || newLookup == null) return
76+
77+
newLookup.addLookupListener(object : LookupListener {
78+
override fun itemSelected(event: LookupEvent) {
79+
val editor = event.lookup.editor
80+
if (!(event.lookup as LookupImpl).isShown) {
81+
cleanup()
82+
return
83+
}
84+
85+
handleInlineCompletion(editor)
86+
cleanup()
87+
}
88+
89+
override fun lookupCanceled(event: LookupEvent) {
90+
cleanup()
91+
}
92+
93+
private fun cleanup() {
94+
newLookup.removeLookupListener(this)
95+
}
96+
})
97+
}
98+
99+
private fun handleInlineCompletion(editor: Editor) {
100+
AmazonQLspService.executeIfRunning(project) { server ->
101+
val params = buildInlineCompletionParams(editor)
102+
server.inlineCompletionWithReferences(params)
103+
}
104+
}
105+
106+
private fun buildInlineCompletionParams(editor: Editor): InlineCompletionWithReferencesParams {
107+
return InlineCompletionWithReferencesParams(
108+
context = InlineCompletionContext(
109+
triggerKind = InlineCompletionTriggerKind.Invoke
110+
)
111+
).apply {
112+
textDocument = TextDocumentIdentifier(toUriString(editor.getVirtualFile()))
113+
position = Position(
114+
editor.caretModel.primaryCaret.visualPosition.line,
115+
editor.caretModel.primaryCaret.offset
116+
)
117+
}
55118
}
56119

57120
override fun beforeDocumentSaving(document: Document) {

0 commit comments

Comments
 (0)