Skip to content

Commit 701617b

Browse files
committed
merge: resolve conflicts in lspInstaller
2 parents 0df0720 + 2157f55 commit 701617b

File tree

15 files changed

+103
-46
lines changed

15 files changed

+103
-46
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 Java 21 transformations"
4+
}

packages/amazonq/src/extensionNode.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ async function getAuthState(): Promise<Omit<AuthUserState, 'source'>> {
8383
try {
8484
// May call connection validate functions that try to refresh the token.
8585
// This could result in network errors.
86-
authState = (await AuthUtil.instance.getChatAuthState(false)).codewhispererChat
86+
authState = (await AuthUtil.instance._getChatAuthState(false)).codewhispererChat
8787
} catch (err) {
8888
if (
8989
isNetworkError(err) &&

packages/amazonq/src/lsp/lspInstaller.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ import {
1818
import path from 'path'
1919

2020
const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json'
21-
export const supportedLspServerVersions = '^2.3.0'
21+
export const supportedLspServerVersions = '^3.1.1'
2222
const logger = getLogger('amazonqLsp')
23+
2324
export class AmazonQLSPResolver implements LspResolver {
2425
async resolve(): Promise<LspResolution> {
2526
const overrideLocation = process.env.AWS_LANGUAGE_SERVER_OVERRIDE

packages/amazonq/test/e2e/amazonq/transformByQ.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,42 @@ describe('Amazon Q Code Transformation', function () {
181181
assert.strictEqual(viewSummaryChatItem?.body?.includes('view a summary'), true)
182182
})
183183

184+
it('CANNOT do a Java 21 to Java 17 transformation', async () => {
185+
sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([])
186+
sinon.stub(GumbyController.prototype, 'validateLanguageUpgradeProjects' as keyof GumbyController).resolves([
187+
{
188+
name: 'qct-sample-java-8-app-main',
189+
path: '/Users/alias/Desktop/qct-sample-java-8-app-main',
190+
JDKVersion: JDKVersion.JDK21,
191+
},
192+
])
193+
tab.addChatMessage({ command: '/transform' })
194+
await tab.waitForEvent(() => tab.getChatItems().length > 3, {
195+
waitTimeoutInMs: 5000,
196+
waitIntervalInMs: 1000,
197+
})
198+
const projectForm = tab.getChatItems().pop()
199+
assert.strictEqual(projectForm?.formItems?.[0]?.id ?? undefined, 'GumbyTransformLanguageUpgradeProjectForm')
200+
201+
const projectFormItemValues = {
202+
GumbyTransformLanguageUpgradeProjectForm: '/Users/alias/Desktop/qct-sample-java-8-app-main',
203+
GumbyTransformJdkFromForm: '21',
204+
GumbyTransformJdkToForm: '17',
205+
}
206+
const projectFormValues: Record<string, string> = { ...projectFormItemValues }
207+
tab.clickCustomFormButton({
208+
id: 'gumbyLanguageUpgradeTransformFormConfirm',
209+
text: 'Confirm',
210+
formItemValues: projectFormValues,
211+
})
212+
await tab.waitForEvent(() => tab.getChatItems().length > 4, {
213+
waitTimeoutInMs: 5000,
214+
waitIntervalInMs: 1000,
215+
})
216+
const errorMessage = tab.getChatItems().pop()
217+
assert.strictEqual(errorMessage?.body, CodeWhispererConstants.invalidFromToJdkChatMessage)
218+
})
219+
184220
it('Can provide metadata file for a SQL conversion', async () => {
185221
sinon.stub(startTransformByQ, 'getValidSQLConversionCandidateProjects').resolves([
186222
{

packages/core/src/amazonqGumby/chat/controller/controller.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,12 @@ export class GumbyController {
483483
message.tabID
484484
)
485485

486+
// do not allow downgrades (only this combination can be selected in the UI)
487+
if (fromJDKVersion === JDKVersion.JDK21 && toJDKVersion === JDKVersion.JDK17) {
488+
this.messenger.sendUnrecoverableErrorResponse('invalid-from-to-jdk', message.tabID)
489+
return
490+
}
491+
486492
await processLanguageUpgradeTransformFormInput(pathToProject, fromJDKVersion, toJDKVersion)
487493
await this.messenger.sendSkipTestsPrompt(message.tabID)
488494
})

packages/core/src/amazonqGumby/chat/controller/messenger/messenger.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export type UnrecoverableErrorType =
5151
| 'unsupported-target-db'
5252
| 'error-parsing-sct-file'
5353
| 'invalid-zip-no-sct-file'
54+
| 'invalid-from-to-jdk'
5455

5556
export enum GumbyNamedMessages {
5657
COMPILATION_PROGRESS_MESSAGE = 'gumbyProjectCompilationMessage',
@@ -176,7 +177,9 @@ export class Messenger {
176177
this.dispatcher.sendAsyncEventProgress(
177178
new AsyncEventProgressMessage(tabID, {
178179
inProgress: true,
179-
message: CodeWhispererConstants.userPatchDescriptionChatMessage,
180+
message: CodeWhispererConstants.userPatchDescriptionChatMessage(
181+
transformByQState.getTargetJDKVersion() ?? ''
182+
),
180183
})
181184
)
182185

@@ -233,6 +236,10 @@ export class Messenger {
233236
value: JDKVersion.JDK17,
234237
label: JDKVersion.JDK17,
235238
},
239+
{
240+
value: JDKVersion.JDK21,
241+
label: JDKVersion.JDK21,
242+
},
236243
],
237244
})
238245

@@ -246,6 +253,10 @@ export class Messenger {
246253
value: JDKVersion.JDK17,
247254
label: JDKVersion.JDK17,
248255
},
256+
{
257+
value: JDKVersion.JDK21,
258+
label: JDKVersion.JDK21,
259+
},
249260
],
250261
})
251262

@@ -481,6 +492,9 @@ export class Messenger {
481492
case 'invalid-zip-no-sct-file':
482493
message = CodeWhispererConstants.invalidMetadataFileNoSctFile
483494
break
495+
case 'invalid-from-to-jdk':
496+
message = CodeWhispererConstants.invalidFromToJdkChatMessage
497+
break
484498
}
485499

486500
this.sendJobFinishedMessage(tabID, message)

packages/core/src/amazonqGumby/chat/controller/messenger/messengerUtils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ export default class MessengerUtils {
5252
javaHomePrompt += ` ${CodeWhispererConstants.macJavaVersionHomeHelpChatMessage(11)}`
5353
} else if (jdkVersion === JDKVersion.JDK17) {
5454
javaHomePrompt += ` ${CodeWhispererConstants.macJavaVersionHomeHelpChatMessage(17)}`
55+
} else if (jdkVersion === JDKVersion.JDK21) {
56+
javaHomePrompt += ` ${CodeWhispererConstants.macJavaVersionHomeHelpChatMessage(21)}`
5557
}
5658
} else {
5759
javaHomePrompt += ` ${CodeWhispererConstants.linuxJavaHomeHelpChatMessage}`

packages/core/src/amazonqGumby/errors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export class AlternateDependencyVersionsNotFoundError extends Error {
4343
}
4444

4545
export class JobStoppedError extends Error {
46-
constructor(readonly requestId: string) {
46+
constructor() {
4747
super('Job was rejected, stopped, or failed')
4848
}
4949
}

packages/core/src/auth/sso/ssoAccessTokenProvider.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import { randomUUID } from '../../shared/crypto'
3333
import { getExtRuntimeContext } from '../../shared/vscode/env'
3434
import { showInputBox } from '../../shared/ui/inputPrompter'
3535
import { AmazonQPromptSettings, DevSettings, PromptSettings, ToolkitPromptSettings } from '../../shared/settings'
36-
import { debounce, onceChanged } from '../../shared/utilities/functionUtils'
36+
import { onceChanged } from '../../shared/utilities/functionUtils'
3737
import { NestedMap } from '../../shared/utilities/map'
3838
import { asStringifiedStack } from '../../shared/telemetry/spans'
3939
import { showViewLogsMessage } from '../../shared/utilities/messages'
@@ -97,20 +97,7 @@ export abstract class SsoAccessTokenProvider {
9797
this.reAuthState.set(this.profile, { reAuthReason: `invalidate():${reason}` })
9898
}
9999

100-
/**
101-
* Sometimes we get many calls at once and this
102-
* can trigger redundant disk reads, or token refreshes.
103-
* We debounce to avoid this.
104-
*
105-
* NOTE: The property {@link getTokenDebounced()} does not work with being stubbed for tests, so
106-
* this redundant function was created to work around that.
107-
*/
108100
public async getToken(): Promise<SsoToken | undefined> {
109-
return this.getTokenDebounced()
110-
}
111-
private getTokenDebounced = debounce(() => this._getToken(), 50)
112-
/** Exposed for testing purposes only */
113-
public async _getToken(): Promise<SsoToken | undefined> {
114101
const data = await this.cache.token.load(this.tokenCacheKey)
115102
SsoAccessTokenProvider.logIfChanged(
116103
indent(

packages/core/src/codewhisperer/commands/startTransformByQ.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ async function validateJavaHome(): Promise<boolean> {
119119
javaVersionUsedByMaven = JDKVersion.JDK11
120120
} else if (javaVersionUsedByMaven === '17.') {
121121
javaVersionUsedByMaven = JDKVersion.JDK17
122+
} else if (javaVersionUsedByMaven === '21.') {
123+
javaVersionUsedByMaven = JDKVersion.JDK21
122124
}
123125
}
124126
if (javaVersionUsedByMaven !== transformByQState.getSourceJDKVersion()) {

0 commit comments

Comments
 (0)