Skip to content

Commit 1b41352

Browse files
author
David Hasani
committed
part1 of add gradle support
1 parent 723a877 commit 1b41352

27 files changed

+457
-232
lines changed

plugins/amazonq/build.gradle.kts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,25 @@ tasks.jar {
2424
from(changelog) {
2525
into("META-INF")
2626
}
27+
// from("software/aws/toolkits/jetbrains/services/codemodernizer/utils/gradle_copy_deps.py") {
28+
// into("pythonScript")
29+
// }
2730
}
2831

32+
//val codeTransformGradleScriptDirConfig = configurations.create("codeTransformGradleScriptDirConfig") {
33+
// isCanBeResolved = false
34+
//}
35+
//
36+
//val codeTransformGradleScriptDir = tasks.register<Sync>("codeTransformGradleScriptDir") {
37+
// from("software/aws/toolkits/jetbrains/services/codemodernizer/utils/gradle_copy_deps.py")
38+
// into("$buildDir/$name")
39+
// includeEmptyDirs = false
40+
//}
41+
//
42+
//artifacts {
43+
// add(codeTransformGradleScriptDirConfig.name, codeTransformGradleScriptDir)
44+
//}
45+
2946
dependencies {
3047
intellijPlatform {
3148
localPlugin(project(":plugin-core"))

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

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModerni
4343
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformHilDownloadArtifact
4444
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CustomerSelection
4545
import software.aws.toolkits.jetbrains.services.codemodernizer.model.Dependency
46+
import software.aws.toolkits.jetbrains.services.codemodernizer.model.GRADLE_CONFIGURATION_FILE_NAME
47+
import software.aws.toolkits.jetbrains.services.codemodernizer.model.GRADLE_KTS_CONFIGURATION_FILE_NAME
4648
import software.aws.toolkits.jetbrains.services.codemodernizer.model.InvalidTelemetryReason
4749
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
50+
import software.aws.toolkits.jetbrains.services.codemodernizer.model.LocalBuildResult
4851
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MAVEN_CONFIGURATION_FILE_NAME
49-
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenCopyCommandsResult
5052
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenDependencyReportCommandsResult
5153
import software.aws.toolkits.jetbrains.services.codemodernizer.model.UploadFailureReason
5254
import software.aws.toolkits.jetbrains.services.codemodernizer.model.ValidationResult
@@ -59,7 +61,6 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.toolwindow.CodeMo
5961
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.STATES_WHERE_PLAN_EXIST
6062
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.createFileCopy
6163
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.findLineNumberByString
62-
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getMavenVersion
6364
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getModuleOrProjectNameForFile
6465
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getPathToHilArtifactPomFile
6566
import software.aws.toolkits.jetbrains.services.codemodernizer.utils.getPathToHilDependencyReport
@@ -78,6 +79,7 @@ import software.aws.toolkits.jetbrains.ui.feedback.CodeTransformFeedbackDialog
7879
import software.aws.toolkits.jetbrains.utils.isRunningOnRemoteBackend
7980
import software.aws.toolkits.jetbrains.utils.notifyStickyError
8081
import software.aws.toolkits.jetbrains.utils.notifyStickyInfo
82+
import software.aws.toolkits.jetbrains.utils.notifyStickyWarn
8183
import software.aws.toolkits.resources.message
8284
import software.aws.toolkits.telemetry.CodeTransformBuildSystem
8385
import software.aws.toolkits.telemetry.CodeTransformCancelSrcComponents
@@ -105,10 +107,10 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
105107
Disposer.register(contentManager, it)
106108
}
107109
}
108-
private val supportedBuildFileNames = listOf(MAVEN_CONFIGURATION_FILE_NAME)
110+
private val supportedBuildFileNames = listOf(MAVEN_CONFIGURATION_FILE_NAME, GRADLE_CONFIGURATION_FILE_NAME, GRADLE_KTS_CONFIGURATION_FILE_NAME)
109111
private val isModernizationInProgress = AtomicBoolean(false)
110112
private val isResumingJob = AtomicBoolean(false)
111-
private val isMvnRunning = AtomicBoolean(false)
113+
private val isLocalBuildRunning = AtomicBoolean(false)
112114
private val isJobSuccessfullyResumed = AtomicBoolean(false)
113115

