Skip to content

Commit ab9f5bc

Browse files
fix(amazonq): ignore unknown fields in /dev code generation result (#5513)
1 parent 10eb92c commit ab9f5bc

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
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" : "Gracefully handle additional fields in Amazon Q /dev code generation result without throwing errors"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/util/FeatureDevService.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util
55

6+
import com.fasterxml.jackson.databind.DeserializationFeature
67
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
78
import com.fasterxml.jackson.module.kotlin.readValue
89
import com.intellij.openapi.project.Project
@@ -37,6 +38,9 @@ import software.aws.toolkits.telemetry.Result
3738
private val logger = getLogger<FeatureDevClient>()
3839

3940
class FeatureDevService(val proxyClient: FeatureDevClient, val project: Project) {
41+
private val objectMapper = jacksonObjectMapper()
42+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
43+
4044
fun createConversation(): String {
4145
val startTime = System.currentTimeMillis()
4246
var failureReason: String? = null
@@ -238,7 +242,7 @@ class FeatureDevService(val proxyClient: FeatureDevClient, val project: Project)
238242
val parsedResult: ExportTaskAssistResultArchiveStreamResult
239243
try {
240244
val result = exportResponse.reduce { acc, next -> acc + next } // To map the result it is needed to combine the full byte array
241-
parsedResult = jacksonObjectMapper().readValue(result)
245+
parsedResult = objectMapper.readValue(result)
242246
} catch (e: Exception) {
243247
logger.error(e) { "Failed to parse downloaded code results" }
244248
throw ExportParseException(operation = FeatureDevOperation.ExportTaskAssistArchiveResult.toString(), desc = null, e.cause)

plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/util/FeatureDevServiceTest.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,23 @@ class FeatureDevServiceTest : FeatureDevTestBase() {
351351
}.isExactlyInstanceOf(ExportParseException::class.java)
352352
}
353353

354+
@Test
355+
fun `test exportTaskAssistArchiveResult ignore extra fields in the response`() {
356+
runTest {
357+
val codeGenerationJson = "{" +
358+
"\"code_generation_result\":{\"new_file_contents\":{\"test.ts\":\"contents\"},\"deleted_files\":[],\"references\":[],\"extra_filed\":[]}" +
359+
"}"
360+
361+
whenever(featureDevClient.exportTaskAssistResultArchive(testConversationId)).thenReturn(mutableListOf(codeGenerationJson.toByteArray()))
362+
363+
val actual = featureDevService.exportTaskAssistArchiveResult(testConversationId)
364+
assertThat(actual).isInstanceOf(CodeGenerationStreamResult::class.java)
365+
assertThat(actual.new_file_contents).isEqualTo(mapOf(Pair("test.ts", "contents")))
366+
assertThat(actual.deleted_files).isEqualTo(emptyList<String>())
367+
assertThat(actual.references).isEqualTo(emptyList<CodeReferenceGenerated>())
368+
}
369+
}
370+
354371
@Test
355372
fun `test exportTaskAssistArchiveResult returns correct parsed result`() =
356373
runTest {

0 commit comments

Comments
 (0)