Skip to content

Commit e3b732e

Browse files
Merge main into feature/build-execute
2 parents 0fb72c0 + 7b5d96c commit e3b732e

File tree

4 files changed

+35
-15
lines changed

4 files changed

+35
-15
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix handling of code review findings so they are properly sent to CodeIssues Panel"
4+
}

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
7777
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_BAR_ACTIONS
7878
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_CHANGE
7979
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_TAB_REMOVE
80-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CODE_REVIEW_FINDINGS_SUFFIX
81-
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DISPLAY_FINDINGS_SUFFIX
8280
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedChatParams
8381
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
8482
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
@@ -595,12 +593,12 @@ class BrowserConnector(
595593
}
596594
chatCommunicationManager.removePartialChatMessage(partialResultToken)
597595
val decryptedMessage = value?.let { encryptionManager?.decrypt(it) }.orEmpty()
598-
parseFindingsMessages(decryptedMessage)
596+
val filteredMessage = parseFindingsMessages(decryptedMessage)
599597

600598
val messageToChat = ChatCommunicationManager.convertToJsonToSendToChat(
601599
SEND_CHAT_COMMAND_PROMPT,
602600
tabId,
603-
decryptedMessage,
601+
filteredMessage,
604602
isPartialResult = false
605603
)
606604
browser.postChat(messageToChat)
@@ -618,13 +616,10 @@ class BrowserConnector(
618616
val additionalMessages = serializer.objectMapper.readValue<FlareAdditionalMessages>(responsePayload).additionalMessages
619617
?: return emptyList()
620618

621-
return additionalMessages.filter { message ->
622-
message.messageId.endsWith(CODE_REVIEW_FINDINGS_SUFFIX) ||
623-
message.messageId.endsWith(DISPLAY_FINDINGS_SUFFIX)
624-
}
619+
return additionalMessages
625620
}
626621

627-
fun parseFindingsMessages(@Language("JSON") responsePayload: String) {
622+
fun parseFindingsMessages(@Language("JSON") responsePayload: String): String {
628623
try {
629624
val findings = deserializeFindings(responsePayload)
630625
val scannedFiles = mutableListOf<VirtualFile>()
@@ -687,9 +682,17 @@ class BrowserConnector(
687682
CodeWhispererConstants.CodeAnalysisScope.AGENTIC
688683
)
689684
CodeWhispererCodeScanManager.getInstance(project).showCodeScanUI()
685+
686+
// Remove findings messages from response payload
687+
val rootNode = serializer.objectMapper.readTree(responsePayload) as ObjectNode
688+
rootNode.remove("additionalMessages")
689+
return serializer.objectMapper.writeValueAsString(rootNode)
690690
}
691+
692+
return responsePayload
691693
} catch (e: Exception) {
692694
LOG.error(e) { "Failed to parse findings message" }
695+
return responsePayload
693696
}
694697
}
695698

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/FlareAdditionalFindings.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import com.fasterxml.jackson.annotation.Nulls
99
import com.fasterxml.jackson.core.JsonParser
1010
import com.fasterxml.jackson.databind.DeserializationContext
1111
import com.fasterxml.jackson.databind.JsonDeserializer
12+
import com.fasterxml.jackson.databind.JsonNode
1213
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
14+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
15+
import com.fasterxml.jackson.module.kotlin.readValue
1316
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.Description
1417
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.Recommendation
1518
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.SuggestedFix
@@ -55,10 +58,17 @@ data class AggregatedCodeScanIssue(
5558
)
5659

5760
class FlareAggregatedFindingsDeserializer : JsonDeserializer<FlareAggregatedFindings>() {
61+
private val objectMapper = jacksonObjectMapper()
62+
5863
override fun deserialize(p: JsonParser, ctxt: DeserializationContext): FlareAggregatedFindings? =
59-
// drop values that do not look like FlareAggregatedFindings
6064
try {
61-
ctxt.readValue(p, FlareAggregatedFindings::class.java)
65+
val node = p.readValueAsTree<JsonNode>()
66+
val messageId = node.get("messageId")?.asText() ?: return null
67+
val bodyNode = node.get("body") ?: return null
68+
69+
val body = objectMapper.readValue<List<AggregatedCodeScanIssue>>(bodyNode.asText())
70+
71+
FlareAggregatedFindings(messageId, body)
6272
} catch (_: Exception) {
6373
null
6474
}

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnectorTest.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class BrowserConnectorTest : AmazonQTestBase() {
9393
"additionalMessages": [
9494
{
9595
"messageId": "test_codeReviewFindings",
96-
"body": [{"filePath": "/test/file.kt", "issues": []}]
96+
"body": "[{\"filePath\": \"/test/file.kt\", \"issues\": []}]"
9797
},
9898
{
9999
"messageId": "other_message",
@@ -121,7 +121,7 @@ class BrowserConnectorTest : AmazonQTestBase() {
121121
"additionalMessages": [
122122
{
123123
"messageId": "test_displayFindings",
124-
"body": [{"filePath": "/test/file.kt", "issues": []}]
124+
"body": "[{\"filePath\": \"/test/file.kt\", \"issues\": []}]"
125125
},
126126
{
127127
"messageId": "other_message",
@@ -179,7 +179,7 @@ class BrowserConnectorTest : AmazonQTestBase() {
179179
"additionalMessages": [
180180
{
181181
"messageId": "test_codeReviewFindings",
182-
"body": ${jacksonObjectMapper().writeValueAsString(listOf(aggregatedIssue))}
182+
"body": "${jacksonObjectMapper().writeValueAsString(listOf(aggregatedIssue)).replace("\"", "\\\"")}"
183183
},
184184
{
185185
"messageId": "other_message",
@@ -228,7 +228,7 @@ class BrowserConnectorTest : AmazonQTestBase() {
228228
"additionalMessages": [
229229
{
230230
"messageId": "test_displayFindings",
231-
"body": ${jacksonObjectMapper().writeValueAsString(listOf(aggregatedIssue))}
231+
"body": "${jacksonObjectMapper().writeValueAsString(listOf(aggregatedIssue)).replace("\"", "\\\"")}"
232232
},
233233
{
234234
"messageId": "other_message",
@@ -256,6 +256,9 @@ class BrowserConnectorTest : AmazonQTestBase() {
256256
{
257257
"messageId": "test_codeReviewFindings",
258258
"body": "invalid json"
259+
},
260+
{
261+
"body": "invalid json"
259262
}
260263
]
261264
}

0 commit comments

Comments
 (0)