Skip to content

Commit a6c51c7

Browse files
authored
fix(CodeTransformation): refresh VFS if diff.patch not found (#4166)
1 parent 11dbe4c commit a6c51c7

File tree

8 files changed

+55
-76
lines changed

8 files changed

+55
-76
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "CodeTransform: add button to submit feedback when job fails"
4+
}

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerManager.kt

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.state.buildState
5454
import software.aws.toolkits.jetbrains.services.codemodernizer.state.getLatestJobId
5555
import software.aws.toolkits.jetbrains.services.codemodernizer.state.toSessionContext
5656
import software.aws.toolkits.jetbrains.services.codemodernizer.toolwindow.CodeModernizerBottomToolWindowFactory
57-
import software.aws.toolkits.jetbrains.services.codemodernizer.ui.components.BuildErrorDialog
5857
import software.aws.toolkits.jetbrains.services.codemodernizer.ui.components.PreCodeTransformUserDialog
59-
import software.aws.toolkits.jetbrains.services.codemodernizer.ui.components.ValidationErrorDialog
58+
import software.aws.toolkits.jetbrains.ui.feedback.FeedbackDialog
6059
import software.aws.toolkits.jetbrains.utils.isRunningOnRemoteBackend
6160
import software.aws.toolkits.jetbrains.utils.notifyStickyError
6261
import software.aws.toolkits.jetbrains.utils.notifyStickyInfo
@@ -73,6 +72,8 @@ import java.util.Base64
7372
import java.util.concurrent.atomic.AtomicBoolean
7473
import javax.swing.Icon
7574

75+
const val AMAZON_Q_FEEDBACK_DIALOG_KEY = "Amazon Q"
76+
7677
@State(name = "codemodernizerStates", storages = [Storage("aws.xml", roamingType = RoamingType.PER_OS)])
7778
class CodeModernizerManager(private val project: Project) : PersistentStateComponent<CodeModernizerState>, Disposable {
7879
private var managerState = CodeModernizerState()
@@ -296,6 +297,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
296297
message("codemodernizer.notification.info.modernize_failed.title"),
297298
message("codemodernizer.notification.info.modernize_failed.description", reason, retryablestring),
298299
project,
300+
listOf(displayFeedbackNotificationAction())
299301
)
300302
}
301303

@@ -304,6 +306,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
304306
message("codemodernizer.notification.info.transformation_stop.title"),
305307
message("codemodernizer.notification.info.transformation_stop.content"),
306308
project,
309+
listOf(displayFeedbackNotificationAction())
307310
)
308311
}
309312

@@ -312,6 +315,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
312315
message("codemodernizer.notification.info.transformation_resume.title"),
313316
message("codemodernizer.notification.info.transformation_resume.content"),
314317
project,
318+
listOf(displayFeedbackNotificationAction())
315319
)
316320
}
317321

@@ -328,6 +332,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
328332
message("codemodernizer.notification.info.transformation_start_stopping.failed_title"),
329333
message("codemodernizer.notification.info.transformation_start_stopping.failed_as_job_not_started"),
330334
project,
335+
listOf(displayFeedbackNotificationAction())
331336
)
332337
}
333338

@@ -336,6 +341,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
336341
message("codemodernizer.notification.info.transformation_start_stopping.failed_title"),
337342
message("codemodernizer.notification.info.transformation_start_stopping.failed_content", message),
338343
project,
344+
listOf(displayFeedbackNotificationAction())
339345
)
340346
}
341347

@@ -487,7 +493,11 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
487493
message("codemodernizer.manager.job_finished_title"),
488494
message("codemodernizer.manager.job_finished_content"),
489495
project,
490-
listOf(displayDiffNotificationAction(lastJobId), displaySummaryNotificationAction(lastJobId), viewTransformationHubAction())
496+
listOf(
497+
displayDiffNotificationAction(lastJobId),
498+
displaySummaryNotificationAction(lastJobId),
499+
viewTransformationHubAction()
500+
)
491501
)
492502
resumeJob(session, lastJobId, result)
493503
setJobNotOngoing()
@@ -498,7 +508,12 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
498508
message("codemodernizer.notification.info.modernize_failed.title"),
499509
message("codemodernizer.manager.job_failed_content", result.reason()),
500510
project,
501-
listOf(displayDiffNotificationAction(lastJobId), displaySummaryNotificationAction(lastJobId), viewTransformationHubAction())
511+
listOf(
512+
displayDiffNotificationAction(lastJobId),
513+
displaySummaryNotificationAction(lastJobId),
514+
displayFeedbackNotificationAction(),
515+
viewTransformationHubAction()
516+
)
502517
)
503518
resumeJob(session, lastJobId, result)
504519
setJobNotOngoing()
@@ -561,6 +576,11 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
561576
artifactHandler.showTransformationSummary(jobId)
562577
}
563578

