From af0ac84d47e73abc0a587949ba8a7d32ffc240ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=A7=80=ED=9B=88/=ED=81=B4=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=EB=93=9CSRE?= Date: Mon, 15 Jun 2026 14:50:16 +0900 Subject: [PATCH] Fix: preserve JDK_HOME priority when sorting JDKs (#4426) --- src/jdkUtils.ts | 4 ++-- test/standard-mode-suite/utils.test.ts | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts index 5cf801b343..df1ef42604 100644 --- a/src/jdkUtils.ts +++ b/src/jdkUtils.ts @@ -60,7 +60,7 @@ export async function listJdks(force?: boolean): Promise { * 4. Others */ export function sortJdksBySource(jdks: IJavaRuntime[]) { - const rankedJdks = jdks as Array; + const rankedJdks = jdks as Array; const env: string[] = ["JDK_HOME", "JAVA_HOME", "PATH"]; const jdkManagers: string[] = ["SDKMAN", "jEnv", "jabba", "asdf"]; for (const jdk of rankedJdks) { @@ -72,7 +72,7 @@ export function sortJdksBySource(jdks: IJavaRuntime[]) { } } - if (jdk.rank) { + if (typeof jdk.rank === "number") { continue; } diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index 8ec72f1b8a..b66b6bc3f3 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -2,8 +2,9 @@ import * as assert from 'assert'; import { getJavaConfiguration, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, getExclusionGlob, convertToGlob } from '../../src/utils'; +import { IJavaRuntime } from 'jdk-utils'; import { WorkspaceConfiguration } from 'vscode'; -import { listJdks } from '../../src/jdkUtils'; +import { listJdks, sortJdksBySource } from '../../src/jdkUtils'; import { platform } from 'os'; let exclusion: string[]; @@ -119,6 +120,28 @@ suite('Utils Test', () => { assert.equal(result, "{**/node_modules/test/**/**/pom.xml}"); }); + test('sortJdksBySource() - ranks JDK_HOME before lower-priority sources', () => { + const jdks: IJavaRuntime[] = [ + { homedir: "java-home", isJavaHomeEnv: true }, + { homedir: "path", isInPathEnv: true }, + { homedir: "sdkman", isFromSDKMAN: true }, + { homedir: "common" }, + { homedir: "gradle", isFromGradle: true }, + { homedir: "jdk-home", isJdkHomeEnv: true }, + ]; + + sortJdksBySource(jdks); + + assert.deepEqual(jdks.map(jdk => jdk.homedir), [ + "jdk-home", + "java-home", + "path", + "sdkman", + "common", + "gradle", + ]); + }); + test('listJdks() - no /usr as Java home on macOS', async function () { // Skip this test if it's not macOS. if (platform() !== "darwin") {