Skip to content

feat(amazonq): Add quick actions to Flare chat #5561

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

Merged
merged 20 commits into from
Apr 21, 2025
Merged
Show file tree
Hide file tree
Changes from 16 commits
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
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,10 +28,13 @@
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.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.SendChatPromptRequest
import software.aws.toolkits.jetbrains.services.amazonq.util.command
Expand Down Expand Up @@ -167,32 +171,59 @@
)
)

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 182 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#L181-L182

Added lines #L181 - L182 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 189 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#L189

Added line #L189 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 196 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#L192-L196

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

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#L198

Added line #L198 was not covered by tests
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if we are extracting the encryptionManager, we might as well capture the server instance so that we don't need to fetch it on every invocation

encryptionManager?.encrypt(quickActionParams)?.let {
EncryptedQuickActionChatParams(it, partialResultToken)
}?.let {
server.sendQuickAction(it)
}
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))

Check warning on line 204 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-L204

Added lines #L200 - L204 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 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#L206

Added line #L206 was not covered by tests
}
}
}

private fun showResult(
result: CompletableFuture<String>,
partialResultToken: String,
tabId: String,
encryptionManager: JwtEncryptionManager?,
browser: Browser,
) {
result.whenComplete { value, error ->
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to handle error

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chatCommunicationManager.removePartialChatMessage(partialResultToken)
val messageToChat = ChatCommunicationManager.convertToJsonToSendToChat(
SEND_CHAT_COMMAND_PROMPT,
tabId,

Check warning on line 222 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#L218-L222

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

Check warning on line 224 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#L224

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

Check warning on line 228 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#L226-L228

Added lines #L226 - L228 were not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ 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.credentials.UpdateCredentialsPayload
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
import java.util.concurrent.CompletableFuture
Expand All @@ -33,4 +34,7 @@ interface AmazonQLanguageServer : LanguageServer {

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

@JsonRequest("aws/chat/sendChatQuickAction")
fun sendQuickAction(params: EncryptedQuickActionChatParams): CompletableFuture<String>
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@
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

Check warning

Code scanning / QDJVMC

Unused import directive Warning

Unused import directive
import org.eclipse.lsp4j.jsonrpc.MessageConsumer
import org.eclipse.lsp4j.jsonrpc.messages.Message
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 +53,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 +107,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 112 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#L110-L112

Added lines #L110 - L112 were not covered by tests
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would prefer to have a flag that can be queried by consumers to handle the case where the server exits unexpectedly

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This has been renamed incorrectly. This listens to when we receive an initialize message and is separate from starting servers. Monitoring server state will be executed separately


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

launcher = LSPLauncher.Builder<AmazonQLanguageServer>()
class AmazonQServerBuilder : Builder<AmazonQLanguageServer>() {
private val customMessageTracer = MessageTracer()

Check warning on line 279 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#L278-L279

Added lines #L278 - L279 were not covered by tests

override fun wrapMessageConsumer(consumer: MessageConsumer?): MessageConsumer =
super.wrapMessageConsumer { message ->
customMessageTracer.trace("INCOMING", message)

Check warning on line 283 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-L283

Added lines #L282 - L283 were not covered by tests
if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) {
val result = message.result as AwsExtendedInitializeResult
AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we already expose capabilities on the service

AmazonQLspServer.getInstance(project).capabilities.serverCapabilities

?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Want to keep this in place to be able to access other agents potentially from this map

AmazonQLspService.getInstance(project).notifyServerStarted()

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#L285-L287

Added lines #L285 - L287 were not covered by tests
}
consumer?.consume(message)
customMessageTracer.trace("PROCESSED", message)
}

Check warning on line 291 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-L291

Added lines #L290 - L291 were not covered by tests
}

launcher = AmazonQServerBuilder()

Check warning on line 294 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#L294

Added line #L294 was not covered by tests
.setLocalService(AmazonQLanguageClientImpl(project))
.setRemoteInterface(AmazonQLanguageServer::class.java)
.configureGson {
Expand All @@ -274,6 +300,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 303 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#L303

Added line #L303 was not covered by tests
}.traceMessages(
PrintWriter(
object : StringWriter() {
Expand Down Expand Up @@ -348,7 +375,21 @@
}
}

class MessageTracer {

Check warning on line 378 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#L378

Added line #L378 was not covered by tests

Check warning

Code scanning / QDJVMC

Unused symbol Warning

Class "MessageTracer" is never used
private val traceLogger = LOG.atLevel(if (isDeveloperMode()) Level.INFO else Level.DEBUG)

fun trace(direction: String, message: Message) {

Check warning

Code scanning / QDJVMC

Unused symbol Warning

Function "trace" is never used
traceLogger.log {
buildString {
append("$direction: ")
append(message.toString())
}

Check warning on line 386 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#L382-L386

Added lines #L382 - L386 were not covered by tests
}
}

Check warning on line 388 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#L388

Added line #L388 was not covered by tests
}
companion object {
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

data class

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