Skip to content

feat(amazonq): client emits endChat when conversation ended #5572

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 23 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
fe7738d
Set up Flare chat connection
manodnyab Apr 9, 2025
c09368c
Merge branch 'feature/q-lsp' into manodnyb/setupChatComponentsWithFlare
manodnyab Apr 9, 2025
9d037cf
Partial chat results
manodnyab Apr 9, 2025
e259071
Merge remote-tracking branch 'origin/manodnyb/setupChatComponentsWith…
manodnyab Apr 9, 2025
6348f5e
add endChat message
samgst-amazon Apr 10, 2025
bc6823b
feedback
manodnyab Apr 10, 2025
b833b6c
resolved merge conflict
manodnyab Apr 10, 2025
fb9fd25
detekt
manodnyab Apr 10, 2025
46b9a82
Merge branch 'feature/q-lsp-chat' into manodnyb/setupChatComponentsWi…
manodnyab Apr 10, 2025
06dc03d
syntax error
manodnyab Apr 10, 2025
0f16cd4
Merge remote-tracking branch 'origin/manodnyb/setupChatComponentsWith…
manodnyab Apr 11, 2025
21e4885
detekt
manodnyab Apr 11, 2025
06e0966
detekt
manodnyab Apr 11, 2025
8640432
Add quick actions to chat
manodnyab Apr 11, 2025
ebba74e
Merge branch 'feature/q-lsp-chat' into manodnyb/setupChatComponentsWi…
manodnyab Apr 11, 2025
57600f5
Merge branch 'feature/q-lsp-chat' into manodnyb/setupChatComponentsWi…
manodnyab Apr 11, 2025
ad5586d
Merge branch 'manodnyb/setupChatComponentsWithFlare' into samgst/q-ls…
samgst-amazon Apr 11, 2025
ec564bf
end chat command added
samgst-amazon Apr 11, 2025
930fff6
merge conflicts resolved
manodnyab Apr 14, 2025
28a199e
adding commands from initialize result
manodnyab Apr 14, 2025
d1bf37d
Merge remote-tracking branch 'refs/remotes/origin/manodnyb/addQuickAc…
samgst-amazon Apr 14, 2025
c935171
remove tabID from ChatCommunicationManager
samgst-amazon Apr 14, 2025
be69851
detekt
samgst-amazon Apr 14, 2025
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
Expand Up @@ -7,6 +7,7 @@
import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.ui.components.JBLoadingPanel
import com.intellij.ui.components.JBPanelWithEmptyText
Expand All @@ -24,7 +25,7 @@
import java.util.concurrent.CompletableFuture
import javax.swing.JButton

