export async function findJavaRuntimeEntries()

in src/java-runtime/index.ts [207:248]


export async function findJavaRuntimeEntries(): Promise<{
  javaRuntimes?: JavaRuntimeEntry[],
  projectRuntimes?: ProjectRuntimeEntry[],
  javaDotHome?: string;
  javaHomeError?: string;
}> {
  if (!javaHomes) {
    const runtimes: IJavaRuntime[] = await findRuntimes({ checkJavac: true, withVersion: true });
    javaHomes = runtimes.filter(r => r.hasJavac);
  }
  const javaRuntimes: JavaRuntimeEntry[] = javaHomes.map(elem => ({
    name: elem.homedir,
    fspath: elem.homedir,
    majorVersion: elem.version?.major || 0,
    type: "from jdk-utils"
  })).sort((a, b) => b.majorVersion - a.majorVersion);

  let javaDotHome;
  let javaHomeError;
  try {
    const runtime = await resolveRequirements();
    javaDotHome = runtime.tooling_jre;
    const javaVersion = runtime.tooling_jre_version;
    if (!javaVersion || javaVersion < 11) {
      javaHomeError = `Java 11 or more recent is required by the Java language support (redhat.java) extension. Preferred JDK "${javaDotHome}" (version ${javaVersion}) doesn't meet the requirement. Please specify or install a recent JDK.`;
    }
  } catch (error) {
    javaHomeError = (error as Error).message;
  }

  let projectRuntimes = await getProjectRuntimesFromPM();
  if (_.isEmpty(projectRuntimes)) {
    projectRuntimes = await getProjectRuntimesFromLS();
  }

  return {
    javaRuntimes,
    projectRuntimes,
    javaDotHome,
    javaHomeError
  };
}