Skip to content

Commit f4fca12

Browse files
author
David Hasani
committed
first commit for csb
1 parent f9f19d5 commit f4fca12

File tree

13 files changed

+211
-5
lines changed

13 files changed

+211
-5
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ private enum class CodeTransformMessageTypes(val type: String) {
3838
ChatPrompt("chat-prompt"), // for getting the transformation objective
3939
CodeTransformStart("codetransform-start"),
4040
CodeTransformSelectSQLMetadata("codetransform-select-sql-metadata"),
41+
CodeTransformConfirmCustomDependencyVersions("codetransform-input-confirm-custom-dependency-versions"),
4142
CodeTransformSelectSQLModuleSchema("codetransform-select-sql-module-schema"),
4243
CodeTransformStop("codetransform-stop"),
4344
CodeTransformCancel("codetransform-cancel"),
45+
CodeTransformContinue("codetransform-continue"),
4446
CodeTransformConfirmSkipTests("codetransform-confirm-skip-tests"),
4547
CodeTransformConfirmOneOrMultipleDiffs("codetransform-confirm-one-or-multiple-diffs"),
4648
CodeTransformNew("codetransform-new"),
@@ -71,9 +73,11 @@ class CodeTransformChatApp : AmazonQApp {
7173
CodeTransformMessageTypes.Transform.type to IncomingCodeTransformMessage.Transform::class,
7274
CodeTransformMessageTypes.CodeTransformStart.type to IncomingCodeTransformMessage.CodeTransformStart::class,
7375
CodeTransformMessageTypes.CodeTransformSelectSQLMetadata.type to IncomingCodeTransformMessage.CodeTransformSelectSQLMetadata::class,
76+
CodeTransformMessageTypes.CodeTransformConfirmCustomDependencyVersions.type to IncomingCodeTransformMessage.CodeTransformConfirmCustomDependencyVersions::class,
7477
CodeTransformMessageTypes.CodeTransformSelectSQLModuleSchema.type to IncomingCodeTransformMessage.CodeTransformSelectSQLModuleSchema::class,
7578
CodeTransformMessageTypes.CodeTransformStop.type to IncomingCodeTransformMessage.CodeTransformStop::class,
7679
CodeTransformMessageTypes.CodeTransformCancel.type to IncomingCodeTransformMessage.CodeTransformCancel::class,
80+
CodeTransformMessageTypes.CodeTransformContinue.type to IncomingCodeTransformMessage.CodeTransformContinue::class,
7781
CodeTransformMessageTypes.ChatPrompt.type to IncomingCodeTransformMessage.ChatPrompt::class,
7882
CodeTransformMessageTypes.CodeTransformConfirmSkipTests.type to IncomingCodeTransformMessage.CodeTransformConfirmSkipTests::class,
7983
CodeTransformMessageTypes.CodeTransformConfirmOneOrMultipleDiffs.type to IncomingCodeTransformMessage.CodeTransformConfirmOneOrMultipleDiffs::class,
@@ -170,12 +174,14 @@ class CodeTransformChatApp : AmazonQApp {
170174
is IncomingCodeTransformMessage.CodeTransformSelectSQLMetadata -> inboundAppMessagesHandler.processCodeTransformSelectSQLMetadataAction(message)
171175
is IncomingCodeTransformMessage.CodeTransformSelectSQLModuleSchema ->
172176
inboundAppMessagesHandler.processCodeTransformSelectSQLModuleSchemaAction(message)
173-
177+
is IncomingCodeTransformMessage.CodeTransformConfirmCustomDependencyVersions ->
178+
inboundAppMessagesHandler.processCodeTransformCustomDependencyVersions(message)
174179
is IncomingCodeTransformMessage.CodeTransformCancel -> inboundAppMessagesHandler.processCodeTransformCancelAction(message)
175180
is IncomingCodeTransformMessage.CodeTransformStop -> inboundAppMessagesHandler.processCodeTransformStopAction(message.tabId)
176181
is IncomingCodeTransformMessage.ChatPrompt -> inboundAppMessagesHandler.processChatPromptMessage(message)
177182
is IncomingCodeTransformMessage.CodeTransformConfirmSkipTests -> inboundAppMessagesHandler.processCodeTransformConfirmSkipTests(message)
178183
is IncomingCodeTransformMessage.CodeTransformConfirmOneOrMultipleDiffs -> inboundAppMessagesHandler.processCodeTransformOneOrMultipleDiffs(message)
184+
is IncomingCodeTransformMessage.CodeTransformContinue -> inboundAppMessagesHandler.processCodeTransformContinueAction(message)
179185
is IncomingCodeTransformMessage.CodeTransformNew -> inboundAppMessagesHandler.processCodeTransformNewAction(message)
180186
is IncomingCodeTransformMessage.CodeTransformOpenTransformHub -> inboundAppMessagesHandler.processCodeTransformOpenTransformHub(message)
181187
is IncomingCodeTransformMessage.CodeTransformOpenMvnBuild -> inboundAppMessagesHandler.processCodeTransformOpenMvnBuild(message)

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ interface InboundAppMessagesHandler {
1111

1212
suspend fun processCodeTransformCancelAction(message: IncomingCodeTransformMessage.CodeTransformCancel)
1313

14+
suspend fun processCodeTransformContinueAction(message: IncomingCodeTransformMessage.CodeTransformContinue)
15+
1416
suspend fun processCodeTransformStartAction(message: IncomingCodeTransformMessage.CodeTransformStart)
1517

1618
suspend fun processCodeTransformSelectSQLMetadataAction(message: IncomingCodeTransformMessage.CodeTransformSelectSQLMetadata)
1719

1820
suspend fun processCodeTransformSelectSQLModuleSchemaAction(message: IncomingCodeTransformMessage.CodeTransformSelectSQLModuleSchema)
1921

22+
suspend fun processCodeTransformCustomDependencyVersions(message: IncomingCodeTransformMessage.CodeTransformConfirmCustomDependencyVersions)
23+
2024
suspend fun processCodeTransformStopAction(tabId: String)
2125

2226
suspend fun processChatPromptMessage(message: IncomingCodeTransformMessage.ChatPrompt)

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ private val cancelUserSelectionButton = Button(
4444
id = CodeTransformButtonId.CancelTransformation.id,
4545
)
4646

47+
// used to continue transformation without providing custom YAML file
48+
private val continueTransformationButton = Button(
49+
keepCardAfterClick = false,
50+
waitMandatoryFormItems = false,
51+
text = "Continue without this",
52+
id = CodeTransformButtonId.ContinueTransformation.id,
53+
)
54+
4755
private val confirmUserSelectionLanguageUpgradeButton = Button(
4856
keepCardAfterClick = false,
4957
waitMandatoryFormItems = true,
@@ -79,6 +87,13 @@ private val confirmOneOrMultipleDiffsSelectionButton = Button(
7987
id = CodeTransformButtonId.ConfirmOneOrMultipleDiffs.id,
8088
)
8189

90+
private val confirmCustomDependencyVersionsButton = Button(
91+
keepCardAfterClick = true,
92+
waitMandatoryFormItems = true, // TODO: what does this do?
93+
text = "Select file",
94+
id = CodeTransformButtonId.ConfirmCustomDependencyVersions.id,
95+
)
96+
8297
private val openMvnBuildButton = Button(
8398
id = CodeTransformButtonId.OpenMvnBuild.id,
8499
text = message("codemodernizer.chat.message.button.view_build"),
@@ -375,6 +390,20 @@ fun buildUserInputSQLConversionMetadataChatContent() = CodeTransformChatMessageC
375390
type = CodeTransformChatMessageType.FinalizedAnswer,
376391
)
377392

393+
fun buildUserInputCustomDependencyVersionsChatContent() = CodeTransformChatMessageContent(
394+
message = "Optionally, provide a .YAML file which specifies custom dependency versions you want Q to upgrade to.",
395+
buttons = listOf(
396+
confirmCustomDependencyVersionsButton,
397+
continueTransformationButton,
398+
),
399+
type = CodeTransformChatMessageType.FinalizedAnswer,
400+
)
401+
402+
fun buildCustomDependencyVersionsFileValidChatContent() = CodeTransformChatMessageContent(
403+
message = "I received your .yaml file and will upload it to Q.",
404+
type = CodeTransformChatMessageType.FinalizedAnswer,
405+
)
406+
378407
fun buildModuleSchemaFormChatContent(project: Project, javaModules: List<VirtualFile>, schemaOptions: Set<String>) = CodeTransformChatMessageContent(
379408
type = CodeTransformChatMessageType.FinalizedAnswer,
380409
buttons = listOf(
@@ -416,6 +445,11 @@ fun buildSQLMetadataValidationErrorChatContent(errorReason: String) = CodeTransf
416445
message = errorReason,
417446
)
418447

448+
fun buildCustomDependencyVersionsFileInvalidChatContent() = CodeTransformChatMessageContent(
449+
type = CodeTransformChatMessageType.FinalizedAnswer,
450+
message = "The .yaml file you uploaded does not follow the format of the sample YAML file provided.",
451+
)
452+
419453
fun buildUserCancelledChatContent() = CodeTransformChatMessageContent(
420454
type = CodeTransformChatMessageType.FinalizedAnswer,
421455
message = message("codemodernizer.chat.message.transform_cancelled_by_user"),
@@ -451,6 +485,11 @@ fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String, targ
451485
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName, targetJdkVersion)
452486
)
453487

488+
fun buildContinueTransformationChatContent() = CodeTransformChatMessageContent(
489+
type = CodeTransformChatMessageType.FinalizedAnswer,
490+
message = "Ok, I will continue without this information.",
491+
)
492+
454493
fun buildCompileLocalInProgressChatContent() = CodeTransformChatMessageContent(
455494
type = CodeTransformChatMessageType.PendingAnswer,
456495
message = message("codemodernizer.chat.message.local_build_begin"),

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

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.intellij.openapi.module.ModuleUtil
1111
import com.intellij.openapi.projectRoots.JavaSdkVersion
1212
import com.intellij.openapi.util.io.FileUtil.createTempDirectory
1313
import com.intellij.openapi.vfs.VirtualFile
14+
import com.intellij.openapi.vfs.readText
1415
import kotlinx.coroutines.delay
1516
import kotlinx.coroutines.runBlocking
1617
import kotlinx.coroutines.withContext
@@ -43,6 +44,9 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCo
4344
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCompileLocalFailedNoJdkChatContent
4445
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCompileLocalInProgressChatContent
4546
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCompileLocalSuccessChatContent
47+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildContinueTransformationChatContent
48+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCustomDependencyVersionsFileInvalidChatContent
49+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildCustomDependencyVersionsFileValidChatContent
4650
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildDownloadFailureChatContent
4751
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHilCannotResumeContent
4852
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildHilErrorContent
@@ -71,6 +75,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildTr
7175
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildTransformStoppingChatContent
7276
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserCancelledChatContent
7377
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserHilSelection
78+
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputCustomDependencyVersionsChatContent
7479
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputLanguageUpgradeChatContent
7580
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsChatIntroContent
7681
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.buildUserInputOneOrMultipleDiffsFlagChatContent
@@ -112,9 +117,14 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.toVirtualFi
112117
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.tryGetJdk
113118
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.unzipFile
114119
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateSctMetadata
120+
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.validateYamlFile
115121
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeatureEvent
116122
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent
117123
import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
124+
import com.intellij.openapi.application.ApplicationManager
125+
import com.intellij.openapi.fileEditor.FileEditorManager
126+
import com.intellij.testFramework.LightVirtualFile
127+
import org.jetbrains.yaml.YAMLFileType
118128
import software.aws.toolkits.resources.message
119129
import software.aws.toolkits.telemetry.CodeTransformPreValidationError
120130

@@ -353,7 +363,7 @@ class CodeTransformChatController(
353363
withContext(EDT) {
354364
val descriptor = FileChooserDescriptorFactory.createSingleFileDescriptor()
355365
.withDescription("Select metadata file")
356-
.withFileFilter { it.extension == "zip" }
366+
.withExtensionFilter("zip")
357367

358368
val selectedZipFile = FileChooser.chooseFile(descriptor, null, null) ?: return@withContext
359369
val extractedZip = createTempDirectory("codeTransformSQLMetadata", null)
@@ -422,9 +432,65 @@ class CodeTransformChatController(
422432
}
423433
telemetry.submitSelection(message.oneOrMultipleDiffsSelection)
424434
codeTransformChatHelper.addNewMessage(buildUserOneOrMultipleDiffsSelectionChatContent(message.oneOrMultipleDiffsSelection))
425-
codeTransformChatHelper.addNewMessage(buildCompileLocalInProgressChatContent())
435+
codeTransformChatHelper.addNewMessage(buildUserInputCustomDependencyVersionsChatContent())
436+
val sampleYAML = """
437+
name: "custom-dependency-management"
438+
description: "Custom dependency version management for Java migration from JDK 8/11/17 to JDK 17/21"
439+
440+
dependencyManagement:
441+
dependencies:
442+
- identifier: "com.example:library1"
443+
targetVersion: "2.1.0"
444+
versionProperty: "library1.version" # Optional
445+
originType: "FIRST_PARTY" # or "THIRD_PARTY" # Optional
446+
- identifier: "com.example:library2"
447+
targetVersion: "3.0.0"
448+
originType: "THIRD_PARTY"
449+
plugins:
450+
- identifier: "com.example.plugin"
451+
targetVersion: "1.2.0"
452+
versionProperty: "plugin.version" # Optional
453+
""".trimIndent()
454+
455+
val virtualFile = LightVirtualFile("sample-dependency-management.yaml", YAMLFileType.YML, sampleYAML)
456+
virtualFile.isWritable = true
457+
ApplicationManager.getApplication().invokeLater {
458+
FileEditorManager.getInstance(context.project).openFile(virtualFile, true)
459+
}
426460
codeModernizerManager.codeTransformationSession?.let {
427461
it.sessionContext.transformCapabilities = transformCapabilities
462+
}
463+
}
464+
465+
override suspend fun processCodeTransformCustomDependencyVersions(message: IncomingCodeTransformMessage.CodeTransformConfirmCustomDependencyVersions) {
466+
withContext(EDT) {
467+
val descriptor = FileChooserDescriptorFactory.createSingleFileDescriptor()
468+
.withDescription("Select .yaml file")
469+
.withExtensionFilter("yaml")
470+
val selectedFile = FileChooser.chooseFile(descriptor, null, null) ?: return@withContext
471+
val isValid = validateYamlFile(selectedFile.readText())
472+
if (!isValid) {
473+
codeTransformChatHelper.addNewMessage(buildCustomDependencyVersionsFileInvalidChatContent())
474+
codeTransformChatHelper.addNewMessage(buildStartNewTransformFollowup())
475+
return@withContext
476+
}
477+
codeModernizerManager.codeTransformationSession?.let {
478+
it.sessionContext.customDependencyVersionsFile = selectedFile
479+
}
480+
codeTransformChatHelper.addNewMessage(buildCustomDependencyVersionsFileValidChatContent())
481+
codeTransformChatHelper.addNewMessage(buildCompileLocalInProgressChatContent())
482+
codeModernizerManager.codeTransformationSession?.let {
483+
codeModernizerManager.runLocalMavenBuild(context.project, it)
484+
}
485+
}
486+
}
487+
488+
override suspend fun processCodeTransformContinueAction(message: IncomingCodeTransformMessage.CodeTransformContinue) {
489+
codeTransformChatHelper.addNewMessage(buildContinueTransformationChatContent())
490+
// if user doesn't provide a custom .yaml file, just move on with local build
491+
// TODO: potentially we want to ask user to provide target JDK path?
492+
codeTransformChatHelper.addNewMessage(buildCompileLocalInProgressChatContent())
493+
codeModernizerManager.codeTransformationSession?.let {
428494
codeModernizerManager.runLocalMavenBuild(context.project, it)
429495
}
430496
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package software.aws.toolkits.jetbrains.services.codemodernizer.ideMaven
66
import com.intellij.openapi.application.runInEdt
77
import com.intellij.openapi.module.ModuleUtilCore
88
import com.intellij.openapi.project.Project
9+
import com.intellij.openapi.projectRoots.ProjectJdkTable
910
import com.intellij.openapi.roots.ModuleRootManager
1011
import com.intellij.openapi.roots.ProjectRootManager
1112
import com.intellij.openapi.vfs.LocalFileSystem
@@ -18,6 +19,7 @@ import software.aws.toolkits.core.utils.info
1819
import software.aws.toolkits.jetbrains.services.codemodernizer.CodeTransformTelemetryManager
1920
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenCopyCommandsResult
2021
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenDependencyReportCommandsResult
22+
import software.aws.toolkits.jetbrains.utils.notifyStickyInfo
2123
import software.aws.toolkits.telemetry.CodeTransformBuildCommand
2224
import software.aws.toolkits.telemetry.Result
2325
import java.io.File
@@ -69,6 +71,11 @@ fun runMavenCopyCommands(sourceFolder: File, logBuilder: StringBuilder, logger:
6971
// Create shared parameters
7072
val transformMvnRunner = TransformMavenRunner(project)
7173
val mvnSettings = MavenRunner.getInstance(project).settings.clone() // clone required to avoid editing user settings
74+
notifyStickyInfo("current jreName", mvnSettings.jreName)
75+
mvnSettings.setJreName("corretto-21")
76+
// use ProjectJdkTable.getInstance().allJdks to join all of the "name"s of the list
77+
val jreNames = ProjectJdkTable.getInstance().allJdks.joinToString(", ") { it.name }
78+
notifyStickyInfo("jreNames", jreNames)
7279

7380
val sourceVirtualFile = LocalFileSystem.getInstance().findFileByIoFile(sourceFolder)
7481
val module = sourceVirtualFile?.let { ModuleUtilCore.findModuleForFile(it, project) }

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ enum class CodeTransformButtonId(val id: String) {
2020
SelectSQLMetadata("codetransform-input-select-sql-metadata"),
2121
SelectSQLModuleSchema("codetransform-input-select-sql-module-schema"),
2222
CancelTransformation("codetransform-input-cancel"),
23+
ContinueTransformation("codetransform-input-continue"),
2324
ConfirmSkipTests("codetransform-input-confirm-skip-tests"),
2425
ConfirmOneOrMultipleDiffs("codetransform-input-confirm-one-or-multiple-diffs"),
26+
ConfirmCustomDependencyVersions("codetransform-input-confirm-custom-dependency-versions"),
2527
StopTransformation("stop_transform"),
2628
OpenTransformationHub("open_transformation_hub"),
2729
OpenMvnBuild("open_mvn_build"),
@@ -103,6 +105,10 @@ sealed interface IncomingCodeTransformMessage : CodeTransformBaseMessage {
103105
@JsonProperty("tabID") val tabId: String,
104106
) : IncomingCodeTransformMessage
105107

108+
data class CodeTransformContinue(
109+
@JsonProperty("tabID") val tabId: String,
110+
) : IncomingCodeTransformMessage
111+
106112
data class CodeTransformConfirmSkipTests(
107113
@JsonProperty("tabID") val tabId: String,
108114
val skipTestsSelection: String,
@@ -113,6 +119,10 @@ sealed interface IncomingCodeTransformMessage : CodeTransformBaseMessage {
113119
val oneOrMultipleDiffsSelection: String,
114120
) : IncomingCodeTransformMessage
115121

122+
data class CodeTransformConfirmCustomDependencyVersions(
123+
@JsonProperty("tabID") val tabId: String,
124+
) : IncomingCodeTransformMessage
125+
116126
data class CodeTransformOpenMvnBuild(
117127
@JsonProperty("tabID") val tabId: String,
118128
) : IncomingCodeTransformMessage

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ data class CodeModernizerSessionContext(
7171
val sourceServerName: String? = null,
7272
var schema: String? = null,
7373
val sqlMetadataZip: File? = null,
74+
var customDependencyVersionsFile: VirtualFile? = null,
7475
) {
7576
private val mapper = jacksonObjectMapper()
7677
private val ignoredDependencyFileExtensions = setOf(INVALID_SUFFIX_SHA, INVALID_SUFFIX_REPOSITORIES)
@@ -192,6 +193,7 @@ data class CodeModernizerSessionContext(
192193
}
193194

194195
fun createZipWithModuleFiles(copyResult: MavenCopyCommandsResult?): ZipCreationResult {
196+
// TODO: include custom yaml file in ZIP and in manifest.json
195197
val root = configurationFile?.parent
196198
val sourceFolder = File(root?.path)
197199
val buildLogBuilder = StringBuilder("Starting Build Log...\n")

0 commit comments

Comments
 (0)