Skip to content

Commit af0ac84

Browse files
committed
Fix: preserve JDK_HOME priority when sorting JDKs (#4426)
1 parent 8bec230 commit af0ac84

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

src/jdkUtils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export async function listJdks(force?: boolean): Promise<IJavaRuntime[]> {
6060
* 4. Others
6161
*/
6262
export function sortJdksBySource(jdks: IJavaRuntime[]) {
63-
const rankedJdks = jdks as Array<IJavaRuntime & { rank: number }>;
63+
const rankedJdks = jdks as Array<IJavaRuntime & { rank?: number }>;
6464
const env: string[] = ["JDK_HOME", "JAVA_HOME", "PATH"];
6565
const jdkManagers: string[] = ["SDKMAN", "jEnv", "jabba", "asdf"];
6666
for (const jdk of rankedJdks) {
@@ -72,7 +72,7 @@ export function sortJdksBySource(jdks: IJavaRuntime[]) {
7272
}
7373
}
7474

75-
if (jdk.rank) {
75+
if (typeof jdk.rank === "number") {
7676
continue;
7777
}
7878

test/standard-mode-suite/utils.test.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
import * as assert from 'assert';
44
import { getJavaConfiguration, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, getExclusionGlob, convertToGlob } from '../../src/utils';
5+
import { IJavaRuntime } from 'jdk-utils';
56
import { WorkspaceConfiguration } from 'vscode';
6-
import { listJdks } from '../../src/jdkUtils';
7+
import { listJdks, sortJdksBySource } from '../../src/jdkUtils';
78
import { platform } from 'os';
89

910
let exclusion: string[];
@@ -119,6 +120,28 @@ suite('Utils Test', () => {
119120
assert.equal(result, "{**/node_modules/test/**/**/pom.xml}");
120121
});
121122

123+
test('sortJdksBySource() - ranks JDK_HOME before lower-priority sources', () => {
124+
const jdks: IJavaRuntime[] = [
125+
{ homedir: "java-home", isJavaHomeEnv: true },
126+
{ homedir: "path", isInPathEnv: true },
127+
{ homedir: "sdkman", isFromSDKMAN: true },
128+
{ homedir: "common" },
129+
{ homedir: "gradle", isFromGradle: true },
130+
{ homedir: "jdk-home", isJdkHomeEnv: true },
131+
];
132+
133+
sortJdksBySource(jdks);
134+
135+
assert.deepEqual(jdks.map(jdk => jdk.homedir), [
136+
"jdk-home",
137+
"java-home",
138+
"path",
139+
"sdkman",
140+
"common",
141+
"gradle",
142+
]);
143+
});
144+
122145
test('listJdks() - no /usr as Java home on macOS', async function () {
123146
// Skip this test if it's not macOS.
124147
if (platform() !== "darwin") {

0 commit comments

Comments
 (0)