11import { CodeActionKind , commands , type ExtensionContext , extensions , languages , workspace , type WorkspaceFolder , type WorkspaceFoldersChangeEvent } from "vscode" ;
2+ import * as semver from 'semver'
23import { Jdtls } from "../java/jdtls" ;
34import { languageServerApiManager } from "../languageServerApi/languageServerApiManager" ;
4- import type { INodeData } from "../java/nodeData" ;
5+ import { NodeKind , type INodeData } from "../java/nodeData" ;
56import issueManager from "./issueManager" ;
67import { ExtensionName , Upgrade } from "../constants" ;
78import { 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