579+
private fun displayFeedbackNotificationAction() =
580+
NotificationAction.createSimple(message("codemodernizer.notification.warn.submit_feedback")) {
581+
FeedbackDialog(project, productName = AMAZON_Q_FEEDBACK_DIALOG_KEY).showAndGet()
582+
}
583+
564584
fun informUserOfCompletion(result: CodeModernizerJobCompletedResult) {
565585
CodetransformTelemetry.totalRunTime(
566586
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
@@ -585,17 +605,18 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
585605
false,
586606
)
587607

588-
is CodeModernizerJobCompletedResult.JobFailedInitialBuild -> {
589-
ApplicationManager.getApplication().invokeLater {
590-
runInEdt { BuildErrorDialog.create(result.failureReason) }
591-
}
592-
}
608+
is CodeModernizerJobCompletedResult.JobFailedInitialBuild -> notifyStickyInfo(
609+
message("codemodernizer.builderrordialog.description.title"),
610+
result.failureReason,
611+
project,
612+
listOf(displayFeedbackNotificationAction())
613+
)
593614

594615
is CodeModernizerJobCompletedResult.JobPartiallySucceeded -> notifyStickyInfo(
595616
message("codemodernizer.notification.info.modernize_partial_complete.title"),
596617
message("codemodernizer.notification.info.modernize_partial_complete.content", result.targetJavaVersion.description),
597618
project,
598-
listOf(displayDiffNotificationAction(result.jobId), displaySummaryNotificationAction(result.jobId)),
619+
listOf(displayDiffNotificationAction(result.jobId), displaySummaryNotificationAction(result.jobId), displayFeedbackNotificationAction()),
599620
)
600621

601622
is CodeModernizerJobCompletedResult.JobCompletedSuccessfully -> notifyStickyInfo(
@@ -611,13 +632,13 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
611632
message("codemodernizer.notification.warn.maven_failed.title"),
612633
message("codemodernizer.notification.warn.maven_failed.content"),
613634
project,
614-
listOf(openTroubleshootingGuideNotificationAction(TROUBLESHOOTING_URL_MAVEN_COMMANDS)),
635+
listOf(openTroubleshootingGuideNotificationAction(TROUBLESHOOTING_URL_MAVEN_COMMANDS), displayFeedbackNotificationAction()),
615636
)
616637
is CodeModernizerJobCompletedResult.JobAbortedZipTooLarge -> notifyStickyInfo(
617638
message("codemodernizer.notification.warn.zip_too_large.title"),
618639
message("codemodernizer.notification.warn.zip_too_large.content"),
619640
project,
620-
listOf(openTroubleshootingGuideNotificationAction(TROUBLESHOOTING_URL_PREREQUISITES)),
641+
listOf(openTroubleshootingGuideNotificationAction(TROUBLESHOOTING_URL_PREREQUISITES), displayFeedbackNotificationAction()),
621642
)
622643
}
623644
}
@@ -695,9 +716,6 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
695716
addCodeModernizeUI(true)
696717
val maybeUnknownReason = reason ?: message("codemodernizer.notification.warn.invalid_project.description.reason.unknown")
697718
codeModernizerBottomWindowPanelManager.setProjectInvalidUI(maybeUnknownReason)
698-
ApplicationManager.getApplication().invokeLater {
699-
runInEdt { ValidationErrorDialog.create(maybeUnknownReason) }
700-
}
701719
notifyStickyInfo(
702720
message("codemodernizer.validationerrordialog.description.title"),
703721
message("codemodernizer.validationerrordialog.description.main"),

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/CodeModernizerSession.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.plan.CodeModerniz
3737
import software.aws.toolkits.jetbrains.services.codemodernizer.state.CodeModernizerSessionState
3838
import software.aws.toolkits.jetbrains.services.codemodernizer.state.CodeTransformTelemetryState
3939
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.CodeWhispererCodeScanSession
40+
import software.aws.toolkits.jetbrains.utils.notifyStickyInfo
4041
import software.aws.toolkits.resources.message
4142
import software.aws.toolkits.telemetry.CodeTransformApiNames
4243
import software.aws.toolkits.telemetry.CodetransformTelemetry
@@ -83,6 +84,10 @@ class CodeModernizerSession(
8384
return CodeModernizerStartJobResult.Disposed
8485
}
8586
val startTime = Instant.now()
87+
notifyStickyInfo(
88+
message("codemodernizer.notification.info.compiling_project.title"),
89+
message("codemodernizer.notification.info.compiling_project.content"),
90+
)
8691
val result = sessionContext.createZipWithModuleFiles()
8792

8893
if (result is ZipCreationResult.Missing1P) {
@@ -121,6 +126,10 @@ class CodeModernizerSession(
121126
LOG.warn { "Job was cancelled by user before upload was called" }
122127
return CodeModernizerStartJobResult.Cancelled
123128
}
129+
notifyStickyInfo(
130+
message("codemodernizer.notification.info.submitted_project.title"),
131+
message("codemodernizer.notification.info.submitted_project.content"),
132+
)
124133
val uploadId = uploadPayload(payload)
125134
if (shouldStop.get()) {
126135
LOG.warn { "Job was cancelled by user before start job was called" }
@@ -289,6 +298,7 @@ class CodeModernizerSession(
289298
if (!shouldStop.get()) {
290299
CodetransformTelemetry.logApiLatency(
291300
codeTransformApiNames = CodeTransformApiNames.UploadZip,
301+
codeTransformUploadId = createUploadUrlResponse.uploadId(),
292302
codeTransformSessionId = CodeTransformTelemetryState.instance.getSessionId(),
293303
codeTransformRunTimeLatency = calculateTotalLatency(uploadStartTime, Instant.now()),
294304
codeTransformTotalByteSize = payload.length().toInt(),

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerArtifact.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ open class CodeModernizerArtifact(
5353
val manifest = loadManifest()
5454
if (manifest.version > maxSupportedVersion) {
5555
// If not supported we can still try to use it, i.e. the versions should largely be backwards compatible
56-
// Can also notify user to consider upgrading the toolkit version.
5756
LOG.warn { "Unsupported version: ${manifest.version}" }
5857
}
5958
val patches = extractPatches(manifest)
@@ -100,7 +99,7 @@ open class CodeModernizerArtifact(
10099
throw RuntimeException("Expected root for patches was not a directory.")
101100
}
102101
return patchesDir.walk()
103-
.map { fileSystem.findFileByNioFile(it) ?: throw RuntimeException("Could not find patch") }
102+
.map { fileSystem.refreshAndFindFileByNioFile(it) ?: throw RuntimeException("Could not find patch") }
104103
.toList()
105104
}
106105
}

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/CodeModernizerSessionContext.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ data class CodeModernizerSessionContext(
6666
return isIdea
6767
}
6868

69-
/**
70-
* Can eventually modify to use an approach based on walkTopDown instead of VfsUtil.collectChildrenRecursively(root) in createZipWithModuleFiles.
71-
* We now recurse the file tree twice and then filter which hurts performance for large projects.
72-
*/
7369
private fun findDirectoriesToExclude(sourceFolder: File): List<File> {
7470
val excluded = mutableListOf<File>()
7571
sourceFolder.walkTopDown().onEnter {

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/ui/components/BuildErrorDialog.kt

Lines changed: 0 additions & 26 deletions
This file was deleted.

plugins/toolkit/jetbrains-core/src/software/aws/toolkits/jetbrains/services/codemodernizer/ui/components/ValidationErrorDialog.kt

Lines changed: 0 additions & 27 deletions
This file was deleted.

plugins/toolkit/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,8 @@ codemodernizer.migration_plan.substeps.description_failed=Build failed
575575
codemodernizer.migration_plan.substeps.description_stopped=Job is stopped
576576
codemodernizer.migration_plan.substeps.description_succeed=Build succeeded
577577
codemodernizer.migration_summary.header.title=Transformation summary
578+
codemodernizer.notification.info.compiling_project.content=Amazon Q is compiling your project. This can take up to 10 minutes.
579+
codemodernizer.notification.info.compiling_project.title=Compiling Project
578580
codemodernizer.notification.info.download.started.content=Downloading the updated code
579581
codemodernizer.notification.info.download.started.title=Download Started
580582
codemodernizer.notification.info.modernize_complete.content=Transformation job successfully finished. You can view the changes and accept changes to further test the transformed code and push it to production.
@@ -589,6 +591,8 @@ codemodernizer.notification.info.modernize_failed.unknown_failure_reason=unknown
589591
codemodernizer.notification.info.modernize_ongoing.view_status=View status
590592
codemodernizer.notification.info.modernize_partial_complete.content=Transformation job partially successful! The new code is not fully Java {0} compatible yet. You will need to fix changes yourself. You can view the changes by clicking view diff below.
591593
codemodernizer.notification.info.modernize_partial_complete.title=Transformation partially successful!
594+
codemodernizer.notification.info.submitted_project.content=Your project has been submitted for transformation. The code transformation process may take 10-30 mins depending on the size of your project.
595+
codemodernizer.notification.info.submitted_project.title=Submitted Project
592596
codemodernizer.notification.info.transformation_resume.content=We were unable to resume polling for the job you started before closing the project.
593597
codemodernizer.notification.info.transformation_resume.title=Unable to resume polling for job updates.
594598
codemodernizer.notification.info.transformation_start_stopping.as_no_response=Unable to stop job due to an internal error.
@@ -602,7 +606,7 @@ codemodernizer.notification.info.transformation_stop.title=Transformation stoppe
602606
codemodernizer.notification.info.transformation_summary.content=We need to download the transformation summary, please try again after this has completed.
603607
codemodernizer.notification.info.transformation_summary.title=Transformation summary download started!
604608
codemodernizer.notification.info.view_troubleshooting_guide=View troubleshooting guide
605-
codemodernizer.notification.warn.invalid_project.description.reason.invalid_jdk_versions=We could not find an upgrade eligible application. We currently support upgrade of Maven Java applications of version 8 and 11. Go to File -> Project Structure and ensure the correct JDK is selected in the SDK field.
609+
codemodernizer.notification.warn.invalid_project.description.reason.invalid_jdk_versions=We could not find an upgrade eligible application.
606610
codemodernizer.notification.warn.invalid_project.description.reason.missing_content_roots=We could not find an upgrade eligible application. We currently support upgrade of Maven Java applications of version 8 and 11.
607611
codemodernizer.notification.warn.invalid_project.description.reason.no_valid_files=We could not find a valid configuration file for the project. We currently support Maven build tool and require a POM.xml to identify build configurations.
608612
codemodernizer.notification.warn.invalid_project.description.reason.not_logged_in=We can not start the transform as you are not logged in with sso, please log in to CodeWhisperer using SSO.
@@ -612,6 +616,7 @@ codemodernizer.notification.warn.maven_failed.content=We were unable to build an
612616
codemodernizer.notification.warn.maven_failed.title=Amazon Q Code Transform unable to zip dependencies
613617
codemodernizer.notification.warn.on_resume.unknown_status_response.content=We received data from Amazon Q in a format that the plugin cannot handle. You may need to update the plugin and then try again.
614618
codemodernizer.notification.warn.on_resume.unknown_status_response.title=Unable to resume job.
619+
codemodernizer.notification.warn.submit_feedback=Submit feedback
615620
codemodernizer.notification.warn.unable_to_generate_plan=The job failed before a code transform plan could be generated.
616621
codemodernizer.notification.warn.unable_to_start_job=we were unable to start the job as an exception happened:\n{0}
617622
codemodernizer.notification.warn.unknown_build_failure=Your application failed to build due to an unknown error.
@@ -666,7 +671,7 @@ codemodernizer.toolwindow.table.header.status=Status
666671
codemodernizer.toolwindow.transformation.history.header=Transformation job history
667672
codemodernizer.toolwindow.transformation.progress.header=Transformation progress
668673
codemodernizer.toolwindow.transformation.progress.running_time=Running time: {0}
669-
codemodernizer.validationerrordialog.description.main=Amazon Q Code cannot transform your project as it is not eligible.
674+
codemodernizer.validationerrordialog.description.main=Amazon Q Code cannot transform your project as it is not eligible. We currently support upgrade of Maven Java applications of version 8 and 11. To start, go to File -> Project Structure and ensure the correct JDK is selected in the SDK field.
670675
codemodernizer.validationerrordialog.description.title=Validation Error occurred
671676
codewhisperer.codescan.apply_fix_button_label=Apply fix
672677
codewhisperer.codescan.apply_fix_button_tooltip=Apply suggested fix

0 commit comments

Comments
 (0)