Skip to content

Commit 007a9c8

Browse files
authored
Merge branch 'main' into rli/243
2 parents 54baa89 + 85fd157 commit 007a9c8

File tree

18 files changed

+125
-59
lines changed

18 files changed

+125
-59
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 Code Transformation: notify users when no JDK is set in Project Structure settings"
4+
}

detekt-rules/src/software/aws/toolkits/gradle/detekt/rules/BannedImportsRule.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,16 @@ class BannedImportsRule : Rule() {
5050
)
5151
}
5252

53+
if (importedFqName?.startsWith("org.gradle.internal.impldep") == true) {
54+
report(
55+
CodeSmell(
56+
issue,
57+
Entity.from(element),
58+
message = "Avoid using Gradle's internal implementation classes: not public API and may change without notice."
59+
)
60+
)
61+
}
62+
5363
if (importedFqName?.contains("kotlinx.coroutines.Dispatchers") == true) {
5464
report(
5565
CodeSmell(

detekt-rules/tst/software/aws/toolkits/gradle/detekt/rules/BannedImportsRuleTest.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ class BannedImportsRuleTest {
5151
assertThat(rule.lint("import org.assertj.core.api.Assertions.assertThat")).isEmpty()
5252
}
5353

54+
@Test
55+
fun `Importing Gradle internal implementation classes fails`() {
56+
assertThat(rule.lint("import org.gradle.internal.impldep"))
57+
.singleElement()
58+
.matches {
59+
it.id == "BannedImports" && it.message == "Avoid using Gradle's internal implementation classes: not public API and may change without notice."
60+
}
61+
}
62+
5463
@Test
5564
fun `Importing Dispatchers fails`() {
5665
assertThat(rule.lint("import kotlinx.coroutines.Dispatchers"))

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ mockitoKotlin = "5.4.0"
2525
mockk = "1.13.10"
2626
nimbus-jose-jwt = "9.40"
2727
node-gradle = "7.0.2"
28-
telemetryGenerator = "1.0.250"
28+
telemetryGenerator = "1.0.259"
2929
testLogger = "4.0.0"
3030
testRetry = "1.5.10"
3131
# test-only; platform provides slf4j transitively at runtime

plugins/amazonq/codetransform/jetbrains-community/resources/META-INF/codetransform-ext-java.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
<separator/>
3636
<action
3737
id="codemodernizer.toolbar.showactivejob"
38-
class="software.aws.toolkits.jetbrains.services.codemodernizer.actions.CodeModernizerShowActiveJobDetailsAction"/>
38+
class="software.aws.toolkits.jetbrains.services.codemodernizer.actions.CodeModernizerShowTransformationStatusAction"/>
3939
<separator/>
4040
<action
4141
id="codemodernizer.toolbar.showpreviousjobs"
42-
class="software.aws.toolkits.jetbrains.services.codemodernizer.actions.CodeModernizerShowJobHistoryAction"/>
42+
class="software.aws.toolkits.jetbrains.services.codemodernizer.actions.CodeModernizerShowJobStatusAction"/>
4343
</group>
4444

4545
<action

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,13 +364,20 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
364364
fun handleLocalMavenBuildResult(mavenCopyCommandsResult: MavenCopyCommandsResult) {
365365
codeTransformationSession?.setLastMvnBuildResult(mavenCopyCommandsResult)
366366
// Send IDE notifications first
367-
if (mavenCopyCommandsResult == MavenCopyCommandsResult.Failure) {
367+
if (mavenCopyCommandsResult is MavenCopyCommandsResult.Failure) {
368368
notifyStickyInfo(
369369
message("codemodernizer.notification.warn.maven_failed.title"),
370370
message("codemodernizer.notification.warn.maven_failed.content"),
371371
project,
372372
listOf(openTroubleshootingGuideNotificationAction(CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE), displayFeedbackNotificationAction()),
373373
)
374+
} else if (mavenCopyCommandsResult is MavenCopyCommandsResult.NoJdk) {
375+
notifyStickyInfo(
376+
message("codemodernizer.notification.warn.maven_failed.title"),
377+
message("codemodernizer.notification.warn.validation.no_jdk"),
378+
project,
379+
listOf(openTroubleshootingGuideNotificationAction(CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE), displayFeedbackNotificationAction()),
380+
)
374381
}
375382

376383
CodeTransformMessageListener.instance.onMavenBuildResult(mavenCopyCommandsResult)
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,24 @@
44
package software.aws.toolkits.jetbrains.services.codemodernizer.actions
55

66
import com.intellij.icons.AllIcons
7-
import com.intellij.icons.AllIcons.Vcs.History
87
import com.intellij.openapi.actionSystem.ActionUpdateThread
98
import com.intellij.openapi.actionSystem.AnAction
109
import com.intellij.openapi.actionSystem.AnActionEvent
1110
import com.intellij.openapi.project.DumbAware
1211
import software.aws.toolkits.jetbrains.services.codemodernizer.CodeModernizerManager
1312
import software.aws.toolkits.resources.message
1413

15-
class CodeModernizerShowJobHistoryAction :
14+
class CodeModernizerShowJobStatusAction :
1615
AnAction(
17-
message("codemodernizer.explorer.show_job_history"),
18-
message("codemodernizer.explorer.show_job_history_description"),
19-
History
16+
message("codemodernizer.explorer.show_job_status"),
17+
message("codemodernizer.explorer.show_job_status_description"),
18+
AllIcons.Vcs.History
2019
),
2120
DumbAware {
2221
override fun getActionUpdateThread() = ActionUpdateThread.BGT
2322

2423
override fun update(event: AnActionEvent) {
25-
event.presentation.icon = AllIcons.Vcs.Changelist
24+
event.presentation.icon = AllIcons.Vcs.History
2625
}
2726

2827
override fun actionPerformed(event: AnActionEvent) {
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ import com.intellij.openapi.project.DumbAware
1111
import software.aws.toolkits.jetbrains.services.codemodernizer.CodeModernizerManager
1212
import software.aws.toolkits.resources.message
1313

14-
class CodeModernizerShowActiveJobDetailsAction :
14+
class CodeModernizerShowTransformationStatusAction :
1515
AnAction(
16-
message("codemodernizer.explorer.show_active_job_history"),
17-
message("codemodernizer.explorer.show_active_job_history_description"),
18-
AllIcons.Vcs.History
16+
message("codemodernizer.explorer.show_transformation_status"),
17+
message("codemodernizer.explorer.show_transformation_status_description"),
18+
AllIcons.Vcs.Changelist
1919
),
2020
DumbAware {
2121
override fun getActionUpdateThread() = ActionUpdateThread.BGT
2222

2323
override fun update(event: AnActionEvent) {
24-
event.presentation.icon = AllIcons.Vcs.History
24+
event.presentation.icon = AllIcons.Vcs.Changelist
2525
}
2626

2727
override fun actionPerformed(event: AnActionEvent) {

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/client/GumbyClient.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.SERVER_SIDE_ENCRYPTION_A
4848
import software.aws.toolkits.jetbrains.services.amazonq.clients.AmazonQStreamingClient
4949
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
5050
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.calculateTotalLatency
51-
import software.aws.toolkits.telemetry.CodeTransformApiNames
5251
import java.io.File
5352
import java.net.HttpURLConnection
5453
import java.time.Instant
@@ -69,7 +68,7 @@ class GumbyClient(private val project: Project) {
6968
.contentChecksum(sha256Checksum)
7069
.uploadIntent(UploadIntent.TRANSFORMATION)
7170
.build()
72-
return callApi({ bearerClient().createUploadUrl(request) }, apiName = CodeTransformApiNames.CreateUploadUrl)
71+
return callApi({ bearerClient().createUploadUrl(request) }, apiName = "CreateUploadUrl")
7372
}
7473

7574
fun createHilUploadUrl(sha256Checksum: String, jobId: JobId): CreateUploadUrlResponse {
@@ -90,12 +89,12 @@ class GumbyClient(private val project: Project) {
9089
.build()
9190
)
9291
.build()
93-
return callApi({ bearerClient().createUploadUrl(request) }, apiName = CodeTransformApiNames.CreateUploadUrl)
92+
return callApi({ bearerClient().createUploadUrl(request) }, apiName = "CreateUploadUrl")
9493
}
9594

9695
fun getCodeModernizationJob(jobId: String): GetTransformationResponse {
9796
val request = GetTransformationRequest.builder().transformationJobId(jobId).build()
98-
return callApi({ bearerClient().getTransformation(request) }, apiName = CodeTransformApiNames.GetTransformation)
97+
return callApi({ bearerClient().getTransformation(request) }, apiName = "GetTransformation")
9998
}
10099

101100
fun startCodeModernization(
@@ -114,7 +113,7 @@ class GumbyClient(private val project: Project) {
114113
.target { it.language(targetLanguage) }
115114
}
116115
.build()
117-
return callApi({ bearerClient().startTransformation(request) }, apiName = CodeTransformApiNames.StartTransformation)
116+
return callApi({ bearerClient().startTransformation(request) }, apiName = "StartTransformation")
118117
}
119118

120119
fun resumeCodeTransformation(
@@ -125,22 +124,22 @@ class GumbyClient(private val project: Project) {
125124
.transformationJobId(jobId.id)
126125
.userActionStatus(userActionStatus)
127126
.build()
128-
return callApi({ bearerClient().resumeTransformation(request) }, apiName = CodeTransformApiNames.ResumeTransformation)
127+
return callApi({ bearerClient().resumeTransformation(request) }, apiName = "ResumeTransformation")
129128
}
130129

131130
fun getCodeModernizationPlan(jobId: JobId): GetTransformationPlanResponse {
132131
val request = GetTransformationPlanRequest.builder().transformationJobId(jobId.id).build()
133-
return callApi({ bearerClient().getTransformationPlan(request) }, apiName = CodeTransformApiNames.GetTransformationPlan)
132+
return callApi({ bearerClient().getTransformationPlan(request) }, apiName = "GetTransformationPlan")
134133
}
135134

136135
fun stopTransformation(transformationJobId: String): StopTransformationResponse {
137136
val request = StopTransformationRequest.builder().transformationJobId(transformationJobId).build()
138-
return callApi({ bearerClient().stopTransformation(request) }, apiName = CodeTransformApiNames.StopTransformation)
137+
return callApi({ bearerClient().stopTransformation(request) }, apiName = "StopTransformation")
139138
}
140139

141140
private fun <T : CodeWhispererRuntimeResponse> callApi(
142141
apiCall: () -> T,
143-
apiName: CodeTransformApiNames,
142+
apiName: String,
144143
): T {
145144
var result: CodeWhispererRuntimeResponse? = null
146145
try {
@@ -174,10 +173,10 @@ class GumbyClient(private val project: Project) {
174173
.build()
175174
},
176175
{ e ->
177-
LOG.error(e) { "${CodeTransformApiNames.ExportResultArchive} failed: ${e.message}" }
176+
LOG.error(e) { "ExportResultArchive failed: ${e.message}" }
178177
},
179178
{ startTime ->
180-
LOG.info { "${CodeTransformApiNames.ExportResultArchive} latency: ${calculateTotalLatency(startTime, Instant.now())}" }
179+
LOG.info { "ExportResultArchive latency: ${calculateTotalLatency(startTime, Instant.now())}" }
181180
}
182181
)
183182

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/constants/CodeTransformChatItems.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ fun buildCheckingValidProjectChatContent() = CodeTransformChatMessageContent(
160160
type = CodeTransformChatMessageType.PendingAnswer,
161161
)
162162

163-
fun buildProjectValidChatContent(validationResult: ValidationResult) = CodeTransformChatMessageContent(
164-
message = message("codemodernizer.chat.message.validation.check_passed", validationResult.validatedProjectJdkName),
163+
fun buildProjectValidChatContent() = CodeTransformChatMessageContent(
164+
message = message("codemodernizer.chat.message.validation.check_passed"),
165165
type = CodeTransformChatMessageType.FinalizedAnswer,
166166
)
167167
fun buildProjectInvalidChatContent(validationResult: ValidationResult): CodeTransformChatMessageContent {
@@ -251,6 +251,16 @@ fun buildCompileLocalFailedChatContent() = CodeTransformChatMessageContent(
251251
)}",
252252
)
253253

254+
fun buildCompileLocalFailedNoJdkChatContent() = CodeTransformChatMessageContent(
255+
type = CodeTransformChatMessageType.FinalizedAnswer,
256+
message = "${message(
257+
"codemodernizer.chat.message.validation.no_jdk"
258+
)}\n\n${message(
259+
"codemodernizer.chat.message.validation.error.more_info",
260+
CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE
261+
)}",
262+
)
263+
254264
fun buildZipUploadFailedChatMessage(failureReason: UploadFailureReason): String {
255265
val resultMessage = when (failureReason) {
256266
is UploadFailureReason.PRESIGNED_URL_EXPIRED -> "${message(

0 commit comments

Comments
 (0)