Skip to content

Commit 4807136

Browse files
feat(upgradeManager): dependency check
1 parent 2edd8d6 commit 4807136

File tree

1 file changed

+51
-5
lines changed

1 file changed

+51
-5
lines changed

src/upgrade/upgradeManager.ts

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { CodeActionKind, commands, type ExtensionContext, extensions, languages, workspace, type WorkspaceFolder, type WorkspaceFoldersChangeEvent } from "vscode";
2+
import * as semver from 'semver'
23
import { Jdtls } from "../java/jdtls";
34
import { languageServerApiManager } from "../languageServerApi/languageServerApiManager";
4-
import type { INodeData } from "../java/nodeData";
5+
import { NodeKind, type INodeData } from "../java/nodeData";
56
import issueManager from "./issueManager";
67
import { ExtensionName, Upgrade } from "../constants";
78
import { UpgradeReason } from "./type";
@@ -67,14 +68,34 @@ class UpgradeManager {
6768

6869
const uri = folder.uri.toString();
6970
const projects = await Jdtls.getProjects(uri);
70-
projects.forEach((project) => this.checkJavaVersion(project));
71+
projects.forEach(async (project) => {
72+
const pomPath = project.metaData?.PomPath as string | undefined;
73+
if (!pomPath) {
74+
return;
75+
}
76+
this.checkJavaVersion(project, pomPath);
77+
const packageData = await Jdtls.getPackageData({ kind: NodeKind.Project, projectUri: project.uri });
78+
packageData
79+
.filter(x => x.kind === NodeKind.Container)
80+
.forEach(async (packageContainer) => {
81+
const packages = await Jdtls.getPackageData({
82+
kind: NodeKind.Container,
83+
projectUri: project.uri,
84+
path: packageContainer.path,
85+
});
86+
packages.forEach(
87+
(pkg) => this.checkDependencyVersion(pkg, pomPath)
88+
);
89+
});
90+
91+
92+
});
7193

7294
}
7395

74-
private checkJavaVersion(data: INodeData) {
96+
private checkJavaVersion(data: INodeData, pomPath: string) {
7597
const javaVersion = data.metaData?.MaxSourceVersion as number | undefined;
76-
const pomPath = data.metaData?.PomPath as string | undefined;
77-
if (!pomPath || !javaVersion) {
98+
if (!javaVersion) {
7899
return;
79100
}
80101
if (javaVersion < EARLIEST_JAVA_VERSION_NOT_TO_PROMPT) {
@@ -89,6 +110,31 @@ class UpgradeManager {
89110
}
90111
}
91112

113+
private checkDependencyVersion(data: INodeData, dependingPomPath: string) {
114+
const versionString = data.metaData?.["maven.version"];
115+
const groupId = data.metaData?.["maven.groupId"];
116+
const supportedVersionDefinition = metadataManager.getDependencyMetadata(groupId);
117+
if (!versionString || !groupId || !supportedVersionDefinition) {
118+
return;
119+
}
120+
const currentVersion = semver.coerce(versionString);
121+
if (!currentVersion) {
122+
issueManager.removeIssue(dependingPomPath, groupId);
123+
return;
124+
}
125+
if (!semver.satisfies(currentVersion, supportedVersionDefinition.supportedVersion)) {
126+
issueManager.addIssue(dependingPomPath, {
127+
packageId: groupId,
128+
packageDisplayName: supportedVersionDefinition.name,
129+
reason: UpgradeReason.END_OF_LIFE,
130+
currentVersion: versionString,
131+
suggestedVersion: "latest", // TODO
132+
});
133+
} else {
134+
issueManager.removeIssue(dependingPomPath, groupId);
135+
}
136+
}
137+
92138
private async runUpgrade(promptText: string) {
93139
const hasJavaUpgradeToolExtension = !!extensions.getExtension(ExtensionName.JAVA_UPGRADE_TOOL);
94140
if (!hasJavaUpgradeToolExtension) {

0 commit comments

Comments
 (0)