async function checkRequirement()

in src/classpath/classpathConfigurationView.ts [123:169]


async function checkRequirement(): Promise<boolean> {
    if (lsApi) {
        return true;
    }
    const javaExt = vscode.extensions.getExtension("redhat.java");
    if (!javaExt) {
        classpathConfigurationPanel?.webview.postMessage({
            command: "onException",
            exception: ClasspathViewException.JavaExtensionNotInstalled,
        });
        const err: Error = new Error("The extension 'redhat.java' is not installed.");
        setUserError(err);
        sendError(err);
        return false;
    }

    const javaExtVersion: string = javaExt.packageJSON.version;
    if (compareVersions(javaExtVersion, MINIMUM_JAVA_EXTENSION_VERSION) < 0) {
        classpathConfigurationPanel?.webview.postMessage({
            command: "onException",
            exception: ClasspathViewException.StaleJavaExtension,
        });
        const err: Error = new Error(`The extension version of 'redhat.java' (${javaExtVersion}) is too stale.`);
        setUserError(err);
        sendError(err);
        return false;
    }

    await javaExt.activate(); 
    lsApi = javaExt.exports;

    if (lsApi) {
        getExtensionContext().subscriptions.push(
            lsApi.onDidProjectsImport(() => {
                listProjects();
            }),
            lsApi.onDidClasspathUpdate((uri: vscode.Uri) => {
                if (!path.relative(uri.fsPath, currentProjectRoot.fsPath)) {
                    // Use debounced function to avoid UI jittery
                    debounceLoadProjectClasspath(uri);
                }
            }),
        );
    }

    return true;
}