114116
private val transformationStoppedByUsr = AtomicBoolean(false)
@@ -180,8 +182,8 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
180182
true,
181183
validatedBuildFiles = validatedBuildFiles,
182184
validatedProjectJdkName = projectJdk?.description.orEmpty(),
183-
buildSystem = CodeTransformBuildSystem.Maven,
184-
buildSystemVersion = getMavenVersion(project)
185+
// TO-DO: maybe add back the other two fields of ValidationResult
186+
// probably not since user has not selected a project at this point
185187
)
186188
} else {
187189
ValidationResult(
@@ -191,10 +193,10 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
191193
supportedBuildFileNames.joinToString()
192194
),
193195
invalidTelemetryReason = InvalidTelemetryReason(
196+
// TO-DO: make this NonMavenGradleProject?
194197
CodeTransformPreValidationError.NonMavenProject,
195198
if (isGradleProject(project)) "Gradle build" else "other build"
196199
),
197-
buildSystem = if (isGradleProject(project)) CodeTransformBuildSystem.Gradle else CodeTransformBuildSystem.Unknown
198200
)
199201
}
200202
}
@@ -250,11 +252,11 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
250252
}
251253
}
252254

253-
fun runModernize(copyResult: MavenCopyCommandsResult) {
255+
fun runModernize(localBuildResult: LocalBuildResult) {
254256
initStopParameters()
255257
val session = codeTransformationSession as CodeModernizerSession
256258
initModernizationJobUI(true, project.getModuleOrProjectNameForFile(session.sessionContext.configurationFile))
257-
launchModernizationJob(session, copyResult)
259+
launchModernizationJob(session, localBuildResult)
258260
}
259261

260262
suspend fun resumePollingFromHil() {
@@ -314,9 +316,8 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
314316
)
315317
}
316318

