Skip to content

Commit e366a0c

Browse files
Merge main into feature/dev-execution
2 parents ebbb5f3 + db2e39f commit e366a0c

File tree

12 files changed

+72
-30
lines changed

12 files changed

+72
-30
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" : "/transform: support transformations to Java 21"
4+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ const val DOWNLOAD_PROXY_WILDCARD_ERROR: String = "Dangling meta character '*' n
6565
const val DOWNLOAD_SSL_HANDSHAKE_ERROR: String = "Unable to execute HTTP request: javax.net.ssl.SSLHandshakeException"
6666
const val INVALID_ARTIFACT_ERROR: String = "Invalid artifact"
6767
val patchDescriptions = mapOf(
68-
"Prepare minimal upgrade to Java 17" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks.",
68+
"Prepare minimal upgrade to Java 17" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks in Java 17.",
69+
"Prepare minimal upgrade to Java 21" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks in Java 21.",
6970
"Popular Enterprise Specifications and Application Frameworks upgrade" to "This diff patch covers the set of upgrades for Jakarta EE 10, Hibernate 6.2, " +
7071
"and Micronaut 3.",
7172
"HTTP Client Utilities, Apache Commons Utilities, and Web Frameworks" to "This diff patch covers the set of upgrades for Apache HTTP Client 5, Apache " +

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
122122
}
123123
private val artifactHandler = ArtifactHandler(project, GumbyClient.getInstance(project))
124124
private val supportedJavaMappings = mapOf(
125-
JavaSdkVersion.JDK_1_8 to setOf(JavaSdkVersion.JDK_17),
126-
JavaSdkVersion.JDK_11 to setOf(JavaSdkVersion.JDK_17),
127-
JavaSdkVersion.JDK_17 to setOf(JavaSdkVersion.JDK_17),
125+
JavaSdkVersion.JDK_1_8 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
126+
JavaSdkVersion.JDK_11 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
127+
JavaSdkVersion.JDK_17 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
128+
JavaSdkVersion.JDK_21 to setOf(JavaSdkVersion.JDK_21),
128129
)
129130

130131
init {

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.codemodernizer.constants
55

66
import com.intellij.openapi.project.Project
7+
import com.intellij.openapi.projectRoots.JavaSdkVersion
78
import com.intellij.openapi.vfs.VirtualFile
89
import software.amazon.awssdk.services.codewhispererstreaming.model.TransformationDownloadArtifactType
910
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_PREREQUISITES
@@ -176,8 +177,12 @@ private val selectTargetVersionFormItem = FormItem(
176177
mandatory = true,
177178
options = listOf(
178179
FormItemOption(
179-
label = "JDK17",
180-
value = "17",
180+
label = JavaSdkVersion.JDK_17.toString(),
181+
value = JavaSdkVersion.JDK_17.toString(),
182+
),
183+
FormItemOption(
184+
label = JavaSdkVersion.JDK_21.toString(),
185+
value = JavaSdkVersion.JDK_21.toString(),
181186
)
182187
)
183188
)
@@ -226,14 +231,14 @@ private val selectOneOrMultipleDiffsFlagFormItem = FormItem(
226231
)
227232
)
228233

229-
private fun getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName: String): String = """
234+
private fun getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName: String, targetJdkVersion: String): String = """
230235
### ${message("codemodernizer.chat.prompt.title.details")}
231236
-------------
232237
233238
| | |
234239
| :------------------- | -------: |
235240
| **${message("codemodernizer.chat.prompt.label.module")}** | $moduleName |
236-
| **${message("codemodernizer.chat.prompt.label.target_version")}** | JDK17 |
241+
| **${message("codemodernizer.chat.prompt.label.target_version")}** | $targetJdkVersion |
237242
""".trimIndent()
238243

239244
private fun getUserSQLConversionSelectionFormattedMarkdown(moduleName: String, schema: String) = """
@@ -286,6 +291,7 @@ fun buildProjectInvalidChatContent(validationResult: ValidationResult): CodeTran
286291
CodeTransformPreValidationError.EmptyProject -> message("codemodernizer.notification.warn.invalid_project.description.reason.missing_content_roots")
287292
CodeTransformPreValidationError.UnsupportedBuildSystem -> message("codemodernizer.chat.message.validation.error.no_pom")
288293
CodeTransformPreValidationError.NoJavaProject -> message("codemodernizer.chat.message.validation.error.no_java_project")
294+
CodeTransformPreValidationError.JavaDowngradeAttempt -> message("codemodernizer.chat.message.validation.error.downgrade_attempt")
289295
else -> message("codemodernizer.chat.message.validation.error.other")
290296
}
291297

