Skip to content

Commit

Permalink
Merge main into feature/dev-execution
Browse files Browse the repository at this point in the history
  • Loading branch information
aws-toolkit-automation authored Feb 7, 2025
2 parents 5d169cc + 5416099 commit 49c34d6
Show file tree
Hide file tree
Showing 12 changed files with 72 additions and 30 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "feature",
"description" : "/transform: support transformations to Java 21"
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ const val DOWNLOAD_PROXY_WILDCARD_ERROR: String = "Dangling meta character '*' n
const val DOWNLOAD_SSL_HANDSHAKE_ERROR: String = "Unable to execute HTTP request: javax.net.ssl.SSLHandshakeException"
const val INVALID_ARTIFACT_ERROR: String = "Invalid artifact"
val patchDescriptions = mapOf(
"Prepare minimal upgrade to Java 17" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks.",
"Prepare minimal upgrade to Java 17" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks in Java 17.",
"Prepare minimal upgrade to Java 21" to "This diff patch covers the set of upgrades for Springboot, JUnit, and PowerMockito frameworks in Java 21.",
"Popular Enterprise Specifications and Application Frameworks upgrade" to "This diff patch covers the set of upgrades for Jakarta EE 10, Hibernate 6.2, " +
"and Micronaut 3.",
"HTTP Client Utilities, Apache Commons Utilities, and Web Frameworks" to "This diff patch covers the set of upgrades for Apache HTTP Client 5, Apache " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,10 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
}
private val artifactHandler = ArtifactHandler(project, GumbyClient.getInstance(project))
private val supportedJavaMappings = mapOf(
JavaSdkVersion.JDK_1_8 to setOf(JavaSdkVersion.JDK_17),
JavaSdkVersion.JDK_11 to setOf(JavaSdkVersion.JDK_17),
JavaSdkVersion.JDK_17 to setOf(JavaSdkVersion.JDK_17),
JavaSdkVersion.JDK_1_8 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
JavaSdkVersion.JDK_11 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
JavaSdkVersion.JDK_17 to setOf(JavaSdkVersion.JDK_17, JavaSdkVersion.JDK_21),
JavaSdkVersion.JDK_21 to setOf(JavaSdkVersion.JDK_21),
)

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package software.aws.toolkits.jetbrains.services.codemodernizer.constants

import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.openapi.vfs.VirtualFile
import software.amazon.awssdk.services.codewhispererstreaming.model.TransformationDownloadArtifactType
import software.aws.toolkits.jetbrains.services.amazonq.CODE_TRANSFORM_PREREQUISITES
Expand Down Expand Up @@ -176,8 +177,12 @@ private val selectTargetVersionFormItem = FormItem(
mandatory = true,
options = listOf(
FormItemOption(
label = "JDK17",
value = "17",
label = JavaSdkVersion.JDK_17.toString(),
value = JavaSdkVersion.JDK_17.toString(),
),
FormItemOption(
label = JavaSdkVersion.JDK_21.toString(),
value = JavaSdkVersion.JDK_21.toString(),
)
)
)
Expand Down Expand Up @@ -226,14 +231,14 @@ private val selectOneOrMultipleDiffsFlagFormItem = FormItem(
)
)

