Skip to content

Commit 9c50a29

Browse files
feat: show Java version warning in problems for pom.xml
1 parent a923b35 commit 9c50a29

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/model/PackageNode.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public class PackageNode {
8888

8989
private static final String MAX_SOURCE_VERSION = "MaxSourceVersion";
9090

91+
private static final String POM_PATH = "PomPath";
92+
9193
/**
9294
* The name of the PackageNode.
9395
*/
@@ -181,6 +183,10 @@ public static PackageNode createNodeForProject(IJavaElement javaElement) {
181183
int jdkLevel = (int) (CompilerOptions.versionToJdkLevel(sourceVersion, true) >>> 16);
182184
int majorVersion = Math.max(0, jdkLevel - ClassFileConstants.MAJOR_VERSION_0);
183185
projectNode.setMetaDataValue(MAX_SOURCE_VERSION, majorVersion);
186+
IFile existingPom = proj.getFile("pom.xml");
187+
if (existingPom.exists()) {
188+
projectNode.setMetaDataValue(POM_PATH, existingPom.getLocation().toOSString());
189+
}
184190
} catch (CoreException e) {
185191
// do nothing
186192
}

src/extension.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
// Licensed under the MIT license.
33

44
import * as path from "path";
5-
import { commands, Diagnostic, Extension, ExtensionContext, extensions, languages,
6-
Range, tasks, TextDocument, TextEditor, Uri, window, workspace } from "vscode";
5+
import {
6+
commands, Diagnostic, Extension, ExtensionContext, extensions, languages,
7+
Range, tasks, TextDocument, TextEditor, Uri, window, workspace
8+
} from "vscode";
79
import { dispose as disposeTelemetryWrapper, initializeFromJsonFile, instrumentOperation, instrumentOperationAsVsCodeCommand, sendInfo } from "vscode-extension-telemetry-wrapper";
810
import { Commands, contextManager } from "../extension.bundle";
911
import { BuildTaskProvider } from "./tasks/build/buildTaskProvider";
@@ -20,6 +22,7 @@ import { DiagnosticProvider } from "./tasks/buildArtifact/migration/DiagnosticPr
2022
import { setContextForDeprecatedTasks, updateExportTaskType } from "./tasks/buildArtifact/migration/utils";
2123
import { CodeActionProvider } from "./tasks/buildArtifact/migration/CodeActionProvider";
2224
import { newJavaFile } from "./explorerCommands/new";
25+
import { promotionProvider } from "./promotionProvider";
2326

2427
export async function activate(context: ExtensionContext): Promise<void> {
2528
contextManager.initialize(context);
@@ -44,6 +47,7 @@ async function activateExtension(_operationId: string, context: ExtensionContext
4447
context.subscriptions.push(DependencyExplorer.getInstance(context));
4548
context.subscriptions.push(contextManager);
4649
context.subscriptions.push(syncHandler);
50+
context.subscriptions.push(promotionProvider);
4751
context.subscriptions.push(tasks.registerTaskProvider(DeprecatedExportJarTaskProvider.type, new DeprecatedExportJarTaskProvider()));
4852
context.subscriptions.push(tasks.registerTaskProvider(BuildArtifactTaskProvider.exportJarType, new BuildArtifactTaskProvider()));
4953
context.subscriptions.push(tasks.registerTaskProvider(BuildTaskProvider.type, new BuildTaskProvider()));

src/promotionProvider.ts

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22
// Licensed under the MIT license.
33

44
import {
5-
commands, extensions, window,
5+
commands, extensions, window, Disposable,
6+
languages,
7+
Diagnostic,
8+
Range,
9+
DiagnosticSeverity,
10+
Uri
611
} from "vscode";
712
import * as semver from "semver";
813
import type { INodeData } from "../extension.bundle";
@@ -23,23 +28,33 @@ const PACKAGES_TO_CHECK_FOR_EOL: Record<string, { name: string, supportedVersion
2328
};
2429

2530

26-
export class PromotionProvider {
31+
export class PromotionProvider implements Disposable {
2732
public static getInstance() {
28-
if (!this._instance) {
29-
this._instance = new PromotionProvider();
30-
}
31-
32-
return this._instance;
33+
return promotionProvider;
3334
}
3435

35-
private static _instance: PromotionProvider;
36-
3736
private haveAlreadyPrompted = false;
37+
private diagnostics = languages.createDiagnosticCollection('javaUpgrade')
38+
39+
public dispose() {
40+
this.diagnostics.dispose();
41+
}
3842

3943
public checkJavaVersion(data: INodeData) {
4044
const javaVersion = data.metaData?.MaxSourceVersion;
4145
if (javaVersion && javaVersion < EARLIEST_JAVA_VERSION_NOT_TO_PROMPT) {
4246
this.triggerJavaVersionUpgrade(javaVersion);
47+
const pomPath = data.metaData?.PomPath;
48+
if (pomPath) {
49+
this.diagnostics.set(Uri.file(pomPath), [
50+
new Diagnostic(
51+
// TODO: locate the actual version settings
52+
new Range(0, 0, 0, 0),
53+
`Old Java version: ${javaVersion}`,
54+
DiagnosticSeverity.Warning
55+
)
56+
]);
57+
}
4358
}
4459
}
4560

@@ -93,4 +108,6 @@ export class PromotionProvider {
93108
});
94109
}
95110
}
96-
}
111+
}
112+
113+
export const promotionProvider = new PromotionProvider();

0 commit comments

Comments
 (0)