@@ -81,9 +81,25 @@ async function collectInput(validProjects: Map<vscode.QuickPickItem, JDKVersion
81
81
const validSourceVersions : vscode . QuickPickItem [ ] = versionsArray . map ( version => ( {
82
82
label : version ,
83
83
} ) )
84
+ validSourceVersions . push ( { label : 'Other' } ) // if user selects 'Other', terminate execution
84
85
await MultiStepInputFlowController . run ( input => pickSourceVersion ( input , state , validSourceVersions ) )
85
86
if ( ! state . sourceJavaVersion ) {
86
87
throw new ToolkitError ( 'No version selected' , { code : 'NoVersionSelected' } )
88
+ } else if ( state . sourceJavaVersion . label === 'Other' ) {
89
+ telemetry . codeTransform_jobStartedCompleteFromPopupDialog . emit ( {
90
+ codeTransformSessionId : codeTransformTelemetryState . getSessionId ( ) ,
91
+ codeTransformJavaSourceVersionsAllowed : JDKToTelemetryValue (
92
+ transformByQState . getSourceJDKVersion ( ) !
93
+ ) as CodeTransformJavaSourceVersionsAllowed , // will be 'undefined'
94
+ codeTransformJavaTargetVersionsAllowed : JDKToTelemetryValue (
95
+ transformByQState . getTargetJDKVersion ( )
96
+ ) as CodeTransformJavaTargetVersionsAllowed ,
97
+ result : MetadataResult . Fail ,
98
+ } )
99
+ await vscode . window . showErrorMessage ( CodeWhispererConstants . unsupportedJavaVersionSelectedMessage , {
100
+ modal : true ,
101
+ } )
102
+ throw new ToolkitError ( '' , { code : 'OtherVersionSelected' } )
87
103
}
88
104
return state as UserInputState
89
105
}
@@ -141,6 +157,47 @@ async function pickSourceVersion(
141
157
transformByQState . setSourceJDKVersion ( JDKVersion . JDK8 )
142
158
} else if ( pick === validSourceVersions [ 1 ] ) {
143
159
transformByQState . setSourceJDKVersion ( JDKVersion . JDK11 )
160
+ } else if ( pick === validSourceVersions [ 2 ] ) {
161
+ // corresponds with the 'Other' option
162
+ transformByQState . setSourceJDKVersion ( JDKVersion . UNSUPPORTED )
163
+ }
164
+ }
165
+
166
+ async function setMaven ( ) {
167
+ let mavenWrapperExecutableName = os . platform ( ) === 'win32' ? 'mvnw.cmd' : 'mvnw'
168
+ const mavenWrapperExecutablePath = path . join ( transformByQState . getProjectPath ( ) , mavenWrapperExecutableName )
169
+ if ( fs . existsSync ( mavenWrapperExecutablePath ) ) {
170
+ if ( mavenWrapperExecutableName === 'mvnw' ) {
171
+ mavenWrapperExecutableName = './mvnw' // add the './' for non-Windows
172
+ }
173
+ transformByQState . setMavenName ( mavenWrapperExecutableName )
174
+ } else {
175
+ transformByQState . setMavenName ( 'mvn' )
176
+ }
177
+ }
178
+
179
+ async function validateJavaHome ( ) {
180
+ const versionData = await getVersionData ( )
181
+ let javaVersionUsedByMaven = versionData [ 1 ]
182
+ if ( javaVersionUsedByMaven !== undefined ) {
183
+ javaVersionUsedByMaven = javaVersionUsedByMaven . slice ( 0 , 3 )
184
+ if ( javaVersionUsedByMaven === '1.8' ) {
185
+ javaVersionUsedByMaven = JDKVersion . JDK8
186
+ } else if ( javaVersionUsedByMaven === '11.' ) {
187
+ javaVersionUsedByMaven = JDKVersion . JDK11
188
+ }
189
+ }
190
+ if ( javaVersionUsedByMaven !== transformByQState . getSourceJDKVersion ( ) ) {
191
+ // means either javaVersionUsedByMaven is undefined or it does not match the project JDK
192
+ // TO-DO: give user help on how to find JAVA_HOME for corresponding project JDK
193
+ const javaHome = await vscode . window . showInputBox ( {
194
+ title : CodeWhispererConstants . transformByQWindowTitle ,
195
+ prompt : `${ CodeWhispererConstants . enterJavaHomeMessage } ${ transformByQState . getSourceJDKVersion ( ) } ` ,
196
+ } )
197
+ if ( ! javaHome || ! javaHome . trim ( ) ) {
198
+ throw new ToolkitError ( 'No JAVA_HOME provided' , { code : 'NoJavaHomePath' } )
199
+ }
200
+ transformByQState . setJavaHome ( javaHome . trim ( ) )
144
201
}
145
202
}
146
203
@@ -150,6 +207,10 @@ export async function startTransformByQ() {
150
207
// Validate inputs. If failed, Error will be thrown and execution stops
151
208
const userInputState = await validateTransformationJob ( )
152
209
210
+ await setMaven ( )
211
+
212
+ await validateJavaHome ( )
213
+
153
214
// Set the default state variables for our store and the UI
154
215
await setTransformationToRunningState ( userInputState )
155
216
@@ -192,7 +253,7 @@ export async function preTransformationUploadCode(userInputState: UserInputState
192
253
let payloadFilePath = ''
193
254
throwIfCancelled ( )
194
255
try {
195
- payloadFilePath = await zipCode ( userInputState . project ! . description ! )
256
+ payloadFilePath = await zipCode ( )
196
257
transformByQState . setPayloadFilePath ( payloadFilePath )
197
258
await vscode . commands . executeCommand ( 'aws.amazonq.refresh' ) // so that button updates
198
259
uploadId = await uploadPayload ( payloadFilePath )
@@ -340,13 +401,12 @@ export async function validateTransformationJob() {
340
401
result : MetadataResult . Pass ,
341
402
} )
342
403
}
343
-
404
+ transformByQState . setProjectPath ( userInputState . project ! . description ! )
344
405
return userInputState
345
406
}
346
407
347
408
export async function setTransformationToRunningState ( userInputState : UserInputState ) {
348
409
transformByQState . setToRunning ( )
349
- transformByQState . setProjectPath ( userInputState . project ! . description ! )
350
410
sessionPlanProgress [ 'uploadCode' ] = StepProgress . Pending
351
411
sessionPlanProgress [ 'buildCode' ] = StepProgress . Pending
352
412
sessionPlanProgress [ 'transformCode' ] = StepProgress . Pending
@@ -370,11 +430,8 @@ export async function setTransformationToRunningState(userInputState: UserInputS
370
430
'aws.amazonq.showPlanProgressInHub' ,
371
431
codeTransformTelemetryState . getStartTime ( )
372
432
)
373
- await vscode . commands . executeCommand ( 'setContext' , 'gumby.isStopButtonAvailable' , true )
374
- await vscode . commands . executeCommand ( 'setContext' , 'gumby.isTransformAvailable' , false )
375
- await vscode . commands . executeCommand ( 'setContext' , 'gumby.isPlanAvailable' , false )
376
- await vscode . commands . executeCommand ( 'setContext' , 'gumby.isSummaryAvailable' , false )
377
- await resetReviewInProgress ( )
433
+
434
+ await setContextVariables ( )
378
435
379
436
await vscode . commands . executeCommand ( 'aws.amazonq.refresh' )
380
437
}
@@ -384,12 +441,9 @@ export async function postTransformationJob(userInputState: UserInputState) {
384
441
const durationInMs = calculateTotalLatency ( codeTransformTelemetryState . getStartTime ( ) )
385
442
const resultStatusMessage = codeTransformTelemetryState . getResultStatus ( )
386
443
387
- const versionInfoWrapper = await getVersionData ( 'mvnw' , transformByQState . getProjectPath ( ) )
388
- let mavenVersionInfoMessage = versionInfoWrapper [ 0 ]
389
- let javaVersionInfoMessage = versionInfoWrapper [ 1 ]
390
- const versionInfo = await getVersionData ( 'mvn' , transformByQState . getProjectPath ( ) )
391
- mavenVersionInfoMessage += ` (mvnw) -- ${ versionInfo [ 0 ] } (mvn)`
392
- javaVersionInfoMessage += ` (mvnw) -- ${ versionInfo [ 1 ] } (mvn)`
444
+ const versionInfo = await getVersionData ( )
445
+ const mavenVersionInfoMessage = `${ versionInfo [ 0 ] } (${ transformByQState . getMavenName ( ) } )`
446
+ const javaVersionInfoMessage = `${ versionInfo [ 1 ] } (${ transformByQState . getMavenName ( ) } )`
393
447
394
448
// Note: IntelliJ implementation of ResultStatusMessage includes additional metadata such as jobId.
395
449
telemetry . codeTransform_totalRunTime . emit ( {
@@ -515,7 +569,11 @@ export async function confirmStopTransformByQ(
515
569
}
516
570
}
517
571
518
- async function resetReviewInProgress ( ) {
572
+ async function setContextVariables ( ) {
573
+ await vscode . commands . executeCommand ( 'setContext' , 'gumby.isStopButtonAvailable' , true )
574
+ await vscode . commands . executeCommand ( 'setContext' , 'gumby.isTransformAvailable' , false )
575
+ await vscode . commands . executeCommand ( 'setContext' , 'gumby.isPlanAvailable' , false )
576
+ await vscode . commands . executeCommand ( 'setContext' , 'gumby.isSummaryAvailable' , false )
519
577
await vscode . commands . executeCommand ( 'setContext' , 'gumby.reviewState' , TransformByQReviewStatus . NotStarted )
520
578
await vscode . commands . executeCommand ( 'setContext' , 'gumby.transformationProposalReviewInProgress' , false )
521
579
}
0 commit comments