Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
transformType,
jobId
) { new, plan ->
codeModernizerBottomWindowPanelManager.handleJobTransition(new, plan, session.sessionContext.sourceJavaVersion, transformType)
codeModernizerBottomWindowPanelManager.handleJobTransition(new, plan, session.sessionContext, transformType)
}

private suspend fun handleJobStarted(jobId: JobId, session: CodeModernizerSession): CodeModernizerJobCompletedResult {
Expand All @@ -491,7 +491,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
val transformType = if (session.sessionContext.sqlMetadataZip != null) CodeTransformType.SQL_CONVERSION else CodeTransformType.LANGUAGE_UPGRADE

return session.pollUntilJobCompletion(transformType, jobId) { new, plan ->
codeModernizerBottomWindowPanelManager.handleJobTransition(new, plan, session.sessionContext.sourceJavaVersion, transformType)
codeModernizerBottomWindowPanelManager.handleJobTransition(new, plan, session.sessionContext, transformType)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -478,8 +478,8 @@ class CodeModernizerSession(
}

if (!isTransformationPlanEditorOpened && transformType == CodeTransformType.LANGUAGE_UPGRADE) {
val isPlanComplete = isPlanComplete(state.transformationPlan)
if (isPlanComplete) {
val isPlanComplete = isPlanComplete(state.transformationPlan, sessionContext)
if (isPlanComplete && state.transformationPlan != null) {
tryOpenTransformationPlanEditor()
isTransformationPlanEditorOpened = true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Transformation
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.warn
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerJobCompletedResult
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerSessionContext
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformType
import software.aws.toolkits.jetbrains.services.codemodernizer.panels.CodeModernizerBanner
import software.aws.toolkits.jetbrains.services.codemodernizer.panels.CodeModernizerJobHistoryTablePanel
Expand Down Expand Up @@ -244,20 +245,20 @@ class CodeModernizerBottomWindowPanelManager(private val project: Project) : JPa
return actionManager.createActionToolbar(ACTION_PLACE, group, false)
}

fun handleJobTransition(new: TransformationStatus, plan: TransformationPlan?, sourceJdk: JavaSdkVersion, transformType: CodeTransformType) = invokeLater {
fun handleJobTransition(new: TransformationStatus, plan: TransformationPlan?, sessionContext: CodeModernizerSessionContext, transformType: CodeTransformType) = invokeLater {
if (new in listOf(
TransformationStatus.PLANNED,
TransformationStatus.TRANSFORMING,
TransformationStatus.TRANSFORMED,
TransformationStatus.PAUSED,
TransformationStatus.COMPLETED,
TransformationStatus.PARTIALLY_COMPLETED
) && transformType == CodeTransformType.LANGUAGE_UPGRADE && isPlanComplete(plan)
) && transformType == CodeTransformType.LANGUAGE_UPGRADE && isPlanComplete(plan, sessionContext)
) {
addPlanToBanner()
}
buildProgressSplitterPanelManager.apply {
handleProgressStateChanged(new, plan, sourceJdk, transformType)
handleProgressStateChanged(new, plan, sessionContext.sourceJavaVersion, transformType)
if (timer == null) {
timer = Timer()
timer?.scheduleAtFixedRate(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.constants.BILLING
import software.aws.toolkits.jetbrains.services.codemodernizer.constants.JOB_STATISTICS_TABLE_KEY
import software.aws.toolkits.jetbrains.services.codemodernizer.ideMaven.runClientSideBuild
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerArtifact.Companion.MAPPER
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerSessionContext
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformType
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
import software.aws.toolkits.jetbrains.services.codemodernizer.model.PlanTable
Expand Down Expand Up @@ -286,8 +287,12 @@ fun findDownloadArtifactProgressUpdate(transformationSteps: List<TransformationS
update.downloadArtifacts()?.firstOrNull()?.downloadArtifactId() != null
}

// once dependency changes table (key of "1") available, plan is complete
fun isPlanComplete(plan: TransformationPlan?) = plan?.transformationSteps()?.get(0)?.progressUpdates()?.any { update -> update.name() == "1" } == true
// plan is complete once dependency changes table (key of "1") available, or as soon as it's available for min JDK upgrades
fun isPlanComplete(plan: TransformationPlan?, sessionContext: CodeModernizerSessionContext): Boolean {
val isDepChangesTablePresent = plan?.transformationSteps()?.get(0)?.progressUpdates()?.any { update -> update.name() == "1" } == true
val isMinJdkUpgrade = sessionContext.sourceJavaVersion.name != sessionContext.targetJavaVersion.name
return isDepChangesTablePresent || isMinJdkUpgrade
}

// "name" holds the ID of the corresponding plan step (where table will go) and "description" holds the plan data
fun getTableMapping(stepZeroProgressUpdates: List<TransformationProgressUpdate>): Map<String, List<String>> =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
package software.aws.toolkits.jetbrains.services.codemodernizer

import com.fasterxml.jackson.module.kotlin.readValue
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdkVersion
import com.intellij.testFramework.LightVirtualFile
import io.mockk.every
import io.mockk.just
Expand All @@ -16,6 +18,7 @@ import org.jetbrains.yaml.YAMLFileType
import org.junit.Before
import org.junit.Test
import org.mockito.Mockito
import org.mockito.Mockito.mock
import org.mockito.kotlin.any
import org.mockito.kotlin.times
import org.mockito.kotlin.verify
Expand All @@ -28,6 +31,7 @@ import software.amazon.awssdk.services.codewhispererruntime.model.Transformation
import software.amazon.awssdk.services.codewhispererruntime.model.TransformationStep
import software.amazon.awssdk.services.ssooidc.model.InvalidGrantException
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerArtifact.Companion.MAPPER
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModernizerSessionContext
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformType
import software.aws.toolkits.jetbrains.services.codemodernizer.model.PlanTable
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.combineTableRows
Expand All @@ -53,6 +57,8 @@ class CodeWhispererCodeModernizerUtilsTest : CodeWhispererCodeModernizerTestBase
super.setup()
}

private val mockProject: Project = mock(Project::class.java)

@Test
fun `can poll for updates`() {
Mockito.doReturn(
Expand Down Expand Up @@ -254,7 +260,6 @@ class CodeWhispererCodeModernizerUtilsTest : CodeWhispererCodeModernizerTestBase

@Test
fun `isPlanComplete returns true when plan has progress update with name '1'`() {
// Arrange
val plan = TransformationPlan.builder()
.transformationSteps(
listOf(
Expand All @@ -270,7 +275,15 @@ class CodeWhispererCodeModernizerUtilsTest : CodeWhispererCodeModernizerTestBase
)
)
.build()
val result = isPlanComplete(plan)

// dependency upgrade
val sessionContext = CodeModernizerSessionContext(
project = mockProject,
sourceJavaVersion = JavaSdkVersion.JDK_17,
targetJavaVersion = JavaSdkVersion.JDK_17
)

val result = isPlanComplete(plan, sessionContext)
assertThat(result).isTrue()
}

Expand All @@ -283,18 +296,55 @@ class CodeWhispererCodeModernizerUtilsTest : CodeWhispererCodeModernizerTestBase
.progressUpdates(
listOf(
TransformationProgressUpdate.builder()
.name("2")
.name("not-1")
.build()
)
)
.build()
)
)
.build()
val result = isPlanComplete(plan)

// dependency upgrade
val sessionContext = CodeModernizerSessionContext(
project = mockProject,
sourceJavaVersion = JavaSdkVersion.JDK_17,
targetJavaVersion = JavaSdkVersion.JDK_17
)

val result = isPlanComplete(plan, sessionContext)
assertThat(result).isFalse()
}

@Test
fun `isPlanComplete returns true when doing a min JDK upgrade`() {
val plan = TransformationPlan.builder()
.transformationSteps(
listOf(
TransformationStep.builder()
.progressUpdates(
listOf(
TransformationProgressUpdate.builder()
.name("not-1")
.build()
)
)
.build()
)
)
.build()

// min JDK upgrade
val sessionContext = CodeModernizerSessionContext(
project = mockProject,
sourceJavaVersion = JavaSdkVersion.JDK_1_8,
targetJavaVersion = JavaSdkVersion.JDK_17
)

val result = isPlanComplete(plan, sessionContext)
assertThat(result).isTrue()
}

@Test
fun `getClientInstructionArtifactId extracts artifact ID from transformation plan`() {
val step1 = TransformationStep.builder()
Expand Down
Loading