317-
fun launchModernizationJob(session: CodeModernizerSession, copyResult: MavenCopyCommandsResult) = projectCoroutineScope(project).launch {
318-
val result = initModernizationJob(session, copyResult)
319-
319+
fun launchModernizationJob(session: CodeModernizerSession, localBuildResult: LocalBuildResult) = projectCoroutineScope(project).launch {
320+
val result = initModernizationJob(session, localBuildResult)
320321
postModernizationJob(result)
321322
}
322323

@@ -364,22 +365,23 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
364365

365366
fun isJobOngoingInState() = managerState.flags.getOrDefault(StateFlags.IS_ONGOING, false)
366367

367-
fun handleLocalMavenBuildResult(mavenCopyCommandsResult: MavenCopyCommandsResult) {
368-
codeTransformationSession?.setLastMvnBuildResult(mavenCopyCommandsResult)
368+
private fun handleLocalBuildResult(localBuildResult: LocalBuildResult) {
369+
codeTransformationSession?.setLastLocalBuildResult(localBuildResult)
369370
// Send IDE notifications first
370-
if (mavenCopyCommandsResult == MavenCopyCommandsResult.Failure) {
371+
if (localBuildResult is LocalBuildResult.Failure) {
371372
notifyStickyInfo(
372-
message("codemodernizer.notification.warn.maven_failed.title"),
373-
message("codemodernizer.notification.warn.maven_failed.content"),
373+
message("codemodernizer.notification.warn.local_build_failed.title"),
374+
localBuildResult.failureReason,
374375
project,
376+
// TO-DO: maybe update URL once troubleshooting docs are updated
375377
listOf(openTroubleshootingGuideNotificationAction(CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE), displayFeedbackNotificationAction()),
376378
)
377379
}
378380

379-
CodeTransformMessageListener.instance.onMavenBuildResult(mavenCopyCommandsResult)
381+
CodeTransformMessageListener.instance.onLocalBuildResult(localBuildResult)
380382
}
381383

382-
fun runLocalMavenBuild(project: Project, customerSelection: CustomerSelection) {
384+
fun runLocalBuild(project: Project, customerSelection: CustomerSelection) {
383385
// TODO: deprecated metric - remove after BI started using new metric
384386
telemetry.jobStartedCompleteFromPopupDialog(customerSelection)
385387

@@ -389,17 +391,17 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
389391
codeTransformationSession = session
390392

391393
projectCoroutineScope(project).launch {
392-
isMvnRunning.set(true)
393-
val result = session.getDependenciesUsingMaven()
394-
isMvnRunning.set(false)
395-
handleLocalMavenBuildResult(result)
394+
isLocalBuildRunning.set(true)
395+
val result = session.getDependencies()
396+
isLocalBuildRunning.set(false)
397+
handleLocalBuildResult(result)
396398
}
397399
}
398400

399401
fun parseBuildFile(): String? = parseBuildFile(codeTransformationSession?.sessionContext?.configurationFile)
400402

401-
internal suspend fun initModernizationJob(session: CodeModernizerSession, copyResult: MavenCopyCommandsResult): CodeModernizerJobCompletedResult =
402-
when (val result = session.createModernizationJob(copyResult)) {
403+
internal suspend fun initModernizationJob(session: CodeModernizerSession, localBuildResult: LocalBuildResult): CodeModernizerJobCompletedResult =
404+
when (val result = session.createModernizationJob(localBuildResult)) {
403405
is CodeModernizerStartJobResult.ZipCreationFailed -> {
404406
CodeModernizerJobCompletedResult.UnableToCreateJob(
405407
message("codemodernizer.notification.warn.zip_creation_failed", result.reason),
@@ -432,10 +434,6 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
432434
CodeModernizerJobCompletedResult.JobAbortedBeforeStarting
433435
}
434436

435-
is CodeModernizerStartJobResult.CancelledMissingDependencies -> {
436-
CodeModernizerJobCompletedResult.JobAbortedMissingDependencies
437-
}
438-
439437
is CodeModernizerStartJobResult.CancelledZipTooLarge -> {
440438
CodeModernizerJobCompletedResult.JobAbortedZipTooLarge
441439
}
@@ -650,12 +648,6 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
650648

651649
is CodeModernizerJobCompletedResult.ManagerDisposed -> LOG.warn { "Manager disposed" }
652650
is CodeModernizerJobCompletedResult.JobAbortedBeforeStarting -> LOG.warn { "Job was aborted" }
653-
is CodeModernizerJobCompletedResult.JobAbortedMissingDependencies -> notifyStickyInfo(
654-
message("codemodernizer.notification.warn.maven_failed.title"),
655-
message("codemodernizer.notification.warn.maven_failed.content"),
656-
project,
657-
listOf(openTroubleshootingGuideNotificationAction(CODE_TRANSFORM_TROUBLESHOOT_DOC_MVN_FAILURE), displayFeedbackNotificationAction()),
658-
)
659651
is CodeModernizerJobCompletedResult.JobAbortedZipTooLarge -> notifyStickyInfo(
660652
message("codemodernizer.notification.warn.zip_too_large.title"),
661653
message("codemodernizer.notification.warn.zip_too_large.content"),
@@ -716,11 +708,11 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
716708

717709
fun isModernizationJobActive(): Boolean = isModernizationInProgress.get()
718710

719-
fun isRunningMvn(): Boolean = isMvnRunning.get()
711+
fun isLocalBuildRunning(): Boolean = isLocalBuildRunning.get()
720712

721713
fun isJobSuccessfullyResumed(): Boolean = isJobSuccessfullyResumed.get()
722714

723-
fun getLastMvnBuildResult(): MavenCopyCommandsResult? = codeTransformationSession?.getLastMvnBuildResult()
715+
fun getLastLocalBuildResult(): LocalBuildResult? = codeTransformationSession?.getLastLocalBuildResult()
724716

725717
fun getLastTransformResult(): CodeModernizerJobCompletedResult? = codeTransformationSession?.getLastTransformResult()
726718

@@ -729,8 +721,8 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
729721
fun getBottomToolWindow() = ToolWindowManager.getInstance(project).getToolWindow(CodeModernizerBottomToolWindowFactory.id)
730722
?: error(message("codemodernizer.toolwindow.problems_window_not_found"))
731723

732-
fun getMvnBuildWindow() = ToolWindowManager.getInstance(project).getToolWindow("Run")
733-
?: error(message("codemodernizer.toolwindow.problems_mvn_window_not_found"))
724+
fun getLocalBuildWindow() = ToolWindowManager.getInstance(project).getToolWindow("Run")
725+
?: error(message("codemodernizer.toolwindow.problems_local_build_window_not_found"))
734726

735727
override fun getState(): CodeModernizerState = CodeModernizerState().apply {
736728
lastJobContext.putAll(managerState.lastJobContext)
@@ -856,7 +848,7 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
856848
}
857849
}
858850

859-
fun copyDependencyForHil(selectedVersion: String): MavenCopyCommandsResult {
851+
fun copyDependencyForHil(selectedVersion: String): LocalBuildResult {
860852
try {
861853
val session = codeTransformationSession ?: throw CodeModernizerException("Cannot get the current session")
862854

@@ -865,27 +857,27 @@ class CodeModernizerManager(private val project: Project) : PersistentStateCompo
865857

866858
val downloadedPomPath = getPathToHilArtifactPomFile(tmpDirPath)
867859
if (!downloadedPomPath.exists()) {
868-
return MavenCopyCommandsResult.Failure
860+
return LocalBuildResult.Failure(message("codemodernizer.chat.message.hil.error.cannot_upload"))
869861
}
870862

871863
val downloadedPomFile = File(downloadedPomPath.pathString)
872864
setDependencyVersionInPom(downloadedPomFile, selectedVersion)
873865

874-
val copyDependencyResult = session.copyHilDependencyUsingMaven()
875-
return copyDependencyResult
866+
val localBuildResult = session.copyHilDependencyUsingMaven()
867+
return localBuildResult
876868
} catch (e: Exception) {
877869
val errorMessage = "Unexpected error when getting HIL dependency for upload: ${e.localizedMessage}"
878870
telemetry.error(errorMessage)
879871
LOG.error { errorMessage }
880-
return MavenCopyCommandsResult.Failure
872+
return LocalBuildResult.Failure(message("codemodernizer.chat.message.hil.error.cannot_upload"))
881873
}
882874
}
883875

884876
suspend fun tryResumeWithAlternativeVersion(selectedVersion: String) {
885877
try {
886878
val zipCreationResult = codeTransformationSession?.createHilUploadZip(selectedVersion)
887879
if (zipCreationResult?.payload?.exists() == true) {
888-
codeTransformationSession?.uploadHilPayload(zipCreationResult.payload)
880+
codeTransformationSession?.uploadHilPayload(zipCreationResult.payload!!)
889881

890882
// Add delay between upload complete and trying to resume
891883
delay(500)

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

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeModerni
3434
import software.aws.toolkits.jetbrains.services.codemodernizer.model.CodeTransformHilDownloadArtifact
3535
import software.aws.toolkits.jetbrains.services.codemodernizer.model.DownloadArtifactResult
3636
import software.aws.toolkits.jetbrains.services.codemodernizer.model.JobId
37-
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenCopyCommandsResult
37+
import software.aws.toolkits.jetbrains.services.codemodernizer.model.LocalBuildResult
3838
import software.aws.toolkits.jetbrains.services.codemodernizer.model.MavenDependencyReportCommandsResult
3939
import software.aws.toolkits.jetbrains.services.codemodernizer.model.UploadFailureReason
4040
import software.aws.toolkits.jetbrains.services.codemodernizer.model.ZipCreationResult
@@ -84,7 +84,7 @@ class CodeModernizerSession(
8484
private val telemetry = CodeTransformTelemetryManager.getInstance(sessionContext.project)
8585
private val artifactHandler = ArtifactHandler(sessionContext.project, GumbyClient.getInstance(sessionContext.project))
8686

87-
private var mvnBuildResult: MavenCopyCommandsResult? = null
87+
private var localBuildResult: LocalBuildResult? = null
8888
private var transformResult: CodeModernizerJobCompletedResult? = null
8989

9090
private var hilDownloadArtifactId: String? = null
@@ -108,10 +108,10 @@ class CodeModernizerSession(
108108
fun setHilTempDirectoryPath(path: Path) {
109109
hilTempDirectoryPath = path
110110
}
111-
fun getLastMvnBuildResult(): MavenCopyCommandsResult? = mvnBuildResult
111+
fun getLastLocalBuildResult(): LocalBuildResult? = localBuildResult
112112

113-
fun setLastMvnBuildResult(result: MavenCopyCommandsResult) {
114-
mvnBuildResult = result
113+
fun setLastLocalBuildResult(result: LocalBuildResult) {
114+
localBuildResult = result
115115
}
116116

117117
fun getLastTransformResult(): CodeModernizerJobCompletedResult? = transformResult
@@ -120,13 +120,13 @@ class CodeModernizerSession(
120120
transformResult = result
121121
}
122122

123-
fun getDependenciesUsingMaven(): MavenCopyCommandsResult = sessionContext.getDependenciesUsingMaven()
123+
fun getDependencies(): LocalBuildResult = sessionContext.getDependencies()
124124

125125
fun createHilDependencyReportUsingMaven(): MavenDependencyReportCommandsResult = sessionContext.createDependencyReportUsingMaven(
126126
getPathToHilDependencyReportDir(hilTempDirectoryPath as Path)
127127
)
128128

129-
fun copyHilDependencyUsingMaven(): MavenCopyCommandsResult = sessionContext.copyHilDependencyUsingMaven(hilTempDirectoryPath as Path)
129+
fun copyHilDependencyUsingMaven(): LocalBuildResult = sessionContext.copyHilDependencyUsingMaven(hilTempDirectoryPath as Path)
130130

131131
fun createHilUploadZip(selectedVersion: String) = sessionContext.createZipForHilUpload(
132132
hilTempDirectoryPath as Path,
@@ -144,13 +144,13 @@ class CodeModernizerSession(
144144
*
145145
* Based on [CodeWhispererCodeScanSession]
146146
*/
147-
fun createModernizationJob(copyResult: MavenCopyCommandsResult): CodeModernizerStartJobResult {
147+
fun createModernizationJob(localBuildResult: LocalBuildResult): CodeModernizerStartJobResult {
148+
// local build result must have been successful here
148149
LOG.info { "Compressing local project" }
149150
val payload: File?
150151
var payloadSize = 0
151152
val startTime = Instant.now()
152153
var telemetryErrorMessage: String? = null
153-
var dependenciesCopied = false
154154

155155
try {
156156
// Generate zip file
@@ -164,17 +164,10 @@ class CodeModernizerSession(
164164
telemetryErrorMessage = "Disposed when about to create zip"
165165
return CodeModernizerStartJobResult.Disposed
166166
}
167-
val result = sessionContext.createZipWithModuleFiles(copyResult)
167+
val result = sessionContext.createZipWithModuleFiles(localBuildResult)
168168

169-
if (result is ZipCreationResult.Missing1P) {
170-
telemetryErrorMessage = "Missing 1p dependencies"
171-
return CodeModernizerStartJobResult.CancelledMissingDependencies
172-
} else {
173-
dependenciesCopied = true
174-
}
175-
176-
payload = result.payload
177-
payloadSize = payload.length().toInt()
169+
payload = result.payload // must be non-null here
170+
payloadSize = payload!!.length().toInt()
178171

179172
// TODO: deprecated metric - remove after BI started using new metric
180173
telemetry.jobCreateZipEndTime(payloadSize, startTime)
@@ -197,7 +190,7 @@ class CodeModernizerSession(
197190
} finally {
198191
// Publish metric if uploadProject failed at the zipping step, since the process will return early.
199192
if (!telemetryErrorMessage.isNullOrEmpty()) {
200-
telemetry.uploadProject(payloadSize, startTime, dependenciesCopied, telemetryErrorMessage)
193+
telemetry.uploadProject(payloadSize, startTime, true, telemetryErrorMessage)
201194
}
202195
}
203196

0 commit comments

Comments
 (0)