private fun getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName: String): String = """
private fun getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName: String, targetJdkVersion: String): String = """
### ${message("codemodernizer.chat.prompt.title.details")}
-------------
| | |
| :------------------- | -------: |
| **${message("codemodernizer.chat.prompt.label.module")}** | $moduleName |
| **${message("codemodernizer.chat.prompt.label.target_version")}** | JDK17 |
| **${message("codemodernizer.chat.prompt.label.target_version")}** | $targetJdkVersion |
""".trimIndent()

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

Expand Down Expand Up @@ -318,9 +324,9 @@ fun buildUserInputSkipTestsFlagChatContent(): CodeTransformChatMessageContent =
formItems = listOf(selectSkipTestsFlagFormItem),
type = CodeTransformChatMessageType.FinalizedAnswer,
)
fun buildUserInputOneOrMultipleDiffsChatIntroContent(): CodeTransformChatMessageContent =
fun buildUserInputOneOrMultipleDiffsChatIntroContent(version: String): CodeTransformChatMessageContent =
CodeTransformChatMessageContent(
message = message("codemodernizer.chat.message.one_or_multiple_diffs"),
message = message("codemodernizer.chat.message.one_or_multiple_diffs", version.substring(4)), // extract "17" / "21" from "JDK_17" / "JDK_21"
type = CodeTransformChatMessageType.FinalizedAnswer,
)
fun buildUserInputOneOrMultipleDiffsFlagChatContent(): CodeTransformChatMessageContent =
Expand Down Expand Up @@ -441,9 +447,9 @@ fun buildUserSQLConversionSelectionSummaryChatContent(moduleName: String, schema
message = getUserSQLConversionSelectionFormattedMarkdown(moduleName, schema)
)

fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String) = CodeTransformChatMessageContent(
fun buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName: String, targetJdkVersion: String) = CodeTransformChatMessageContent(
type = CodeTransformChatMessageType.Prompt,
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName)
message = getUserLanguageUpgradeSelectionFormattedMarkdown(moduleName, targetJdkVersion)
)

fun buildCompileLocalInProgressChatContent() = CodeTransformChatMessageContent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransfo
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CustomerSelection
import software.aws.toolkits.jetbrains.services.codemodernizer.model.DownloadArtifactResult
import software.aws.toolkits.jetbrains.services.codemodernizer.model.DownloadFailureReason
import software.aws.toolkits.jetbrains.services.codemodernizer.model.InvalidTelemetryReason
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MAVEN_BUILD_RUN_UNIT_TESTS
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MAVEN_BUILD_SKIP_UNIT_TESTS
Expand All @@ -115,6 +116,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.QFeature
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.broadcastQEvent
import software.aws.toolkits.jetbrains.services.cwc.messages.ChatMessageType
import software.aws.toolkits.resources.message
import software.aws.toolkits.telemetry.CodeTransformPreValidationError

class CodeTransformChatController(
private val context: AmazonQAppInitContext,
Expand Down Expand Up @@ -298,14 +300,28 @@ class CodeTransformChatController(
val moduleVirtualFile: VirtualFile = modulePath.toVirtualFile() as VirtualFile
val moduleName = context.project.getModuleOrProjectNameForFile(moduleVirtualFile)

codeTransformChatHelper.addNewMessage(buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName))
codeTransformChatHelper.addNewMessage(buildUserLanguageUpgradeSelectionSummaryChatContent(moduleName, targetVersion))

val sourceJdk = getSourceJdk(moduleVirtualFile)

val sourceVersion = sourceJdk.toString()

if (sourceVersion == JavaSdkVersion.JDK_21.toString() && targetVersion == JavaSdkVersion.JDK_17.toString()) {
codeTransformChatHelper.addNewMessage(
buildProjectInvalidChatContent(
ValidationResult(
false,
InvalidTelemetryReason(CodeTransformPreValidationError.JavaDowngradeAttempt)
)
)
)
return
}

val selection = CustomerSelection(
configurationFile = moduleVirtualFile,
sourceJavaVersion = sourceJdk,
targetJavaVersion = JavaSdkVersion.JDK_17,
targetJavaVersion = if (targetVersion == JavaSdkVersion.JDK_17.toString()) JavaSdkVersion.JDK_17 else JavaSdkVersion.JDK_21,
)

// Create and set a session
Expand Down Expand Up @@ -387,8 +403,9 @@ class CodeTransformChatController(
codeModernizerManager.codeTransformationSession?.let {
it.sessionContext.customBuildCommand = customBuildCommand
}
val targetJdkVersion = codeModernizerManager.codeTransformationSession?.sessionContext?.targetJavaVersion?.name.orEmpty()
codeTransformChatHelper.run {
addNewMessage(buildUserInputOneOrMultipleDiffsChatIntroContent())
addNewMessage(buildUserInputOneOrMultipleDiffsChatIntroContent(targetJdkVersion))
addNewMessage(buildUserInputOneOrMultipleDiffsFlagChatContent())
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ data class CodeModernizerSessionContext(
val project: Project,
var configurationFile: VirtualFile? = null, // used to ZIP module
val sourceJavaVersion: JavaSdkVersion, // always needed for startJob API
val targetJavaVersion: JavaSdkVersion = JavaSdkVersion.JDK_17, // only one supported
val targetJavaVersion: JavaSdkVersion, // 17 or 21
var transformCapabilities: List<String> = listOf(EXPLAINABILITY_V1),
var customBuildCommand: String = MAVEN_BUILD_RUN_UNIT_TESTS, // run unit tests by default
val sourceVendor: String = ORACLE_DB, // only one supported
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import java.io.File
data class CustomerSelection(
val configurationFile: VirtualFile? = null, // used to ZIP module
val sourceJavaVersion: JavaSdkVersion, // always needed, use default of JDK_8 for SQL conversions for startJob API call
val targetJavaVersion: JavaSdkVersion = JavaSdkVersion.JDK_17,
val targetJavaVersion: JavaSdkVersion, // 17 or 21
val sourceVendor: String = ORACLE_DB, // only one supported
val targetVendor: String? = null,
val sourceServerName: String? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,6 @@ fun String.toTransformationLanguage() = when (this) {
"JDK_1_8" -> TransformationLanguage.JAVA_8
"JDK_11" -> TransformationLanguage.JAVA_11
"JDK_17" -> TransformationLanguage.JAVA_17
"JDK_21" -> TransformationLanguage.JAVA_21
else -> TransformationLanguage.UNKNOWN_TO_SDK_VERSION
}
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ class CodeWhispererCodeModernizerGumbyClientTest : CodeWhispererCodeModernizerTe
}

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

@Test
fun `check startCodeModernization on JAVA_21 target`() {
val actual = gumbyClient.startCodeModernization("jobId", TransformationLanguage.JAVA_8, TransformationLanguage.JAVA_21)
argumentCaptor<StartTransformationRequest>().apply {
verify(bearerClient).startTransformation(capture())
verifyNoInteractions(streamingBearerClient)
assertThat(actual).isInstanceOf(StartTransformationResponse::class.java)
assertThat(actual).usingRecursiveComparison().comparingOnlyFields("transformationJobId").isEqualTo(exampleStartCodeMigrationResponse)
}
}

@Test
fun `check getCodeModernizationPlan`() {
val actual = gumbyClient.getCodeModernizationPlan(JobId("JobId"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ export class CodeTransformChatConnector {
tabID,
tabType: 'codetransform',
modulePath: action.formItemValues?.module,
targetVersion: 'Java 17',
targetVersion: action.formItemValues?.targetVersion,
})
} else if (action.id === FormButtonIds.CodeTransformInputSQLMetadata) {
this.sendMessageToExtension({
Expand Down
Loading

0 comments on commit 49c34d6

Please sign in to comment.