Skip to content

Commit 34d7bcf

Browse files
authored
Add a new API to wait for standard server ready (#2461)
- Add waitForServerReady() which returns a promise. The promise will only be resolved when the standard server is ready. Signed-off-by: sheche <[email protected]>
1 parent 14a8159 commit 34d7bcf

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

src/apiManager.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class ApiManager {
1616
private onDidClasspathUpdateEmitter: Emitter<Uri> = new Emitter<Uri>();
1717
private onDidServerModeChangeEmitter: Emitter<ServerMode> = new Emitter<ServerMode>();
1818
private onDidProjectsImportEmitter: Emitter<Uri[]> = new Emitter<Uri[]>();
19+
private serverReadyPromiseResolve: (result: boolean) => void;
1920

2021
public initialize(requirements: RequirementsData, serverMode: ServerMode): void {
2122
const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider();
@@ -37,6 +38,13 @@ class ApiManager {
3738
const onDidServerModeChange = this.onDidServerModeChangeEmitter.event;
3839
const onDidProjectsImport = this.onDidProjectsImportEmitter.event;
3940

41+
const serverReadyPromise: Promise<boolean> = new Promise<boolean>((resolve) => {
42+
this.serverReadyPromiseResolve = resolve;
43+
});
44+
const waitForServerReady = async () => {
45+
return serverReadyPromise;
46+
};
47+
4048
this.api = {
4149
apiVersion: ExtensionApiVersion,
4250
javaRequirement: requirements,
@@ -51,6 +59,7 @@ class ApiManager {
5159
serverMode,
5260
onDidServerModeChange,
5361
onDidProjectsImport,
62+
waitForServerReady,
5463
};
5564
}
5665

@@ -81,6 +90,10 @@ class ApiManager {
8190
public updateStatus(status: ClientStatus): void {
8291
this.api.status = status;
8392
}
93+
94+
public standardServerReady(): void {
95+
this.serverReadyPromiseResolve(true);
96+
}
8497
}
8598

8699
export const apiManager: ApiManager = new ApiManager();

src/extension.api.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export enum ClientStatus {
7373
Stopping = "Stopping",
7474
}
7575

76-
export const ExtensionApiVersion = '0.6';
76+
export const ExtensionApiVersion = '0.7';
7777

7878
export interface ExtensionAPI {
7979
readonly apiVersion: string;
@@ -110,4 +110,11 @@ export interface ExtensionAPI {
110110
* An event which fires when the server mode has been switched.
111111
*/
112112
readonly onDidServerModeChange: Event<ServerMode>;
113+
114+
/**
115+
* A promise that will be resolved when the standard language server is ready.
116+
* @since API version 0.7
117+
* @since extension version 1.7.0
118+
*/
119+
readonly waitForServerReady: () => Promise<boolean>;
113120
}

src/standardLanguageClient.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export class StandardLanguageClient {
108108
case 'ServiceReady':
109109
apiManager.updateServerMode(ServerMode.STANDARD);
110110
apiManager.fireDidServerModeChange(ServerMode.STANDARD);
111+
apiManager.standardServerReady();
111112
activationProgressNotification.hide();
112113
if (!hasImported) {
113114
showImportFinishNotification(context);

test/standard-mode-suite/publicApi.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,11 @@ suite('Public APIs - Standard', () => {
163163
});
164164
});
165165

166+
test('waitForServerReady() should work', async function () {
167+
const api: ExtensionAPI = extensions.getExtension('redhat.java').exports;
168+
await api.waitForServerReady();
169+
});
170+
166171
suiteTeardown(async function() {
167172
// revert the pom content
168173
const pomContent: string = await fse.readFile(pomPath, 'utf-8');

0 commit comments

Comments
 (0)