Skip to content

Commit cfa476b

Browse files
feat: do JIT extension check on command execution
1 parent 64737bc commit cfa476b

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@
593593
},
594594
{
595595
"command": "_java.view.modernizeJavaProject",
596-
"when": "explorerResourceIsFolder && java:serverMode && isModernizationExtensionInstalled",
596+
"when": "explorerResourceIsFolder && java:serverMode",
597597
"group": "1_javaactions@40"
598598
},
599599
{

src/upgrade/upgradeManager.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4-
import { commands, type ExtensionContext, extensions, workspace, type WorkspaceFolder } from "vscode";
4+
import { commands, type ExtensionContext, workspace, type WorkspaceFolder } from "vscode";
55

66
import { Jdtls } from "../java/jdtls";
77
import { languageServerApiManager } from "../languageServerApi/languageServerApiManager";
@@ -11,13 +11,13 @@ import { Commands } from "../commands";
1111
import notificationManager from "./display/notificationManager";
1212
import { Settings } from "../settings";
1313
import assessmentManager from "./assessmentManager";
14+
import { checkOrInstallExtension } from "./utility";
1415

1516
const DEFAULT_UPGRADE_PROMPT = "Upgrade Java project dependency to latest version.";
1617

1718

1819
function shouldRunCheckup() {
19-
return Settings.getEnableDependencyCheckup()
20-
&& !!extensions.getExtension(ExtensionName.APP_MODERNIZATION_UPGRADE_FOR_JAVA);
20+
return Settings.getEnableDependencyCheckup();
2121
}
2222

2323
class UpgradeManager {
@@ -26,13 +26,13 @@ class UpgradeManager {
2626

2727
// Commands to be used
2828
context.subscriptions.push(instrumentOperationAsVsCodeCommand(Commands.JAVA_UPGRADE_WITH_COPILOT, async (promptText?: string) => {
29+
await checkOrInstallExtension(ExtensionName.APP_MODERNIZATION_UPGRADE_FOR_JAVA, ExtensionName.APP_MODERNIZATION_FOR_JAVA);
2930
const promptToUse = promptText ?? DEFAULT_UPGRADE_PROMPT;
3031
await commands.executeCommand(Commands.GOTO_AGENT_MODE, { prompt: promptToUse });
3132
}));
32-
commands.executeCommand('setContext', 'isModernizationExtensionInstalled',
33-
!!extensions.getExtension(ExtensionName.APP_MODERNIZATION_FOR_JAVA));
34-
context.subscriptions.push(instrumentOperationAsVsCodeCommand(Commands.VIEW_MODERNIZE_JAVA_PROJECT, () => {
35-
commands.executeCommand("workbench.view.extension.azureJavaMigrationExplorer");
33+
context.subscriptions.push(instrumentOperationAsVsCodeCommand(Commands.VIEW_MODERNIZE_JAVA_PROJECT, async () => {
34+
await checkOrInstallExtension(ExtensionName.APP_MODERNIZATION_FOR_JAVA);
35+
await commands.executeCommand("workbench.view.extension.azureJavaMigrationExplorer");
3636
}));
3737

3838
UpgradeManager.scan();

src/upgrade/utility.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4-
import { Uri } from "vscode";
4+
import { commands, extensions, Uri, window } from "vscode";
55
import * as semver from "semver";
66
import { UpgradeReason, type UpgradeIssue } from "./type";
77
import { Upgrade } from "../constants";
@@ -73,3 +73,38 @@ export function normalizePath(path: string): string {
7373
return Uri.parse(path).toString();
7474
}
7575

76+
export async function checkOrInstallExtension(extensionIdToCheck: string, extensionIdToInstall?: string): Promise<void> {
77+
if (extensions.getExtension(extensionIdToCheck)) {
78+
return;
79+
}
80+
81+
const actualExtensionIdToInstall = extensionIdToInstall ?? extensionIdToCheck;
82+
83+
{
84+
const BTN_TEXT = "Install extension";
85+
const choice = await window.showInformationMessage(
86+
"An extension is needed for the feature to work. Please install it and try again.",
87+
BTN_TEXT
88+
);
89+
if (choice === BTN_TEXT) {
90+
await commands.executeCommand("workbench.extensions.installExtension", actualExtensionIdToInstall);
91+
}
92+
}
93+
94+
if (extensions.getExtension(actualExtensionIdToInstall)) {
95+
return;
96+
}
97+
98+
// In this case the extension is disabled.
99+
await commands.executeCommand("workbench.extensions.search", actualExtensionIdToInstall);
100+
{
101+
const BTN_TEXT = "Show extension in sidebar";
102+
const choice = await window.showInformationMessage(
103+
"An extension is needed for the feature to work but it seems disabled. Please enable it manually and try again.",
104+
BTN_TEXT
105+
);
106+
if (choice === BTN_TEXT) {
107+
await commands.executeCommand("workbench.extensions.search", actualExtensionIdToInstall);
108+
}
109+
}
110+
}

0 commit comments

Comments
 (0)