Skip to content

Commit 4891595

Browse files
FrankLiu4138Copilot
andcommitted
Wait for extension registration via onDidChange instead of fixed sleep
Replace the fixed 2s wait after a fresh install with an event-driven wait: resolve immediately if the extension is already registered, otherwise listen on extensions.onDidChange and proceed as soon as it appears, with a 5s timeout fallback. Returns as early as possible while still bounding the wait. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e270f83 commit 4891595

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

src/upgrade/utility.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,9 @@ export async function checkOrInstallAppModExtensionForUpgrade(
224224
return false;
225225
}
226226

227-
// Give the newly installed extension a moment to activate before proceeding
228-
await new Promise(resolve => setTimeout(resolve, 2000));
227+
// Wait until the freshly installed extension is registered, returning as
228+
// soon as it is ready, or after a 5s timeout fallback at the latest.
229+
await waitForExtensionReady(extensionIdToCheck, 5000);
229230

230231
sendInfo(operationId, {
231232
operationName: "java.dependency.upgradeFlow.result",
@@ -234,3 +235,24 @@ export async function checkOrInstallAppModExtensionForUpgrade(
234235
return true;
235236
})();
236237
}
238+
239+
function waitForExtensionReady(extensionId: string, timeoutMs: number): Promise<void> {
240+
return new Promise<void>(resolve => {
241+
if (extensions.getExtension(extensionId)) {
242+
resolve();
243+
return;
244+
}
245+
let timer: NodeJS.Timeout;
246+
const disposable = extensions.onDidChange(() => {
247+
if (extensions.getExtension(extensionId)) {
248+
clearTimeout(timer);
249+
disposable.dispose();
250+
resolve();
251+
}
252+
});
253+
timer = setTimeout(() => {
254+
disposable.dispose();
255+
resolve();
256+
}, timeoutMs);
257+
});
258+
}

0 commit comments

Comments
 (0)