Skip to content

Commit 5979df4

Browse files
author
David Hasani
committed
prompt for jdk name instead of path
1 parent 21fb55a commit 5979df4

File tree

8 files changed

+42
-68
lines changed

8 files changed

+42
-68
lines changed

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,11 +399,19 @@ fun buildUserInputCustomDependencyVersionsChatContent() = CodeTransformChatMessa
399399
type = CodeTransformChatMessageType.FinalizedAnswer,
400400
)
401401

402-
fun buildPromptTargetJDKPathChatContent(prompt: String) = CodeTransformChatMessageContent(
403-
message = prompt,
402+
fun buildPromptTargetJDKNameChatContent(version: String) = CodeTransformChatMessageContent(
403+
// TODO: get this text reviewed by Allie
404+
message = "Enter the name of your $version from Settings -> Project Structure -> SDKs.",
404405
type = CodeTransformChatMessageType.FinalizedAnswer,
405406
)
406407

408+
fun buildInvalidTargetJdkNameChatContent(jdkName: String) = CodeTransformChatMessageContent(
409+
// TODO: get this text reviewed by Allie
410+
message = "I could not find '$jdkName' under Settings -> Project Structure -> SDKs. Please add the target JDK there and try again.",
411+
type = CodeTransformChatMessageType.FinalizedAnswer,
412+
followUps = listOf(startNewTransformFollowUp)
413+
)
414+
407415
fun buildCustomDependencyVersionsFileValidChatContent() = CodeTransformChatMessageContent(
408416
message = "I received your .yaml file and will upload it to Q.",
409417
type = CodeTransformChatMessageType.FinalizedAnswer,

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

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.intellij.openapi.fileChooser.FileChooser
99
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
1010
import com.intellij.openapi.module.ModuleUtil
1111
import com.intellij.openapi.projectRoots.JavaSdkVersion
12+
import com.intellij.openapi.projectRoots.ProjectJdkTable
1213
import com.intellij.openapi.util.io.FileUtil.createTempDirectory
1314
import com.intellij.openapi.vfs.VirtualFile
1415
import com.intellij.openapi.vfs.readText
@@ -54,6 +55,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHi
5455
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHilRejectContent
5556
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHilResumeWithErrorContent
5657
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHilResumedContent
58+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildInvalidTargetJdkNameChatContent
5759
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildLanguageUpgradeProjectValidChatContent
5860
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildModuleSchemaFormChatContent
5961
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildModuleSchemaFormIntroChatContent
@@ -75,7 +77,6 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildTr
7577
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildTransformStoppingChatContent
7678
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserCancelledChatContent
7779
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserHilSelection
78-
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputCustomDependencyVersionsChatContent
7980
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputLanguageUpgradeChatContent
8081
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsChatIntroContent
8182
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsFlagChatContent
@@ -121,10 +122,10 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateYam
121122
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeatureEvent
122123
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent
123124
import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
124-
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildPromptTargetJDKPathChatContent
125+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildPromptTargetJDKNameChatContent
125126
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CLIENT_SIDE_BUILD
126127
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformConversationState
127-
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.createJavaHomePrompt
128+
import software.aws.toolkits.jetbrains.utils.notifyStickyInfo
128129
import software.aws.toolkits.resources.message
129130
import software.aws.toolkits.telemetry.CodeTransformPreValidationError
130131

@@ -140,9 +141,9 @@ class CodeTransformChatController(
140141
private val telemetry = CodeTransformTelemetryManager.getInstance(context.project)
141142

142143
override suspend fun processChatPromptMessage(message: IncomingCodeTransformMessage.ChatPrompt) {
143-
if (chatSessionStorage.getSession(message.tabId).conversationState == CodeTransformConversationState.PROMPT_TARGET_JDK_PATH) {
144-
// we are prompting user for target JDK path
145-
processJDKPathChatPromptMessage(message)
144+
if (chatSessionStorage.getSession(message.tabId).conversationState == CodeTransformConversationState.PROMPT_TARGET_JDK_NAME) {
145+
// we are prompting user for target JDK name
146+
processJDKNameChatPromptMessage(message)
146147
return
147148
}
148149

@@ -445,7 +446,7 @@ class CodeTransformChatController(
445446
codeModernizerManager.codeTransformationSession?.let {
446447
it.sessionContext.transformCapabilities = transformCapabilities
447448
}
448-
promptForTargetJdkPath(message.tabId)
449+
promptForTargetJdkName(message.tabId)
449450
// TODO: when custom 1P upgrades ready, delete line above and uncomment line below
450451
// promptForCustomYamlFile()
451452
}
@@ -466,12 +467,22 @@ class CodeTransformChatController(
466467
it.sessionContext.customDependencyVersionsFile = selectedFile
467468
}
468469
codeTransformChatHelper.addNewMessage(buildCustomDependencyVersionsFileValidChatContent())
469-
promptForTargetJdkPath(message.tabId)
470+
promptForTargetJdkName(message.tabId)
470471
}
471472
}
472473

473-
private suspend fun processJDKPathChatPromptMessage(message: IncomingCodeTransformMessage.ChatPrompt) {
474-
codeModernizerManager.codeTransformationSession?.sessionContext?.targetJdkPath = message.message.trim()
474+
private suspend fun processJDKNameChatPromptMessage(message: IncomingCodeTransformMessage.ChatPrompt) {
475+
chatSessionStorage.getSession(message.tabId).conversationState = CodeTransformConversationState.IDLE
476+
codeTransformChatHelper.sendChatInputEnabledMessage(message.tabId, false)
477+
codeTransformChatHelper.sendUpdatePlaceholderMessage(message.tabId, "")
478+
479+
val providedJdkName = message.message.trim().lowercase()
480+
val targetJdkName = ProjectJdkTable.getInstance().allJdks.find { it.name.trim().lowercase() == providedJdkName }?.name
481+
if (targetJdkName == null) {
482+
codeTransformChatHelper.addNewMessage(buildInvalidTargetJdkNameChatContent(providedJdkName))
483+
return
484+
}
485+
codeModernizerManager.codeTransformationSession?.sessionContext?.targetJdkName = targetJdkName
475486
codeTransformChatHelper.addNewMessage(buildUserReplyChatContent(message.message.trim()))
476487
// start local build once we get target JDK path
477488
codeTransformChatHelper.addNewMessage(buildCompileLocalInProgressChatContent())
@@ -512,16 +523,15 @@ dependencyManagement:
512523

513524
override suspend fun processCodeTransformContinueAction(message: IncomingCodeTransformMessage.CodeTransformContinue) {
514525
codeTransformChatHelper.addNewMessage(buildContinueTransformationChatContent())
515-
promptForTargetJdkPath(message.tabId)
526+
promptForTargetJdkName(message.tabId)
516527
}
517528

518-
private suspend fun promptForTargetJdkPath(tabId: String) {
519-
chatSessionStorage.getSession(tabId).conversationState = CodeTransformConversationState.PROMPT_TARGET_JDK_PATH
520-
val targetJdk = codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion?.name.orEmpty()
521-
val javaHomePrompt = createJavaHomePrompt(targetJdk)
522-
codeTransformChatHelper.addNewMessage(buildPromptTargetJDKPathChatContent(javaHomePrompt))
529+
private suspend fun promptForTargetJdkName(tabId: String) {
530+
chatSessionStorage.getSession(tabId).conversationState = CodeTransformConversationState.PROMPT_TARGET_JDK_NAME
531+
val targetJdkVersion = codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion?.name.orEmpty()
532+
codeTransformChatHelper.addNewMessage(buildPromptTargetJDKNameChatContent(targetJdkVersion))
523533
codeTransformChatHelper.sendChatInputEnabledMessage(tabId, true)
524-
codeTransformChatHelper.sendUpdatePlaceholderMessage(tabId, "Enter the path to your Java installation")
534+
codeTransformChatHelper.sendUpdatePlaceholderMessage(tabId, "Enter the name of your $targetJdkVersion")
525535
}
526536

527537
private fun getSourceJdk(moduleConfigurationFile: VirtualFile): JavaSdkVersion {

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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,13 @@ import org.jetbrains.idea.maven.execution.MavenRunConfigurationType
1515
import org.jetbrains.idea.maven.execution.MavenRunnerParameters
1616
import org.jetbrains.idea.maven.execution.MavenRunnerSettings
1717
import software.aws.toolkits.jetbrains.services.codemodernizer.CodeModernizerManager
18-
import com.intellij.openapi.projectRoots.ProjectJdkTable
1918

2019
class TransformMavenRunner(val project: Project) {
2120
private var handler: ProcessHandler? = null
2221
fun run(parameters: MavenRunnerParameters, settings: MavenRunnerSettings, onComplete: TransformRunnable, isClientSideBuild: Boolean = false) {
2322
if (isClientSideBuild) {
24-
// TODO: if we go with this implementation 1) consult UX and
25-
// 2) run this check much sooner in chat with an appropriate error message if JDK is not found
26-
val targetJdkPath = CodeModernizerManager.getInstance(project).codeTransformationSession?.sessionContext?.targetJdkPath
27-
?: throw RuntimeException("No target JDK path provided by user; cannot run client-side build")
28-
val jdkTable = ProjectJdkTable.getInstance()
29-
val targetJdkName = jdkTable.allJdks.find { it.homePath == targetJdkPath }?.name
30-
?: throw RuntimeException("Could not find user's target JDK; cannot run client-side build")
23+
val targetJdkName = CodeModernizerManager.getInstance(project).codeTransformationSession?.sessionContext?.targetJdkName
24+
?: throw RuntimeException("Could not find user's target JDK; cannot run client-side build") // should not happen; already validated earlier
3125
settings.setJreName(targetJdkName)
3226
}
3327

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ data class CodeModernizerSessionContext(
7777
var schema: String? = null,
7878
val sqlMetadataZip: File? = null,
7979
var customDependencyVersionsFile: VirtualFile? = null,
80-
var targetJdkPath: String? = null,
80+
var targetJdkName: String? = null,
8181
var originalUploadZipPath: Path? = null
8282
) : Disposable {
8383
private val mapper = jacksonObjectMapper()

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

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

66
enum class CodeTransformConversationState {
77
PROMPT_OBJECTIVE,
8-
PROMPT_TARGET_JDK_PATH,
8+
PROMPT_TARGET_JDK_NAME,
99
IDLE,
1010
}

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

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,3 @@ fun String.toTransformationLanguage() = when (this) {
8383
"JDK_21" -> TransformationLanguage.JAVA_21
8484
else -> TransformationLanguage.UNKNOWN_TO_SDK_VERSION
8585
}
86-
87-
fun createJavaHomePrompt(jdkVersion: String): String {
88-
var javaHomePrompt = "Enter the path to $jdkVersion.\n\n"
89-
val os = System.getProperty("os.name").lowercase()
90-
if (os.contains("windows")) {
91-
javaHomePrompt += "To find the JDK path, run the following commands in a new terminal: `cd \"C:/Program Files/Java\"` and then `dir`. " +
92-
"If you see your JDK version, run `cd <version>` and then `cd` to show the path."
93-
} else if (os.contains("mac") || os.contains("darwin")) {
94-
val version = when (jdkVersion) {
95-
"JDK_1_8" -> "1.8"
96-
"JDK_11" -> "11"
97-
"JDK_17" -> "17"
98-
"JDK_21" -> "21"
99-
else -> "JAVA_VERSION" // shouldn't happen; we only support Java 8, 11, 17, and 21
100-
}
101-
javaHomePrompt += "To find the JDK path, run the following command in a new terminal: `/usr/libexec/java_home -v $version`"
102-
} else {
103-
javaHomePrompt += "To find the JDK path, run the following command in a new terminal: `update-java-alternatives --list`"
104-
}
105-
return javaHomePrompt
106-
}

plugins/amazonq/codetransform/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codemodernizer/CodeWhispererCodeModernizerUtilsTest.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Transformation
2525
import software.amazon.awssdk.services.codewhispererruntime.model.TransformationStep
2626
import software.amazon.awssdk.services.ssooidc.model.InvalidGrantException
2727
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformType
28-
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.createJavaHomePrompt
2928
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.createClientSideBuildUploadZip
3029
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getBillingText
3130
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getClientInstructionArtifactId
@@ -303,22 +302,6 @@ class CodeWhispererCodeModernizerUtilsTest : CodeWhispererCodeModernizerTestBase
303302
zipFile.delete()
304303
}
305304

306-
@Test
307-
fun `createJavaHomePrompt returns Windows instructions when on Windows`() {
308-
System.setProperty("os.name", "Windows 10")
309-
val prompt = createJavaHomePrompt("JDK_11")
310-
assertThat(prompt).contains("Enter the path to JDK_11")
311-
assertThat(prompt).contains("cd \"C:/Program Files/Java\"")
312-
}
313-
314-
@Test
315-
fun `createJavaHomePrompt returns Mac instructions with correct version`() {
316-
System.setProperty("os.name", "Mac OS X")
317-
val prompt = createJavaHomePrompt("JDK_11")
318-
assertThat(prompt).contains("Enter the path to JDK_11")
319-
assertThat(prompt).contains("/usr/libexec/java_home -v 11")
320-
}
321-
322305
@Test
323306
fun `parseBuildFile can detect absolute paths in build file`() {
324307
val module = projectRule.module

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,6 @@ codemodernizer.chat.message.one_or_multiple_diffs=If you would like to update an
669669
codemodernizer.chat.message.one_or_multiple_diffs_form.multiple_diffs=Multiple diffs
670670
codemodernizer.chat.message.one_or_multiple_diffs_form.one_diff=One diff
671671
codemodernizer.chat.message.one_or_multiple_diffs_form.response=Okay, I will create {0} with my proposed changes.
672-
codemodernizer.chat.message.permission_to_build=I will build your project on this machine throughout the transformation.
673672
codemodernizer.chat.message.result.fail=Sorry, I ran into an issue during the transformation. Please try again.
674673
codemodernizer.chat.message.result.fail_initial_build=I am having trouble building your project in the secure build environment and couldn't complete the transformation.
675674
codemodernizer.chat.message.result.fail_initial_build_no_build_log=I am having trouble building your project in the secure build environment: {0}.
@@ -680,6 +679,7 @@ codemodernizer.chat.message.result.success=I successfully completed your transfo
680679
codemodernizer.chat.message.result.success.multiple_diffs=I successfully completed your transformation. You will be able to accept changes from one diff at a time. If you reject changes in one diff, you will not be able to view or accept changes in the other diffs. The transformation summary has details about the changes I'm proposing.
681680
codemodernizer.chat.message.result.zip_too_large=Sorry, your project size exceeds the Amazon Q Code Transformation upload limit of 2GB.
682681
codemodernizer.chat.message.resume_ongoing=I'm still transforming your code. It can take 10 to 30 minutes to upgrade your code, depending on the size of your module. To monitor progress, go to the Transformation Hub.
682+
// TODO: get text from Allie for this
683683
codemodernizer.chat.message.skip_tests=I will build your module using `mvn test` by default. If you would like me to build your module without running unit tests, I will use `mvn test-compile`.
684684
codemodernizer.chat.message.skip_tests_form.response=Okay, I will {0} when building your module.
685685
codemodernizer.chat.message.skip_tests_form.run_tests=Run unit tests

0 commit comments

Comments
 (0)