From d625a573a9b41daf3a5bb7e40201e36e276def8d Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Tue, 7 May 2024 14:23:02 +0200 Subject: [PATCH 1/8] Validate user provide JAVA_HOME. --- .../chat/controller/controller.ts | 17 +++++++++++++++ .../commands/startTransformByQ.ts | 6 +++--- .../transformByQ/transformMavenHandler.ts | 21 +++++++++++++++---- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index a250b92c88..2490f278f4 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -326,6 +326,23 @@ export class GumbyController { case ConversationState.PROMPT_JAVA_HOME: { const pathToJavaHome = extractPath(data.message) + try { + await validateCanCompileProject() + } catch (err: any) { + if (err instanceof JavaHomeNotSetError) { + this.sessionStorage.getSession().conversationState = ConversationState.PROMPT_JAVA_HOME + this.messenger.sendStaticTextResponse('java-home-not-set', data.tabID) + this.messenger.sendChatInputEnabled(data.tabID, true) + this.messenger.sendUpdatePlaceholder( + data.tabID, + `Incompatible JDK, Enter the path to your Java ${transformByQState.getSourceJDKVersion()} installation.` + ) + return + } + throw err + } + await validateCanCompileProject() + // TODO validate here if (pathToJavaHome) { await this.prepareProjectForSubmission({ pathToJavaHome, diff --git a/packages/core/src/codewhisperer/commands/startTransformByQ.ts b/packages/core/src/codewhisperer/commands/startTransformByQ.ts index 569df17ef1..f7c24d42e1 100644 --- a/packages/core/src/codewhisperer/commands/startTransformByQ.ts +++ b/packages/core/src/codewhisperer/commands/startTransformByQ.ts @@ -81,7 +81,7 @@ async function setMaven() { async function validateJavaHome(): Promise { const versionData = await getVersionData() - let javaVersionUsedByMaven = versionData[1] + let javaVersionUsedByMaven = versionData.javaVersion if (javaVersionUsedByMaven !== undefined) { javaVersionUsedByMaven = javaVersionUsedByMaven.slice(0, 3) if (javaVersionUsedByMaven === '1.8') { @@ -363,8 +363,8 @@ export async function postTransformationJob() { const resultStatusMessage = transformByQState.getStatus() const versionInfo = await getVersionData() - const mavenVersionInfoMessage = `${versionInfo[0]} (${transformByQState.getMavenName()})` - const javaVersionInfoMessage = `${versionInfo[1]} (${transformByQState.getMavenName()})` + const mavenVersionInfoMessage = `${versionInfo.mavenVersion} (${transformByQState.getMavenName()})` + const javaVersionInfoMessage = `${versionInfo.javaVersion} (${transformByQState.getMavenName()})` // Note: IntelliJ implementation of ResultStatusMessage includes additional metadata such as jobId. telemetry.codeTransform_totalRunTime.emit({ diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts index a582721a8d..4ff8e466e8 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import { FolderInfo, transformByQState } from '../../models/model' import { getLogger } from '../../../shared/logger' import * as CodeWhispererConstants from '../../models/constants' -import { spawnSync } from 'child_process' // Consider using ChildProcess once we finalize all spawnSync calls +import { spawnSync, SpawnSyncOptionsWithStringEncoding } from 'child_process' // Consider using ChildProcess once we finalize all spawnSync calls import { CodeTransformMavenBuildCommand, telemetry } from '../../../shared/telemetry/telemetry' import { CodeTransformTelemetryState } from '../../../amazonqGumby/telemetry/codeTransformTelemetryState' import { MetadataResult } from '../../../shared/telemetry/telemetryClient' @@ -14,6 +14,11 @@ import { ToolkitError } from '../../../shared/errors' import { writeLogs } from './transformFileHandler' import { throwIfCancelled } from './transformApiHandler' +interface MavenVersionData { + mavenVersion: string | undefined + javaVersion: string | undefined +} + // run 'install' with either 'mvnw.cmd', './mvnw', or 'mvn' (if wrapper exists, we use that, otherwise we use regular 'mvn') function installProjectDependencies(dependenciesFolder: FolderInfo) { // baseCommand will be one of: '.\mvnw.cmd', './mvnw', 'mvn' @@ -176,11 +181,19 @@ export async function prepareProjectDependencies(dependenciesFolder: FolderInfo) void vscode.window.showInformationMessage(CodeWhispererConstants.buildSucceededNotification) } -export async function getVersionData() { +export async function getVersionData(): Promise { const baseCommand = transformByQState.getMavenName() // will be one of: 'mvnw.cmd', './mvnw', 'mvn' const modulePath = transformByQState.getProjectPath() + const javaHome = transformByQState.getJavaHome() // If customer provided JAVA_HOME use that + const args = ['-v'] - const spawnResult = spawnSync(baseCommand, args, { cwd: modulePath, shell: true, encoding: 'utf-8' }) + let env = process.env + if (javaHome) { + env = { ...env, JAVA_HOME: javaHome } + } + + const options: SpawnSyncOptionsWithStringEncoding = { cwd: modulePath, shell: true, encoding: 'utf-8', env: env } + const spawnResult = spawnSync(baseCommand, args, options) let localMavenVersion: string | undefined = '' let localJavaVersion: string | undefined = '' @@ -204,5 +217,5 @@ export async function getVersionData() { getLogger().info( `CodeTransformation: Ran ${baseCommand} to get Maven version = ${localMavenVersion} and Java version = ${localJavaVersion} with project JDK = ${transformByQState.getSourceJDKVersion()}` ) - return [localMavenVersion, localJavaVersion] + return { mavenVersion: localMavenVersion, javaVersion: localJavaVersion } } From 900c760f81ce5fb9fa8ce0003c58b63c494996f6 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Tue, 7 May 2024 14:26:03 +0200 Subject: [PATCH 2/8] Add log when using customer provided JAVA_HOME. --- .../codewhisperer/service/transformByQ/transformMavenHandler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts index 4ff8e466e8..53e95575d3 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts @@ -189,6 +189,7 @@ export async function getVersionData(): Promise { const args = ['-v'] let env = process.env if (javaHome) { + getLogger().info(`CodeTransformation: using customer provided JAVA_HOME = ${javaHome}`) env = { ...env, JAVA_HOME: javaHome } } From 163ad429788aae36eb829ec179b07fcc1e1d70a1 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Tue, 7 May 2024 17:46:12 +0200 Subject: [PATCH 3/8] Change occurrences of tabId to tabID for Q CodeTransform. --- .../chat/controller/controller.ts | 47 +++++++++---------- .../core/src/codewhisperer/models/model.ts | 4 ++ 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index 2490f278f4..750a228e3b 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -255,13 +255,6 @@ export class GumbyController { } private async prepareProjectForSubmission(message: { pathToJavaHome: string; tabID: string }): Promise { - if (message.pathToJavaHome) { - transformByQState.setJavaHome(message.pathToJavaHome) - getLogger().info( - `CodeTransformation: using JAVA_HOME = ${transformByQState.getJavaHome()} since source JDK does not match Maven JDK` - ) - } - try { this.sessionStorage.getSession().conversationState = ConversationState.COMPILING this.messenger.sendCompilationInProgress(message.tabID) @@ -326,24 +319,30 @@ export class GumbyController { case ConversationState.PROMPT_JAVA_HOME: { const pathToJavaHome = extractPath(data.message) - try { - await validateCanCompileProject() - } catch (err: any) { - if (err instanceof JavaHomeNotSetError) { - this.sessionStorage.getSession().conversationState = ConversationState.PROMPT_JAVA_HOME - this.messenger.sendStaticTextResponse('java-home-not-set', data.tabID) - this.messenger.sendChatInputEnabled(data.tabID, true) - this.messenger.sendUpdatePlaceholder( - data.tabID, - `Incompatible JDK, Enter the path to your Java ${transformByQState.getSourceJDKVersion()} installation.` - ) - return - } - throw err - } - await validateCanCompileProject() - // TODO validate here if (pathToJavaHome) { + transformByQState.setJavaHome(pathToJavaHome) + getLogger().info( + `CodeTransformation: using JAVA_HOME = ${transformByQState.getJavaHome()} since source JDK does not match Maven JDK` + ) + + try { + // When user provided a + await validateCanCompileProject() + } catch (err: any) { + if (err instanceof JavaHomeNotSetError) { + transformByQState.unsetJavaHome() + this.sessionStorage.getSession().conversationState = ConversationState.PROMPT_JAVA_HOME + this.messenger.sendStaticTextResponse('java-home-not-set', data.tabID) + this.messenger.sendChatInputEnabled(data.tabID, true) + this.messenger.sendUpdatePlaceholder( + data.tabID, + `Incompatible JDK, Enter the path to your Java ${transformByQState.getSourceJDKVersion()} installation.` + ) + return + } + throw err + } + await this.prepareProjectForSubmission({ pathToJavaHome, tabID: data.tabID, diff --git a/packages/core/src/codewhisperer/models/model.ts b/packages/core/src/codewhisperer/models/model.ts index a0cbfd679f..9c10db5227 100644 --- a/packages/core/src/codewhisperer/models/model.ts +++ b/packages/core/src/codewhisperer/models/model.ts @@ -598,6 +598,10 @@ export class TransformByQState { this.javaHome = javaHome } + public unsetJavaHome() { + this.javaHome = undefined + } + public setChatControllers(controllers: ChatControllerEventEmitters) { this.chatControllers = controllers } From e2dd1f9c2e9a0ff50ff44c1b4e490d1316ef8c86 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Tue, 7 May 2024 18:58:13 +0200 Subject: [PATCH 4/8] Add explanatory comment. --- .../src/amazonqGumby/chat/controller/messenger/messenger.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts index 520089e355..80200e8ada 100644 --- a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts +++ b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts @@ -197,6 +197,7 @@ export class Messenger { public sendCompilationInProgress(tabID: string) { const message = CodeWhispererConstants.buildStartedChatMessage + // Mynah UI requires us sending `message: undefined` before passing the `message` for animation to work this.dispatcher.sendAsyncEventProgress( new AsyncEventProgressMessage(tabID, { inProgress: true, message: undefined }) ) @@ -353,6 +354,7 @@ export class Messenger { } public sendTransformationIntroduction(tabID: string) { + // Mynah UI requires us sending `message: undefined` before passing the `message` for animation to work this.dispatcher.sendAsyncEventProgress( new AsyncEventProgressMessage(tabID, { inProgress: true, message: undefined }) ) From c7108d610e7b88bc62a369efd9f27eef8cefce18 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Tue, 7 May 2024 19:01:20 +0200 Subject: [PATCH 5/8] Removed incomplete comment. --- packages/core/src/amazonqGumby/chat/controller/controller.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index 750a228e3b..591474f68f 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -326,7 +326,6 @@ export class GumbyController { ) try { - // When user provided a await validateCanCompileProject() } catch (err: any) { if (err instanceof JavaHomeNotSetError) { From 5260634a4d5e79a48e969d076d511e1d9d8f6832 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Fri, 10 May 2024 12:16:56 +0200 Subject: [PATCH 6/8] Add failure message in chat when invalid JDK provided. --- .../chat/controller/controller.ts | 21 +++++++++--- .../chat/controller/messenger/messenger.ts | 13 +++++++ .../controller/messenger/messengerUtils.ts | 34 ++++++++++++------- .../commands/startTransformByQ.ts | 17 ++++------ .../src/codewhisperer/models/constants.ts | 6 ++++ .../core/src/codewhisperer/models/model.ts | 12 ++++++- .../transformByQ/transformMavenHandler.ts | 19 ++++++++++- 7 files changed, 92 insertions(+), 30 deletions(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index 591474f68f..04bd0086bb 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -33,7 +33,7 @@ import { telemetry } from '../../../shared/telemetry/telemetry' import { MetadataResult } from '../../../shared/telemetry/telemetryClient' import { CodeTransformTelemetryState } from '../../telemetry/codeTransformTelemetryState' import { getAuthType } from '../../../codewhisperer/service/transformByQ/transformApiHandler' - +import { getJavaVersionStringUsedByMaven } from '../../../codewhisperer/service/transformByQ/transformMavenHandler' // These events can be interactions within the chat, // or elsewhere in the IDE export interface ChatControllerEventEmitters { @@ -329,14 +329,25 @@ export class GumbyController { await validateCanCompileProject() } catch (err: any) { if (err instanceof JavaHomeNotSetError) { - transformByQState.unsetJavaHome() + const providedJdkVersion = + (await getJavaVersionStringUsedByMaven()) ?? JDKVersion.UNSUPPORTED + const expectedJdkVersion = transformByQState.getSourceJDKVersion() ?? JDKVersion.UNSUPPORTED + getLogger().warn( + `CodeTransformation: non matching JAVA_HOME provided: ${providedJdkVersion} expected: ${expectedJdkVersion} JDK release must match` + ) + if (transformByQState.incrementAndGetJavaHomeAttempts() > 3) { + transformByQState.resetJavaHomeAttempts() + transformByQState.resetJavaHome() + this.messenger.sendRetryableErrorResponse('invalid-java-home', data.tabID) + return + } this.sessionStorage.getSession().conversationState = ConversationState.PROMPT_JAVA_HOME - this.messenger.sendStaticTextResponse('java-home-not-set', data.tabID) - this.messenger.sendChatInputEnabled(data.tabID, true) + this.messenger.sendInvalidJavaHomeProvidedMessage(data.tabID, expectedJdkVersion) this.messenger.sendUpdatePlaceholder( data.tabID, - `Incompatible JDK, Enter the path to your Java ${transformByQState.getSourceJDKVersion()} installation.` + MessengerUtils.createInvalidJavaHomePlaceholder(expectedJdkVersion) ) + this.messenger.sendChatInputEnabled(data.tabID, true) return } throw err diff --git a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts index 80200e8ada..0eb83f7cd5 100644 --- a/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts +++ b/packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts @@ -33,6 +33,7 @@ export type StaticTextResponseType = | 'java-home-not-set' | 'start-transformation-confirmed' | 'job-transmitted' + | 'invalid-java-home-provided' export type ErrorTextResponseType = | 'no-project-found' @@ -194,6 +195,18 @@ export class Messenger { this.dispatcher.sendAsyncEventProgress(new AsyncEventProgressMessage(tabID, { inProgress, message, messageId })) } + public sendInvalidJavaHomeProvidedMessage(tabID: string, expectedJdkVersion: string) { + this.dispatcher.sendChatMessage( + new ChatMessage( + { + message: MessengerUtils.createInvalidJavaHomePromptChatMessage(expectedJdkVersion), + messageType: 'ai-prompt', + }, + tabID + ) + ) + } + public sendCompilationInProgress(tabID: string) { const message = CodeWhispererConstants.buildStartedChatMessage diff --git a/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts b/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts index b499e658f8..6da8256af1 100644 --- a/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts +++ b/packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts @@ -26,26 +26,36 @@ export enum GumbyCommands { } export default class MessengerUtils { - static createJavaHomePrompt = (): string => { - let javaHomePrompt = `${ - CodeWhispererConstants.enterJavaHomeChatMessage - } ${transformByQState.getSourceJDKVersion()}. \n` + static createInstructionsForFindingJavaHome = () => { + const jdkVersion = transformByQState.getSourceJDKVersion() if (os.platform() === 'win32') { - javaHomePrompt += CodeWhispererConstants.windowsJavaHomeHelpChatMessage.replace( - 'JAVA_VERSION_HERE', - transformByQState.getSourceJDKVersion()! - ) + return CodeWhispererConstants.windowsJavaHomeHelpChatMessage.replace('JAVA_VERSION_HERE', jdkVersion!) } else { - const jdkVersion = transformByQState.getSourceJDKVersion() if (jdkVersion === JDKVersion.JDK8) { - javaHomePrompt += ` ${CodeWhispererConstants.nonWindowsJava8HomeHelpChatMessage}` + return ` ${CodeWhispererConstants.nonWindowsJava8HomeHelpChatMessage}` } else if (jdkVersion === JDKVersion.JDK11) { - javaHomePrompt += ` ${CodeWhispererConstants.nonWindowsJava11HomeHelpChatMessage}` + return ` ${CodeWhispererConstants.nonWindowsJava11HomeHelpChatMessage}` } } - return javaHomePrompt + return '' + } + + static createJavaHomePrompt = (): string => { + return ( + `${CodeWhispererConstants.enterJavaHomeChatMessage} ${transformByQState.getSourceJDKVersion()}.\n` + + this.createInstructionsForFindingJavaHome() + ) } + static createInvalidJavaHomePromptChatMessage = (expectedJdkVersion: string): string => + CodeWhispererConstants.invalidJavaHomeProvidedChatMessage( + expectedJdkVersion, + this.createInstructionsForFindingJavaHome() + ) + + static createInvalidJavaHomePlaceholder = (expectedJdkVersion: string): string => + CodeWhispererConstants.invalidJavaHomeProvidedPlaceholder(expectedJdkVersion) + static stringToEnumValue = ( enumObject: T, value: `${T[K]}` diff --git a/packages/core/src/codewhisperer/commands/startTransformByQ.ts b/packages/core/src/codewhisperer/commands/startTransformByQ.ts index f7c24d42e1..a87a474f26 100644 --- a/packages/core/src/codewhisperer/commands/startTransformByQ.ts +++ b/packages/core/src/codewhisperer/commands/startTransformByQ.ts @@ -29,7 +29,11 @@ import { zipCode, } from '../service/transformByQ/transformApiHandler' import { getOpenProjects, validateOpenProjects } from '../service/transformByQ/transformProjectValidationHandler' -import { getVersionData, prepareProjectDependencies } from '../service/transformByQ/transformMavenHandler' +import { + getVersionData, + prepareProjectDependencies, + getJavaVersionUsedByMaven, +} from '../service/transformByQ/transformMavenHandler' import { getStringHash } from '../../shared/utilities/textUtilities' import { CodeTransformCancelSrcComponents, @@ -80,16 +84,7 @@ async function setMaven() { } async function validateJavaHome(): Promise { - const versionData = await getVersionData() - let javaVersionUsedByMaven = versionData.javaVersion - if (javaVersionUsedByMaven !== undefined) { - javaVersionUsedByMaven = javaVersionUsedByMaven.slice(0, 3) - if (javaVersionUsedByMaven === '1.8') { - javaVersionUsedByMaven = JDKVersion.JDK8 - } else if (javaVersionUsedByMaven === '11.') { - javaVersionUsedByMaven = JDKVersion.JDK11 - } - } + const javaVersionUsedByMaven = await getJavaVersionUsedByMaven() if (javaVersionUsedByMaven !== transformByQState.getSourceJDKVersion()) { telemetry.codeTransform_isDoubleClickedToTriggerInvalidProject.emit({ codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(), diff --git a/packages/core/src/codewhisperer/models/constants.ts b/packages/core/src/codewhisperer/models/constants.ts index 007b667267..2a563b0f3e 100644 --- a/packages/core/src/codewhisperer/models/constants.ts +++ b/packages/core/src/codewhisperer/models/constants.ts @@ -547,6 +547,12 @@ export const cleanInstallErrorNotification = export const enterJavaHomeChatMessage = 'Enter the path to JDK ' +export const invalidJavaHomeProvidedChatMessage = (expectedJdkVersion: string, instructions: string) => + `It looks like the path you provided is not where JDK ${expectedJdkVersion} is installed. Since you're transforming Java ${expectedJdkVersion} code, I need the JDK ${expectedJdkVersion} path. To find the JDK ${expectedJdkVersion} path, run the following command in a new IDE terminal:\n ${instructions}` + +export const invalidJavaHomeProvidedPlaceholder = (expectedJdkVersion: string) => + `Enter the JDK ${expectedJdkVersion} path` + export const projectPromptChatMessage = 'I can upgrade your JAVA_VERSION_HERE. To start the transformation, I need some information from you. Choose the project you want to upgrade and the target code version to upgrade to. Then, choose Transform.' diff --git a/packages/core/src/codewhisperer/models/model.ts b/packages/core/src/codewhisperer/models/model.ts index 9c10db5227..f09409ef87 100644 --- a/packages/core/src/codewhisperer/models/model.ts +++ b/packages/core/src/codewhisperer/models/model.ts @@ -386,6 +386,8 @@ export class TransformByQState { private intervalId: NodeJS.Timeout | undefined = undefined + private numAttemptsToGetJavaHome = 0 + public isNotStarted() { return this.transformByQState === TransformByQStatus.NotStarted } @@ -598,10 +600,18 @@ export class TransformByQState { this.javaHome = javaHome } - public unsetJavaHome() { + public resetJavaHome() { this.javaHome = undefined } + public incrementAndGetJavaHomeAttempts() { + return ++this.numAttemptsToGetJavaHome + } + + public resetJavaHomeAttempts() { + this.numAttemptsToGetJavaHome = 0 + } + public setChatControllers(controllers: ChatControllerEventEmitters) { this.chatControllers = controllers } diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts index 53e95575d3..ea919f9daf 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ import * as vscode from 'vscode' -import { FolderInfo, transformByQState } from '../../models/model' +import { FolderInfo, transformByQState, JDKVersion } from '../../models/model' import { getLogger } from '../../../shared/logger' import * as CodeWhispererConstants from '../../models/constants' import { spawnSync, SpawnSyncOptionsWithStringEncoding } from 'child_process' // Consider using ChildProcess once we finalize all spawnSync calls @@ -181,6 +181,23 @@ export async function prepareProjectDependencies(dependenciesFolder: FolderInfo) void vscode.window.showInformationMessage(CodeWhispererConstants.buildSucceededNotification) } +export async function getJavaVersionStringUsedByMaven() { + const versionData = await getVersionData() + return versionData.javaVersion?.slice(0, 3) +} + +export async function getJavaVersionUsedByMaven() { + const javaVersion = await getJavaVersionStringUsedByMaven() + switch (javaVersion) { + case '1.8': + return JDKVersion.JDK8 + case '11.': + return JDKVersion.JDK11 + default: + return JDKVersion.UNSUPPORTED + } +} + export async function getVersionData(): Promise { const baseCommand = transformByQState.getMavenName() // will be one of: 'mvnw.cmd', './mvnw', 'mvn' const modulePath = transformByQState.getProjectPath() From 04f6470490171ec968bbdfd9b6af9baa145d8993 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Wed, 15 May 2024 18:34:41 +0200 Subject: [PATCH 7/8] Moved int to constant. --- packages/core/src/amazonqGumby/chat/controller/controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index c5fff1ec4a..8bf7e48c25 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -66,7 +66,7 @@ export class GumbyController { private readonly messenger: Messenger private readonly sessionStorage: ChatSessionManager private authController: AuthController - + private readonly MAXIMUM_JAVA_HOME_RETRIES = 3 public constructor( private readonly chatControllerMessageListeners: ChatControllerEventEmitters, messenger: Messenger, @@ -389,7 +389,7 @@ export class GumbyController { getLogger().warn( `CodeTransformation: non matching JAVA_HOME provided: ${providedJdkVersion} expected: ${expectedJdkVersion} JDK release must match` ) - if (transformByQState.incrementAndGetJavaHomeAttempts() > 3) { + if (transformByQState.incrementAndGetJavaHomeAttempts() > this.MAXIMUM_JAVA_HOME_RETRIES) { transformByQState.resetJavaHomeAttempts() transformByQState.resetJavaHome() this.messenger.sendUnrecoverableErrorResponse('invalid-java-home', data.tabID) From e8903807590f39f060ab8990fbb0bb82a4c37641 Mon Sep 17 00:00:00 2001 From: Leonardo Araneda Freccero Date: Wed, 15 May 2024 18:41:39 +0200 Subject: [PATCH 8/8] Fix linting. --- packages/core/src/amazonqGumby/chat/controller/controller.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/amazonqGumby/chat/controller/controller.ts b/packages/core/src/amazonqGumby/chat/controller/controller.ts index 8bf7e48c25..16269cdee0 100644 --- a/packages/core/src/amazonqGumby/chat/controller/controller.ts +++ b/packages/core/src/amazonqGumby/chat/controller/controller.ts @@ -66,7 +66,7 @@ export class GumbyController { private readonly messenger: Messenger private readonly sessionStorage: ChatSessionManager private authController: AuthController - private readonly MAXIMUM_JAVA_HOME_RETRIES = 3 + private readonly MaximumJavaHomeRetries = 3 public constructor( private readonly chatControllerMessageListeners: ChatControllerEventEmitters, messenger: Messenger, @@ -389,7 +389,7 @@ export class GumbyController { getLogger().warn( `CodeTransformation: non matching JAVA_HOME provided: ${providedJdkVersion} expected: ${expectedJdkVersion} JDK release must match` ) - if (transformByQState.incrementAndGetJavaHomeAttempts() > this.MAXIMUM_JAVA_HOME_RETRIES) { + if (transformByQState.incrementAndGetJavaHomeAttempts() > this.MaximumJavaHomeRetries) { transformByQState.resetJavaHomeAttempts() transformByQState.resetJavaHome() this.messenger.sendUnrecoverableErrorResponse('invalid-java-home', data.tabID)