@@ -318,9 +324,9 @@ fun buildUserInputSkipTestsFlagChatContent(): CodeTransformChatMessageContent =
318324
formItems = listOf(selectSkipTestsFlagFormItem),
319325
type = CodeTransformChatMessageType.FinalizedAnswer,
320326
)
321-
fun buildUserInputOneOrMultipleDiffsChatIntroContent(): CodeTransformChatMessageContent =
327+
fun buildUserInputOneOrMultipleDiffsChatIntroContent(version: String): CodeTransformChatMessageContent =
322328
CodeTransformChatMessageContent(
323-
message = message("codemodernizer.chat.message.one_or_multiple_diffs"),
329+
message = message("codemodernizer.chat.message.one_or_multiple_diffs", version.substring(4)), // extract "17" / "21" from "JDK_17" / "JDK_21"
324330
type = CodeTransformChatMessageType.FinalizedAnswer,
325331
)
326332
fun buildUserInputOneOrMultipleDiffsFlagChatContent(): CodeTransformChatMessageContent =
@@ -441,9 +447,9 @@ fun buildUserSQLConversionSelectionSummaryChatContent(moduleName: String, schema
441447
message = getUserSQLConversionSelectionFormattedMarkdown(moduleName, schema)
442448
)
443449

444-
fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String) = CodeTransformChatMessageContent(
450+
fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String, targetJdkVersion: String) = CodeTransformChatMessageContent(
445451
type = CodeTransformChatMessageType.Prompt,
446-
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName)
452+
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName, targetJdkVersion)
447453
)
448454

