Skip to content

Commit b8531b7

Browse files
authored
Fixed feature dev code generated code parsing to handle references (#4414)
* Fixed feature dev code generated code parsing to handle references * added changelog * addressed comments
1 parent 38bd73d commit b8531b7

File tree

14 files changed

+49
-33
lines changed

14 files changed

+49
-33
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" : "Amazon Q Feature Development: Handle generated code parsing for rendering references correctly"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendM
5454
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendSystemPrompt
5555
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendUpdatePlaceholder
5656
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.updateFileComponent
57+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.CodeReferenceGenerated
5758
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.DeletedFileInfo
5859
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.NewFileZipInfo
5960
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.PrepareCodeGenerationState
6061
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.Session
6162
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.SessionStatePhase
6263
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.storage.ChatSessionStorage
6364
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.getFollowUpOptions
64-
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
6565
import software.aws.toolkits.jetbrains.ui.feedback.FeatureDevFeedbackDialog
6666
import software.aws.toolkits.resources.message
6767
import software.aws.toolkits.telemetry.AmazonqTelemetry
@@ -279,7 +279,7 @@ class FeatureDevController(
279279

280280
var filePaths: List<NewFileZipInfo> = emptyList()
281281
var deletedFiles: List<DeletedFileInfo> = emptyList()
282-
var references: List<CodeReference> = emptyList()
282+
var references: List<CodeReferenceGenerated> = emptyList()
283283

284284
when (val state = session.sessionState) {
285285
is PrepareCodeGenerationState -> {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevControllerExtensions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendC
1414
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendCodeResult
1515
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendSystemPrompt
1616
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendUpdatePlaceholder
17+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.CodeReferenceGenerated
1718
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.DeletedFileInfo
1819
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.NewFileZipInfo
1920
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.PrepareCodeGenerationState
2021
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.Session
2122
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.getFollowUpOptions
22-
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
2323
import software.aws.toolkits.jetbrains.utils.notifyInfo
2424
import software.aws.toolkits.resources.message
2525

@@ -45,7 +45,7 @@ suspend fun FeatureDevController.onCodeGeneration(session: Session, message: Str
4545

4646
var filePaths: List<NewFileZipInfo> = emptyList()
4747
var deletedFiles: List<DeletedFileInfo> = emptyList()
48-
var references: List<CodeReference> = emptyList()
48+
var references: List<CodeReferenceGenerated> = emptyList()
4949
var uploadId = ""
5050

5151
when (state) {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ data class CodeResultMessage(
182182
val conversationId: String,
183183
val filePaths: List<NewFileZipInfo>,
184184
val deletedFiles: List<DeletedFileInfo>,
185-
val references: List<ReducedCodeReference>
185+
val references: List<CodeReference>
186186
) : UiMessage(
187187
tabId = tabId,
188188
type = "codeResultMessage"

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessagePublisherExtensions.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages
55

66
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthNeededState
77
import software.aws.toolkits.jetbrains.services.amazonq.messages.MessagePublisher
8+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.CodeReferenceGenerated
89
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.DeletedFileInfo
910
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.NewFileZipInfo
1011
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.SessionStatePhase
11-
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.licenseText
1212
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
13+
import software.aws.toolkits.jetbrains.services.cwc.messages.RecommendationContentSpan
1314
import software.aws.toolkits.resources.message
1415
import java.util.UUID
1516

@@ -191,11 +192,19 @@ suspend fun MessagePublisher.sendCodeResult(
191192
uploadId: String,
192193
filePaths: List<NewFileZipInfo>,
193194
deletedFiles: List<DeletedFileInfo>,
194-
references: List<CodeReference>
195+
references: List<CodeReferenceGenerated>
195196
) {
196-
// It is being done this mapping as featureDev currently doesn't support fully references.
197-
val refs = references.filter { it.licenseName != null && it.url != null && it.repository != null }.map {
198-
ReducedCodeReference(information = it.licenseText())
197+
val refs = references.map { ref ->
198+
CodeReference(
199+
licenseName = ref.licenseName,
200+
repository = ref.repository,
201+
url = ref.url,
202+
recommendationContentSpan = RecommendationContentSpan(
203+
ref.recommendationContentSpan?.start ?: 0,
204+
ref.recommendationContentSpan?.end ?: 0,
205+
),
206+
information = "Reference code under **${ref.licenseName}** license from repository [${ref.repository}](${ref.url})"
207+
)
199208
}
200209

201210
this.publish(

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/PrepareCodeGenerationState.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.messages.sendA
88
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.createUploadUrl
99
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.deleteUploadArtifact
1010
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.uploadArtifactToS3
11-
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
1211
import software.aws.toolkits.resources.message
1312
import software.aws.toolkits.telemetry.AmazonqTelemetry
1413
import software.aws.toolkits.telemetry.AmazonqUploadIntent
@@ -19,7 +18,7 @@ class PrepareCodeGenerationState(
1918
private var config: SessionStateConfig,
2019
val filePaths: List<NewFileZipInfo>,
2120
val deletedFiles: List<DeletedFileInfo>,
22-
val references: List<CodeReference>,
21+
val references: List<CodeReferenceGenerated>,
2322
var uploadId: String,
2423
private val currentIteration: Int,
2524
private var messenger: MessagePublisher

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/Session.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.createCon
1616
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.resolveAndCreateOrUpdateFile
1717
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.resolveAndDeleteFile
1818
import software.aws.toolkits.jetbrains.services.cwc.controller.ReferenceLogController
19-
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
2019
import software.aws.toolkits.telemetry.AmazonqTelemetry
2120

2221
class Session(val tabID: String, val project: Project) {
@@ -93,7 +92,7 @@ class Session(val tabID: String, val project: Project) {
9392
/**
9493
* Triggered by the Insert code follow-up button to apply code changes.
9594
*/
96-
fun insertChanges(filePaths: List<NewFileZipInfo>, deletedFiles: List<DeletedFileInfo>, references: List<CodeReference>) {
95+
fun insertChanges(filePaths: List<NewFileZipInfo>, deletedFiles: List<DeletedFileInfo>, references: List<CodeReferenceGenerated>) {
9796
val projectRootPath = context.projectRoot.toNioPath()
9897

9998
filePaths.forEach { resolveAndCreateOrUpdateFile(projectRootPath, it.zipFilePath, it.fileContent) }

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/SessionStateTypes.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
66
import com.fasterxml.jackson.annotation.JsonValue
77
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
88
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.clients.FeatureDevClient
9-
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
9+
import software.aws.toolkits.jetbrains.services.cwc.messages.RecommendationContentSpan
1010

1111
data class SessionStateAction(
1212
val task: String,
@@ -51,14 +51,21 @@ data class DeletedFileInfo(
5151
data class CodeGenerationResult(
5252
var newFiles: List<NewFileZipInfo>,
5353
var deletedFiles: List<DeletedFileInfo>,
54-
var references: List<CodeReference>,
54+
var references: List<CodeReferenceGenerated>,
55+
)
56+
57+
data class CodeReferenceGenerated(
58+
val licenseName: String? = null,
59+
val repository: String? = null,
60+
val url: String? = null,
61+
val recommendationContentSpan: RecommendationContentSpan? = null,
5562
)
5663

5764
@Suppress("ConstructorParameterNaming") // Unfortunately, this is exactly how the string json is received and is needed for parsing.
5865
data class CodeGenerationStreamResult(
5966
var new_file_contents: Map<String, String>,
6067
var deleted_files: List<String>,
61-
var references: List<CodeReference>,
68+
var references: List<CodeReferenceGenerated>,
6269
)
6370

6471
@Suppress("ConstructorParameterNaming") // Unfortunately, this is exactly how the string json is received and is needed for parsing.

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import software.amazon.awssdk.services.codewhispererstreaming.model.CodeWhispere
1414
import software.amazon.awssdk.services.codewhispererstreaming.model.ServiceQuotaExceededException
1515
import software.amazon.awssdk.services.codewhispererstreaming.model.ThrottlingException
1616
import software.aws.toolkits.core.utils.debug
17+
import software.aws.toolkits.core.utils.error
1718
import software.aws.toolkits.core.utils.getLogger
1819
import software.aws.toolkits.core.utils.warn
1920
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.CodeIterationLimitError
@@ -207,6 +208,7 @@ suspend fun exportTaskAssistArchiveResult(proxyClient: FeatureDevClient, convers
207208
val result = exportResponse.reduce { acc, next -> acc + next } // To map the result it is needed to combine the full byte array
208209
parsedResult = jacksonObjectMapper().readValue(result)
209210
} catch (e: Exception) {
211+
logger.error(e) { "Failed to parse downloaded code results" }
210212
exportParseError()
211213
}
212214

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ReferenceLogController.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.openapi.editor.Editor
77
import com.intellij.openapi.project.Project
88
import software.amazon.awssdk.services.codewhispererruntime.model.Reference
99
import software.amazon.awssdk.services.codewhispererruntime.model.Span
10+
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session.CodeReferenceGenerated
1011
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorUtil
1112
import software.aws.toolkits.jetbrains.services.codewhisperer.toolwindow.CodeWhispererCodeReferenceManager
1213
import software.aws.toolkits.jetbrains.services.cwc.messages.CodeReference
@@ -41,7 +42,7 @@ object ReferenceLogController {
4142
}
4243
}
4344

44-
fun addReferenceLog(codeReferences: List<CodeReference>?, project: Project) {
45+
fun addReferenceLog(codeReferences: List<CodeReferenceGenerated>?, project: Project) {
4546
val manager = CodeWhispererCodeReferenceManager.getInstance(project)
4647

4748
codeReferences?.forEach { reference ->

0 commit comments

Comments
 (0)