Skip to content

Commit d50bdfe

Browse files
feat: check for EOL Spring Framework/Boot versions to prompt for update
1 parent 7d53fc0 commit d50bdfe

File tree

2 files changed

+48
-7
lines changed

2 files changed

+48
-7
lines changed

src/promotionProvider.ts

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,23 @@
44
import {
55
commands, extensions, window,
66
} from "vscode";
7+
import * as semver from "semver";
78
import type { INodeData } from "../extension.bundle";
89

910
const EARLIEST_JAVA_VERSION_NOT_TO_PROMPT = 21;
1011
const JAVA_UPGRADE_EXTENSION_ID = "vscjava.vscode-java-upgrade";
12+
const PACKAGES_TO_CHECK_FOR_EOL: Record<string, { name: string, supportedVersion: string }> = {
13+
// https://spring.io/projects/spring-boot#support
14+
"org.springframework.boot": {
15+
name: "Spring Boot",
16+
supportedVersion: "2.7.x || >=3.2.x"
17+
},
18+
// https://spring.io/projects/spring-framework#support
19+
"org.springframework": {
20+
name: "Spring Framework",
21+
supportedVersion: "5.3.x || >=6.2.x"
22+
},
23+
};
1124

1225

1326
export class PromotionProvider {
@@ -30,25 +43,52 @@ export class PromotionProvider {
3043
}
3144
}
3245

46+
public checkDependencyVersion(data: INodeData) {
47+
const versionString = data.metaData?.["maven.version"];
48+
const groupId = data.metaData?.["maven.groupId"];
49+
const supportedVersionDefinition = PACKAGES_TO_CHECK_FOR_EOL[groupId];
50+
if (!versionString || !groupId || !supportedVersionDefinition) {
51+
return;
52+
}
53+
const currentVersion = semver.parse(versionString);
54+
if (!currentVersion) {
55+
return;
56+
}
57+
if (!semver.satisfies(currentVersion, supportedVersionDefinition.supportedVersion)) {
58+
this.triggerFrameworkVersionUpgrade(groupId, versionString);
59+
}
60+
}
61+
3362
private triggerJavaVersionUpgrade(currentJavaVersion: number) {
3463
if (!this.haveAlreadyPrompted) {
3564
this.haveAlreadyPrompted = true;
36-
this.promptForJavaVersionUpgrade(currentJavaVersion);
65+
this.promptForUpgrade(
66+
`Your project's Java version (${currentJavaVersion}) is older than 21. Consider upgrading using Java Upgrade Tool for better performance and features.`,
67+
"Upgrade project Java version to 21 with Java Upgrade Tool"
68+
);
69+
}
70+
}
71+
72+
private triggerFrameworkVersionUpgrade(groupId: string, currentVersion: string) {
73+
if (!this.haveAlreadyPrompted) {
74+
this.haveAlreadyPrompted = true;
75+
const frameworkName = PACKAGES_TO_CHECK_FOR_EOL[groupId].name;
76+
this.promptForUpgrade(`Your project's ${frameworkName} version (${currentVersion}) has reached end-of-life. Consider upgrading using Java Upgrade Tool for better security and performance.`,
77+
`Upgrade ${frameworkName} to a supported version with Java Upgrade Tool`)
3778
}
3879
}
3980

40-
private async promptForJavaVersionUpgrade(currentJavaVersion: number) {
81+
private async promptForUpgrade(notificationText: string, promptText: string) {
4182
const hasJavaUpgradeToolExtension = !!extensions.getExtension(JAVA_UPGRADE_EXTENSION_ID);
42-
const upgradeMessage = hasJavaUpgradeToolExtension ? "Upgrade" : "Install extension and upgrade";
83+
const buttonText = hasJavaUpgradeToolExtension ? "Upgrade" : "Install extension and upgrade";
4384
const selection = await window.showInformationMessage(
44-
`Your project's Java version (${currentJavaVersion}) is older than 21. Consider upgrading using Java Upgrade Tool for better performance and features.`,
45-
upgradeMessage);
46-
if (selection === upgradeMessage) {
85+
notificationText, buttonText);
86+
if (selection === buttonText) {
4787
if (!hasJavaUpgradeToolExtension) {
4888
await commands.executeCommand("workbench.extensions.installExtension", JAVA_UPGRADE_EXTENSION_ID);
4989
}
5090
await commands.executeCommand("workbench.action.chat.open", {
51-
query: "Upgrade Java version with Java Upgrade Tool",
91+
query: promptText,
5292
isPartialQuery: true
5393
});
5494
}

src/views/nodeFactory.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export class NodeFactory {
5050
if (isHierarchicalView) {
5151
return new HierarchicalPackageRootNode(nodeData, parent, project);
5252
}
53+
PromotionProvider.getInstance().checkDependencyVersion(nodeData);
5354
return new PackageRootNode(nodeData, parent, project);
5455
case NodeKind.Package:
5556
if (!parent || !project || !rootNode) {

0 commit comments

Comments
 (0)