async function getProjectClasspathFromLS()

in src/classpath/classpathConfigurationView.ts [397:450]


async function getProjectClasspathFromLS(uri: vscode.Uri): Promise<ClasspathComponent> {
    const queryKeys: string[] = [
        SOURCE_PATH_KEY,
        OUTPUT_PATH_KEY,
        REFERENCED_LIBRARIES_KEY
    ];

    const response = await lsApi!.getProjectSettings(
        uri.toString(),
        queryKeys
    );
    const classpath: ClasspathComponent = {
        projectType: await getProjectType(uri.fsPath),
        sourcePaths: response[SOURCE_PATH_KEY] as string[],
        defaultOutputPath: response[OUTPUT_PATH_KEY] as string,
        referenceLibraries: response[REFERENCED_LIBRARIES_KEY] as string[],
    };
    const baseFsPath = uri.fsPath;

    classpath.sourcePaths = classpath.sourcePaths.map(p => {
        const relativePath: string = path.relative(baseFsPath, p);
        if (!relativePath) {
            return ".";
        }
        return relativePath;
    }).sort((srcA: string, srcB: string) => {
        return srcA.localeCompare(srcB);
    });

    const outputRelativePath: string = path.relative(baseFsPath, classpath.defaultOutputPath);
    if (!outputRelativePath.startsWith("..")) {
        classpath.defaultOutputPath = path.relative(baseFsPath, classpath.defaultOutputPath);
    }

    classpath.referenceLibraries = classpath.referenceLibraries.map(p => {
        const normalizedPath: string = vscode.Uri.file(p).fsPath;
        if (normalizedPath.startsWith(baseFsPath)) {
            return path.relative(baseFsPath, normalizedPath);
        }
        return normalizedPath;
    }).sort((libA: string, libB: string) => {
        // relative paths come first
        const isAbsolutePathForA: boolean = path.isAbsolute(libA);
        const isAbsolutePathForB: boolean = path.isAbsolute(libB);
        if (isAbsolutePathForA && !isAbsolutePathForB) {
            return 1;
        } else if (!isAbsolutePathForA && isAbsolutePathForB) {
            return -1;
        } else {
            return libA.localeCompare(libB);
        }
    });
    return classpath;
}