class AmazonQPanel(private val parent: Disposable) {
class AmazonQPanel(private val parent: Disposable, val project: Project) {

Check warning on line 28 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt#L28

Added line #L28 was not covered by tests
private val webviewContainer = Wrapper()
val browser = CompletableFuture<Browser>()

Expand Down Expand Up @@ -91,7 +92,7 @@
loadingPanel.stopLoading()
runInEdt {
browser.complete(
Browser(parent, webUri).also {
Browser(parent, webUri, project).also {

Check warning on line 95 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt#L95

Added line #L95 was not covered by tests
wrapper.setContent(it.component())
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
private val browserConnector = BrowserConnector(project = project)
private val editorThemeAdapter = EditorThemeAdapter()

private val chatPanel = AmazonQPanel(parent = this)
private val chatPanel = AmazonQPanel(parent = this, project)

Check warning on line 52 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L52

Added line #L52 was not covered by tests

val component: JComponent = chatPanel.component

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.intellij.openapi.Disposable
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.ui.jcef.JBCefJSQuery
import org.cef.CefApp
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
Expand All @@ -17,7 +20,8 @@
/*
Displays the web view for the Amazon Q tool window
*/
class Browser(parent: Disposable, private val webUri: URI) : Disposable {

class Browser(parent: Disposable, private val webUri: URI, val project: Project) : Disposable {

Check warning on line 24 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L24

Added line #L24 was not covered by tests

val jcefBrowser = createBrowser(parent)

Expand All @@ -39,8 +43,17 @@
"mynah",
AssetResourceHandler.AssetResourceHandlerFactory(),
)

loadWebView(isCodeTransformAvailable, isFeatureDevAvailable, isDocAvailable, isCodeScanAvailable, isCodeTestAvailable, highlightCommand, activeProfile)
AmazonQLspService.getInstance(project).addServerStartedListener {
loadWebView(
isCodeTransformAvailable,
isFeatureDevAvailable,
isDocAvailable,
isCodeScanAvailable,
isCodeTestAvailable,
highlightCommand,
activeProfile

Check warning on line 54 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L46-L54

Added lines #L46 - L54 were not covered by tests
)
}

Check warning on line 56 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L56

Added line #L56 was not covered by tests
}

override fun dispose() {
Expand Down Expand Up @@ -101,6 +114,7 @@
highlightCommand: HighlightCommand?,
activeProfile: QRegionProfile?,
): String {
val quickActionConfig = generateQuickActionConfig()

Check warning on line 117 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L117

Added line #L117 was not covered by tests
val postMessageToJavaJsCode = receiveMessageQuery.inject("JSON.stringify(message)")
val jsScripts = """
<script type="text/javascript" src="$webUri" defer onload="init()"></script>
Expand All @@ -113,7 +127,7 @@
}
},
{
quickActionCommands: [],
quickActionCommands: $quickActionConfig,

Check warning on line 130 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L130

Added line #L130 was not covered by tests
disclaimerAcknowledged: ${MeetQSettings.getInstance().disclaimerAcknowledged}
}
);
Expand Down Expand Up @@ -220,6 +234,10 @@
activeProfile
}

private fun generateQuickActionConfig() = AwsServerCapabilitiesProvider.getInstance(project).getChatOptions().quickActions.quickActionsCommandGroups
.let { OBJECT_MAPPER.writeValueAsString(it) }
?: "[]"

Check warning on line 239 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt#L238-L239

Added lines #L238 - L239 were not covered by tests

companion object {
private const val MAX_ONBOARDING_PAGE_COUNT = 3
private val OBJECT_MAPPER = jacksonObjectMapper()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.future.await

Check warning on line 20 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused import directive

Unused import directive

Check warning

Code scanning / QDJVMC

Unused import directive Warning

Unused import directive
import kotlinx.coroutines.launch
import org.cef.browser.CefBrowser
import org.eclipse.lsp4j.Position
Expand All @@ -27,11 +28,16 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.ChatCommunicationManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.getTextDocumentIdentifier
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_QUICK_ACTION
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CursorState
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EndChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.QuickChatActionRequest
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_END_CHAT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendChatPromptRequest
import software.aws.toolkits.jetbrains.services.amazonq.util.command
import software.aws.toolkits.jetbrains.services.amazonq.util.tabType
Expand Down Expand Up @@ -167,32 +173,69 @@
)
)

val partialResultToken = chatCommunicationManager.addPartialChatMessage(requestFromUi.params.tabId)
val chatParams = ChatParams(
requestFromUi.params.tabId,
chatPrompt,
textDocumentIdentifier,
cursorState
)

val tabId = requestFromUi.params.tabId
val partialResultToken = chatCommunicationManager.addPartialChatMessage(tabId)

Check warning on line 184 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L183-L184

Added lines #L183 - L184 were not covered by tests

var encryptionManager: JwtEncryptionManager? = null
val result = AmazonQLspService.executeIfRunning(project) { server ->
encryptionManager = this.encryptionManager
encryptionManager?.encrypt(chatParams)?.let { EncryptedChatParams(it, partialResultToken) }?.let { server.sendChatPrompt(it) }
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))
showResult(result, partialResultToken, tabId, encryptionManager, browser)

Check warning on line 191 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L191

Added line #L191 was not covered by tests
}
CHAT_QUICK_ACTION -> {
val requestFromUi = serializer.deserializeChatMessages(node, QuickChatActionRequest::class.java)
val tabId = requestFromUi.params.tabId
val quickActionParams = requestFromUi.params
val partialResultToken = chatCommunicationManager.addPartialChatMessage(tabId)
var encryptionManager: JwtEncryptionManager? = null

Check warning on line 198 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L194-L198

Added lines #L194 - L198 were not covered by tests
val result = AmazonQLspService.executeIfRunning(project) { server ->
encryptionManager = this.encryptionManager

Check warning on line 200 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L200

Added line #L200 was not covered by tests
encryptionManager?.encrypt(quickActionParams)?.let {
EncryptedQuickActionChatParams(it, partialResultToken)
}?.let {
server.sendQuickAction(it)
}
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))

Check warning on line 206 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L202-L206

Added lines #L202 - L206 were not covered by tests

result.whenComplete {
value, error ->
chatCommunicationManager.removePartialChatMessage(partialResultToken)
val messageToChat = ChatCommunicationManager.convertToJsonToSendToChat(
node.command,
requestFromUi.params.tabId,
encryptionManager?.decrypt(value).orEmpty(),
isPartialResult = false
)
browser.postChat(messageToChat)
showResult(result, partialResultToken, tabId, encryptionManager, browser)

Check warning on line 208 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L208

Added line #L208 was not covered by tests
}
SEND_END_CHAT -> {
val requestFromUi = serializer.deserializeChatMessages(node, EndChatParams::class.java)
val endChatParams = EndChatParams(requestFromUi.tabId)

Check warning on line 212 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L211-L212

Added lines #L211 - L212 were not covered by tests
val result = AmazonQLspService.executeIfRunning(project) { server ->
server.endChat(endChatParams)
} ?: CompletableFuture.failedFuture(IllegalStateException("LSP Server not running"))
result.whenComplete { value, error ->
chatCommunicationManager.removePartialChatMessage(requestFromUi.tabId)

Check warning on line 217 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L214-L217

Added lines #L214 - L217 were not covered by tests
}
}
}
}

private fun showResult(
result: CompletableFuture<String>,
partialResultToken: String,
tabId: String,
encryptionManager: JwtEncryptionManager?,
browser: Browser,
) {
result.whenComplete { value, error ->
chatCommunicationManager.removePartialChatMessage(partialResultToken)
val messageToChat = ChatCommunicationManager.convertToJsonToSendToChat(
SEND_CHAT_COMMAND_PROMPT,
tabId,

Check warning on line 234 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L230-L234

Added lines #L230 - L234 were not covered by tests
encryptionManager?.decrypt(value).orEmpty(),
isPartialResult = false

Check warning on line 236 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L236

Added line #L236 was not covered by tests
)
browser.postChat(messageToChat)
}
}

Check warning on line 240 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt#L238-L240

Added lines #L238 - L240 were not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import org.eclipse.lsp4j.services.LanguageServer
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.GetConfigurationFromServerParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EndChatParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture
Expand All @@ -33,4 +35,10 @@ interface AmazonQLanguageServer : LanguageServer {

@JsonRequest("aws/chat/sendChatPrompt")
fun sendChatPrompt(params: EncryptedChatParams): CompletableFuture<String>

@JsonRequest("aws/chat/sendChatQuickAction")
fun sendQuickAction(params: EncryptedQuickActionChatParams): CompletableFuture<String>

@JsonRequest("aws/chat/endChat")
fun endChat(params: EndChatParams): CompletableFuture<Boolean>
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@
import org.eclipse.lsp4j.TextDocumentClientCapabilities
import org.eclipse.lsp4j.WorkspaceClientCapabilities
import org.eclipse.lsp4j.jsonrpc.Launcher
import org.eclipse.lsp4j.launch.LSPLauncher
import org.eclipse.lsp4j.jsonrpc.Launcher.Builder
import org.eclipse.lsp4j.jsonrpc.MessageConsumer
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
import org.slf4j.event.Level
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.info
Expand All @@ -50,6 +52,9 @@
import software.aws.toolkits.jetbrains.services.amazonq.lsp.auth.DefaultAuthCredentialsService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.dependencies.DefaultModuleDependenciesService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.encryption.JwtEncryptionManager
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AmazonQLspTypeAdapterFactory
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsExtendedInitializeResult
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AwsServerCapabilitiesProvider
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.createExtendedClientMetadata
import software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument.TextDocumentServiceHandler
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.WorkspaceFolderUtil.createWorkspaceFolders
Expand Down Expand Up @@ -101,6 +106,10 @@

@Service(Service.Level.PROJECT)
class AmazonQLspService(private val project: Project, private val cs: CoroutineScope) : Disposable {
private val serverStartedListener = mutableListOf<AmazonQServerStartedListener>()
fun addServerStartedListener(listener: AmazonQServerStartedListener) = serverStartedListener.add(listener)
fun notifyServerStarted() = serverStartedListener.forEach { it() }

Check warning on line 111 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L109-L111

Added lines #L109 - L111 were not covered by tests

private var instance: Deferred<AmazonQServerInstance>
val capabilities
get() = instance.getCompleted().initializeResult.getCompleted().capabilities
Expand Down Expand Up @@ -265,7 +274,20 @@
launcherHandler.addProcessListener(inputWrapper)
launcherHandler.startNotify()

launcher = LSPLauncher.Builder<AmazonQLanguageServer>()
class AmazonQServerBuilder : Builder<AmazonQLanguageServer>() {

Check warning on line 277 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L277

Added line #L277 was not covered by tests

override fun wrapMessageConsumer(consumer: MessageConsumer?): MessageConsumer =
super.wrapMessageConsumer { message ->

Check warning on line 280 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L280

Added line #L280 was not covered by tests
if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) {
val result = message.result as AwsExtendedInitializeResult
AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities())
AmazonQLspService.getInstance(project).notifyServerStarted()

Check warning on line 284 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L282-L284

Added lines #L282 - L284 were not covered by tests
}
consumer?.consume(message)
}

Check warning on line 287 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L287

Added line #L287 was not covered by tests
}

launcher = AmazonQServerBuilder()

Check warning on line 290 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L290

Added line #L290 was not covered by tests
.setLocalService(AmazonQLanguageClientImpl(project))
.setRemoteInterface(AmazonQLanguageServer::class.java)
.configureGson {
Expand All @@ -274,6 +296,7 @@

// otherwise Gson treats all numbers as double which causes deser issues
it.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
it.registerTypeAdapterFactory(AmazonQLspTypeAdapterFactory())

Check warning on line 299 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt#L299

Added line #L299 was not covered by tests
}.traceMessages(
PrintWriter(
object : StringWriter() {
Expand Down Expand Up @@ -352,3 +375,5 @@
private val LOG = getLogger<AmazonQServerInstance>()
}
}

typealias AmazonQServerStartedListener = () -> Unit
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
@file:Suppress("BannedImports")
package software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat

import com.google.gson.Gson
import com.google.gson.TypeAdapter
import com.google.gson.TypeAdapterFactory
import com.google.gson.stream.JsonReader
import com.google.gson.stream.JsonWriter
import org.eclipse.lsp4j.InitializeResult
import java.io.IOException

class AmazonQLspTypeAdapterFactory : TypeAdapterFactory {

Check warning on line 14 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L14

Added line #L14 was not covered by tests
override fun <T : Any?> create(gson: Gson, type: com.google.gson.reflect.TypeToken<T>): TypeAdapter<T>? {
if (type.rawType === InitializeResult::class.java) {
val delegate: TypeAdapter<InitializeResult?> = gson.getDelegateAdapter(this, type) as TypeAdapter<InitializeResult?>

Check warning on line 17 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L17

Added line #L17 was not covered by tests

return object : TypeAdapter<InitializeResult>() {

Check warning on line 19 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L19

Added line #L19 was not covered by tests
@Throws(IOException::class)
override fun write(out: JsonWriter?, value: InitializeResult?) {
delegate.write(out, value)
}

Check warning on line 23 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L22-L23

Added lines #L22 - L23 were not covered by tests

@Throws(IOException::class)
override fun read(`in`: JsonReader?): InitializeResult =
gson.fromJson(`in`, AwsExtendedInitializeResult::class.java)

Check warning on line 27 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L27

Added line #L27 was not covered by tests
} as TypeAdapter<T>
}
return null

Check warning on line 30 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L30

Added line #L30 was not covered by tests
}
}

class AwsExtendedInitializeResult : InitializeResult() {

Check warning on line 34 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L34

Added line #L34 was not covered by tests
private var awsServerCapabilities: AwsServerCapabilities? = null

fun getAwsServerCapabilities(): AwsServerCapabilities? = awsServerCapabilities

Check warning on line 37 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L37

Added line #L37 was not covered by tests

fun setAwsServerCapabilities(awsServerCapabilities: AwsServerCapabilities?) {

Check warning on line 39 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unused symbol

Function "setAwsServerCapabilities" is never used

Check warning

Code scanning / QDJVMC

Unused symbol Warning

Function "setAwsServerCapabilities" is never used
this.awsServerCapabilities = awsServerCapabilities
}

Check warning on line 41 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AmazonQLspTypeAdapterFactory.kt#L40-L41

Added lines #L40 - L41 were not covered by tests
}
Loading
Loading