Skip to content

Commit fcd1090

Browse files
authored
Merge branch 'main' into fixGrant
2 parents 9ce9778 + 4ca3c89 commit fcd1090

File tree

5 files changed

+35
-2
lines changed

5 files changed

+35
-2
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+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "/review: set programmingLanguage to Plaintext if language is unknown"
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 {

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,11 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
264264
return clientAdaptor.createCodeScan(
265265
StartCodeAnalysisRequest.builder()
266266
.clientToken(clientToken.toString())
267-
.programmingLanguage { it.languageName(language) }
267+
.programmingLanguage {
268+
it.languageName(
269+
if (language == CodewhispererLanguage.Unknown.toString()) CodewhispererLanguage.Plaintext.toString() else language
270+
)
271+
}
268272
.artifacts(artifactsMap)
269273
.scope(scope.value)
270274
.codeScanName(codeScanName)

0 commit comments

Comments
 (0)