Skip to content

Commit 27b22d5

Browse files
committed
Modified impl of progress bar cancel functionality and some UX changes for V1 version of build and execute
1 parent 931fca3 commit 27b22d5

File tree

7 files changed

+58
-24
lines changed

7 files changed

+58
-24
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ mockitoKotlin = "5.4.0"
2727
mockk = "1.13.10"
2828
nimbus-jose-jwt = "9.40"
2929
node-gradle = "7.0.2"
30-
telemetryGenerator = "1.0.301"
30+
telemetryGenerator = "1.0.307"
3131
testLogger = "4.0.0"
3232
testRetry = "1.5.10"
3333
# test-only; platform provides slf4j transitively at runtime

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class BrowserConnector(
6767
it.elementId(source.asText())
6868
}
6969
} else if (module != null && trigger != null) {
70-
Telemetry.toolkit.openModule.use {
70+
Telemetry.toolkit.willOpenModule.use {
7171
it.module(module.asText())
7272
it.source(trigger.asText())
7373
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeTestChatItems.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,5 @@ fun createProgressField(messageKey: String): ProgressField = ProgressField(
6060
status = "default",
6161
value = -1,
6262
text = message(messageKey),
63-
actions = listOf(if (messageKey == "testgen.progressbar.build_and_execute") cancelFixingTestCasesButton else cancelTestGenBuildAndExecuteButton)
63+
actions = listOf(if (messageKey == "testgen.progressbar.build_and_execute") cancelTestGenBuildAndExecuteButton else cancelFixingTestCasesButton)
6464
)

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/CodeWhispererUTGChatManager.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.CodeTes
3636
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.model.PreviousUTGIterationContext
3737
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.model.ShortAnswer
3838
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.BuildAndExecuteProgressStatus
39+
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.BuildStatus
3940
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.session.Session
4041
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.utils.constructBuildAndExecutionSummaryText
4142
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.calculateTotalLatency
@@ -55,6 +56,7 @@ import software.aws.toolkits.jetbrains.utils.isQConnected
5556
import software.aws.toolkits.resources.message
5657
import software.aws.toolkits.telemetry.AmazonqTelemetry
5758
import software.aws.toolkits.telemetry.MetricResult
59+
import software.aws.toolkits.telemetry.Status
5860
import java.io.ByteArrayInputStream
5961
import java.io.ByteArrayOutputStream
6062
import java.io.File
@@ -270,7 +272,6 @@ class CodeWhispererUTGChatManager(val project: Project, private val cs: Coroutin
270272
promptInputProgress = if (session.listOfTestGenerationJobId.size == 1) {
271273
testGenProgressField(progressRate)
272274
} else {
273-
// fixingTestCasesProgressField
274275
createProgressField("testgen.progressbar.fixing_test_cases")
275276
}
276277

@@ -355,7 +356,6 @@ class CodeWhispererUTGChatManager(val project: Project, private val cs: Coroutin
355356
session.viewDiffMessageId = viewDiffMessageId
356357
codeTestChatHelper.updateUI(
357358
promptInputDisabledState = false,
358-
// promptInputPlaceholder = "Specify a function(s) in the current file(optional)",
359359
promptInputProgress = testGenCompletedField,
360360
)
361361
} else {
@@ -555,7 +555,10 @@ class CodeWhispererUTGChatManager(val project: Project, private val cs: Coroutin
555555
session.conversationState = ConversationState.IDLE
556556
return null
557557
}
558-
558+
if (session.buildStatus === BuildStatus.CANCELLED) {
559+
session.conversationState = ConversationState.IDLE
560+
return null
561+
}
559562
beforeTestGenFlow(session)
560563

561564
return cs.launch {
@@ -617,7 +620,7 @@ class CodeWhispererUTGChatManager(val project: Project, private val cs: Coroutin
617620
artifactsUploadDuration = session.artifactUploadDuration,
618621
buildZipFileBytes = session.srcZipFileSize,
619622
requestId = session.startTestGenerationRequestId,
620-
// status = if (e.message == message("testgen.message.cancelled")) Status.CANCELLED else Status.FAILED,
623+
status = if (e.message == message("testgen.message.cancelled")) Status.CANCELLED else Status.FAILED,
621624
)
622625
}
623626
session.isGeneratingTests = false

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/controller/CodeTestChatController.kt

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import software.aws.toolkits.jetbrains.services.amazonqCodeTest.CodeWhispererUTG
6161
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.ConversationState
6262
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.FEATURE_NAME
6363
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.InboundAppMessagesHandler
64+
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.cancellingProgressField
6465
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.createProgressField
6566
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.Button
6667
import software.aws.toolkits.jetbrains.services.amazonqCodeTest.messages.CodeTestChatMessage
@@ -103,6 +104,7 @@ import software.aws.toolkits.telemetry.AmazonqTelemetry
103104
import software.aws.toolkits.telemetry.FeatureId
104105
import software.aws.toolkits.telemetry.InteractionType
105106
import software.aws.toolkits.telemetry.MetricResult
107+
import software.aws.toolkits.telemetry.Status
106108
import software.aws.toolkits.telemetry.UiTelemetry
107109
import java.io.File
108110
import java.nio.file.Files
@@ -172,6 +174,7 @@ class CodeTestChatController(
172174
override suspend fun processStartTestGen(message: IncomingCodeTestMessage.StartTestGen) {
173175
codeTestChatHelper.setActiveCodeTestTabId(message.tabId)
174176
val session = codeTestChatHelper.getActiveSession()
177+
sessionCleanUp(message.tabId)
175178
// check if IDE has active file open, yes return (fileName and filePath) else return null
176179
val project = context.project
177180
val fileInfo = checkActiveFileInIDE(project, message) ?: return
@@ -314,7 +317,7 @@ class CodeTestChatController(
314317
result = MetricResult.Succeeded,
315318
perfClientLatency = (Instant.now().toEpochMilli() - session.startTimeOfTestGeneration),
316319
requestId = id,
317-
// status = Status.ACCEPTED
320+
status = Status.ACCEPTED
318321
)
319322
}
320323
session.isGeneratingTests = false
@@ -689,7 +692,7 @@ class CodeTestChatController(
689692
buildPayloadBytes = session.srcPayloadSize,
690693
buildZipFileBytes = session.srcZipFileSize,
691694
requestId = session.startTestGenerationRequestId,
692-
// status = Status.ACCEPTED
695+
status = Status.ACCEPTED
693696
)
694697
}
695698

@@ -818,7 +821,7 @@ class CodeTestChatController(
818821
buildZipFileBytes = session.srcZipFileSize,
819822
requestId = session.startTestGenerationRequestId,
820823
update = session.updateBuildCommands,
821-
// status = Status.ACCEPTED
824+
status = Status.ACCEPTED
822825
)
823826
}
824827
}
@@ -915,7 +918,7 @@ class CodeTestChatController(
915918
buildPayloadBytes = session.srcPayloadSize,
916919
buildZipFileBytes = session.srcZipFileSize,
917920
requestId = session.startTestGenerationRequestId,
918-
// status = Status.REJECTED
921+
status = Status.REJECTED
919922
)
920923
} else {
921924
AmazonqTelemetry.unitTestGeneration(
@@ -1064,7 +1067,7 @@ class CodeTestChatController(
10641067
buildZipFileBytes = session.srcZipFileSize,
10651068
requestId = session.startTestGenerationRequestId,
10661069
update = session.updateBuildCommands,
1067-
// status = Status.ACCEPTED
1070+
status = Status.ACCEPTED
10681071
)
10691072
sessionCleanUp(message.tabId)
10701073
return
@@ -1119,20 +1122,50 @@ class CodeTestChatController(
11191122
// TODO: install dependencies and build
11201123
}
11211124
"stop_test_generation" -> {
1122-
UiTelemetry.click(null as Project?, "unitTestGeneration_cancelTestGenerationProgress")
1125+
UiTelemetry.click(context.project, "unitTestGeneration_cancelTestGenerationProgress")
11231126
session.isGeneratingTests = false
11241127
return
11251128
}
11261129
"stop_test_gen_build_and_execution" -> {
1127-
UiTelemetry.click(null as Project?, "unitTestGeneration_cancelBuildProgress")
1128-
// TODO: Cancel Build and execute
1130+
UiTelemetry.click(context.project, "unitTestGeneration_cancelBuildProgress")
1131+
session.buildStatus = BuildStatus.CANCELLED
11291132
session.isGeneratingTests = false
1133+
AmazonqTelemetry.unitTestGeneration(
1134+
cwsprChatProgrammingLanguage = session.programmingLanguage.languageId,
1135+
hasUserPromptSupplied = session.hasUserPromptSupplied,
1136+
isSupportedLanguage = true,
1137+
credentialStartUrl = getStartUrl(project = context.project),
1138+
jobGroup = session.testGenerationJobGroupName,
1139+
jobId = session.testGenerationJob,
1140+
result = MetricResult.Cancelled,
1141+
reason = null,
1142+
reasonDesc = null,
1143+
perfClientLatency = (Instant.now().toEpochMilli() - session.startTimeOfTestGeneration),
1144+
isCodeBlockSelected = session.isCodeBlockSelected,
1145+
artifactsUploadDuration = session.artifactUploadDuration,
1146+
buildZipFileBytes = session.srcZipFileSize,
1147+
requestId = session.startTestGenerationRequestId,
1148+
status = Status.CANCELLED,
1149+
)
1150+
codeTestChatHelper.updateUI(
1151+
promptInputDisabledState = false,
1152+
promptInputProgress = cancellingProgressField,
1153+
promptInputPlaceholder = message("testgen.placeholder.enter_slash_quick_actions"),
1154+
)
1155+
delay(1000)
1156+
codeTestChatHelper.addAnswer(
1157+
CodeTestChatMessageContent(
1158+
message = message("testgen.message.cancelled"),
1159+
type = ChatMessageType.Answer,
1160+
canBeVoted = false
1161+
)
1162+
)
1163+
codeTestChatHelper.sendUpdatePromptProgress(session.tabId, null)
11301164
return
11311165
}
11321166
"stop_fixing_test_cases" -> {
11331167
UiTelemetry.click(null as Project?, "unitTestGeneration_cancelFixingTest")
11341168
session.isGeneratingTests = false
1135-
session.buildStatus = BuildStatus.CANCELLED
11361169
return
11371170
}
11381171
else -> {
@@ -1149,7 +1182,7 @@ class CodeTestChatController(
11491182
sessionCleanUp(codeTestChatHelper.getActiveSession().tabId)
11501183
}
11511184

1152-
suspend fun updateBuildAndExecuteProgressCard(
1185+
private suspend fun updateBuildAndExecuteProgressCard(
11531186
currentStatus: BuildAndExecuteProgressStatus,
11541187
messageId: String?,
11551188
): String? {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/model/BuildAndExecuteStatusIcon.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ package software.aws.toolkits.jetbrains.services.amazonqCodeTest.model
55

66
enum class BuildAndExecuteStatusIcon(val icon: String) {
77
WAIT("<span>&#9203;</span>"),
8-
CURRENT("<span>&#9203;</span>"),
98
DONE("<span style=\"color: green;\">&#10004;</span>"),
109
FAILED("<span style=\"color: red;\">&#10060;</span>"),
1110
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqCodeTest/utils/UTGChatUtil.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ fun constructBuildAndExecutionSummaryText(currentStatus: BuildAndExecuteProgress
4040
}
4141

4242
if (currentStatus >= BuildAndExecuteProgressStatus.RUN_EXECUTION_TESTS && codeTestChatHelper.getActiveSession().buildStatus == BuildStatus.SUCCESS) {
43-
progressMessages.add("${BuildAndExecuteStatusIcon.DONE.icon} ${"Project compiled\n"}\${BuildAndExecuteStatusIcon.DONE.icon} ${"All tests passed\n"}")
43+
progressMessages.add("${BuildAndExecuteStatusIcon.DONE.icon} ${"Project compiled"}")
44+
progressMessages.add("${BuildAndExecuteStatusIcon.DONE.icon} ${"All tests passed\n"}")
4445
}
4546
// TODO: Commenting out this code to do a better UX in the V2 version after science support
4647
/*
@@ -110,7 +111,7 @@ fun constructBuildAndExecutionSummaryText(currentStatus: BuildAndExecuteProgress
110111
return """
111112
Sure, This may take a few minutes and I'll update the progress here.
112113
113-
**Progress summary**\n
114+
**Progress summary**
114115
115116
""".trimIndent() + progressMessages.joinToString("\n")
116117
}
@@ -145,13 +146,12 @@ fun runBuildOrTestCommand(
145146
}
146147
packageRoot = packageRoot.parentFile
147148
}
148-
var workingDir = if (foundGradleRoot) {
149+
val workingDir = if (foundGradleRoot) {
149150
packageRoot ?: testFileAbsolutePath.parentFile
150151
} else {
151152
testFileAbsolutePath.parentFile
152153
}
153-
// If no valid Gradle directory is found, fallback to the project root
154-
// val gradleWrapper = File(packageRoot ?: projectRoot, "gradlew")
154+
155155
val console: ConsoleView = ConsoleViewImpl(project, true)
156156

157157
// Attach Console View to Build Tool Window
@@ -187,7 +187,6 @@ fun runBuildOrTestCommand(
187187
}.withWorkDirectory(workingDir)
188188

189189
try {
190-
// val process = processBuilder.start()
191190
val processHandler = OSProcessHandler(commandLine)
192191

193192
// Attach Process Listener for Output Handling

0 commit comments

Comments
 (0)