449455
fun buildCompileLocalInProgressChatContent() = CodeTransformChatMessageContent(

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransfo
9393
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CustomerSelection
9494
import software.aws.toolkits.jetbrains.services.codemodernizer.model.DownloadArtifactResult
9595
import software.aws.toolkits.jetbrains.services.codemodernizer.model.DownloadFailureReason
96+
import software.aws.toolkits.jetbrains.services.codemodernizer.model.InvalidTelemetryReason
9697
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
9798
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MAVEN_BUILD_RUN_UNIT_TESTS
9899
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MAVEN_BUILD_SKIP_UNIT_TESTS
@@ -115,6 +116,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeature
115116
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent
116117
import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
117118
import software.aws.toolkits.resources.message
119+
import software.aws.toolkits.telemetry.CodeTransformPreValidationError
118120

119121
class CodeTransformChatController(
120122
private val context: AmazonQAppInitContext,
@@ -298,14 +300,28 @@ class CodeTransformChatController(
298300
val moduleVirtualFile: VirtualFile = modulePath.toVirtualFile() as VirtualFile
299301
val moduleName = context.project.getModuleOrProjectNameForFile(moduleVirtualFile)
300302

301-
codeTransformChatHelper.addNewMessage(buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName))
303+
codeTransformChatHelper.addNewMessage(buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName, targetVersion))
302304

303305
val sourceJdk = getSourceJdk(moduleVirtualFile)
304306

307+
val sourceVersion = sourceJdk.toString()
308+
309+
if (sourceVersion == JavaSdkVersion.JDK_21.toString() && targetVersion == JavaSdkVersion.JDK_17.toString()) {
310+
codeTransformChatHelper.addNewMessage(
311+
buildProjectInvalidChatContent(
312+
ValidationResult(
313+
false,
314+
InvalidTelemetryReason(CodeTransformPreValidationError.JavaDowngradeAttempt)
315+
)
316+
)
317+
)
318+
return
319+
}
320+
305321
val selection = CustomerSelection(
306322
configurationFile = moduleVirtualFile,
307323
sourceJavaVersion = sourceJdk,
308-
targetJavaVersion = JavaSdkVersion.JDK_17,
324+
targetJavaVersion = if (targetVersion == JavaSdkVersion.JDK_17.toString()) JavaSdkVersion.JDK_17 else JavaSdkVersion.JDK_21,
309325
)
310326

311327
// Create and set a session
@@ -387,8 +403,9 @@ class CodeTransformChatController(
387403
codeModernizerManager.codeTransformationSession?.let {
388404
it.sessionContext.customBuildCommand = customBuildCommand
389405
}
406+
val targetJdkVersion = codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion?.name.orEmpty()
390407
codeTransformChatHelper.run {
391-
addNewMessage(buildUserInputOneOrMultipleDiffsChatIntroContent())
408+
addNewMessage(buildUserInputOneOrMultipleDiffsChatIntroContent(targetJdkVersion))
392409
addNewMessage(buildUserInputOneOrMultipleDiffsFlagChatContent())
393410
}
394411
}

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
@@ -63,7 +63,7 @@ data class CodeModernizerSessionContext(
6363
val project: Project,
6464
var configurationFile: VirtualFile? = null, // used to ZIP module
6565
val sourceJavaVersion: JavaSdkVersion, // always needed for startJob API
66-
val targetJavaVersion: JavaSdkVersion = JavaSdkVersion.JDK_17, // only one supported
66+
val targetJavaVersion: JavaSdkVersion, // 17 or 21
6767
var transformCapabilities: List<String> = listOf(EXPLAINABILITY_V1),
6868
var customBuildCommand: String = MAVEN_BUILD_RUN_UNIT_TESTS, // run unit tests by default
6969
val sourceVendor: String = ORACLE_DB, // only one supported

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import java.io.File
1010
data class CustomerSelection(
1111
val configurationFile: VirtualFile? = null, // used to ZIP module
1212
val sourceJavaVersion: JavaSdkVersion, // always needed, use default of JDK_8 for SQL conversions for startJob API call
13-
val targetJavaVersion: JavaSdkVersion = JavaSdkVersion.JDK_17,
13+
val targetJavaVersion: JavaSdkVersion, // 17 or 21
1414
val sourceVendor: String = ORACLE_DB, // only one supported
1515
val targetVendor: String? = null,
1616
val sourceServerName: String? = null,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,6 @@ fun String.toTransformationLanguage() = when (this) {
8080
"JDK_1_8" -> TransformationLanguage.JAVA_8
8181
"JDK_11" -> TransformationLanguage.JAVA_11
8282
"JDK_17" -> TransformationLanguage.JAVA_17
83+
"JDK_21" -> TransformationLanguage.JAVA_21
8384
else -> TransformationLanguage.UNKNOWN_TO_SDK_VERSION
8485
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ class CodeWhispererCodeModernizerGumbyClientTest : CodeWhispererCodeModernizerTe
136136
}
137137

138138
@Test
139-
fun `check startCodeModernization`() {
139+
fun `check startCodeModernization on JAVA_17 target`() {
140140
val actual = gumbyClient.startCodeModernization("jobId", TransformationLanguage.JAVA_8, TransformationLanguage.JAVA_17)
141141
argumentCaptor<StartTransformationRequest>().apply {
142142
verify(bearerClient).startTransformation(capture())
@@ -146,6 +146,17 @@ class CodeWhispererCodeModernizerGumbyClientTest : CodeWhispererCodeModernizerTe
146146
}
147147
}
148148

149+
@Test
150+
fun `check startCodeModernization on JAVA_21 target`() {
151+
val actual = gumbyClient.startCodeModernization("jobId", TransformationLanguage.JAVA_8, TransformationLanguage.JAVA_21)
152+
argumentCaptor<StartTransformationRequest>().apply {
153+
verify(bearerClient).startTransformation(capture())
154+
verifyNoInteractions(streamingBearerClient)
155+
assertThat(actual).isInstanceOf(StartTransformationResponse::class.java)
156+
assertThat(actual).usingRecursiveComparison().comparingOnlyFields("transformationJobId").isEqualTo(exampleStartCodeMigrationResponse)
157+
}
158+
}
159+
149160
@Test
150161
fun `check getCodeModernizationPlan`() {
151162
val actual = gumbyClient.getCodeModernizationPlan(JobId("JobId"))

plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/codeTransformChatConnector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ export class CodeTransformChatConnector {
244244
tabID,
245245
tabType: 'codetransform',
246246
modulePath: action.formItemValues?.module,
247-
targetVersion: 'Java 17',
247+
targetVersion: action.formItemValues?.targetVersion,
248248
})
249249
} else if (action.id === FormButtonIds.CodeTransformInputSQLMetadata) {
250250
this.sendMessageToExtension({

0 commit comments

Comments
 (0)