private static Path getLanguageServerDirectory()

in customization-base/src/main/java/com/azure/autorest/customization/implementation/ls/EclipseLanguageServerFacade.java [126:166]


    private static Path getLanguageServerDirectory(int javaVersion, Logger logger, boolean forceReDownload)
            throws IOException {
        Path tmp = Paths.get(System.getProperty("java.io.tmpdir"));
        Path autorestLanguageServer = tmp.resolve("autorest-java-language-server");

        URL downloadUrl;
        Path languageServerPath;
        if (javaVersion < 17) {
            // Eclipse JDT language server version 1.12.0 is the last version that supports Java 11, which is
            // autorest.java's baseline.
            downloadUrl
                    = URI.create(DOWNLOAD_BASE_URL + "1.12.0/jdt-language-server-1.12.0-202206011637.tar.gz").toURL();
            languageServerPath = autorestLanguageServer.resolve("1.12.0");
        } else {
            // Eclipse JDT language server version 1.39.0 is the latest version that supports Java 17.
            // In the future this else statement may need to be replaced with an else if as newer versions of
            // Eclipse JDT language server may baseline on Java 21 (or later).
            downloadUrl
                    = URI.create(DOWNLOAD_BASE_URL + "1.39.0/jdt-language-server-1.39.0-202408291433.tar.gz").toURL();
            languageServerPath = autorestLanguageServer.resolve("1.39.0");
        }

        Path languageServer = languageServerPath.resolve("jdt-language-server");

        if (!Files.exists(languageServer) || forceReDownload) {
            Files.createDirectories(languageServer);
            Path zipPath = languageServerPath.resolve(
                    // avoid concurrent download conflict
                    String.format("jdt-language-server-%d.tar.gz", System.currentTimeMillis()));

            logger.info("Downloading Eclipse JDT language server from {} to {}", downloadUrl, zipPath);
            try (InputStream in = downloadUrl.openStream()) {
                Files.copy(in, zipPath);
            }
            logger.info("Downloaded Eclipse JDT language server to {}", zipPath);

            return unzipLanguageServer(zipPath);
        }

        return languageServer;
    }