44import * as semver from 'semver' ;
55import { Jdtls } from "../java/jdtls" ;
66import { NodeKind , type INodeData } from "../java/nodeData" ;
7- import { type DependencyCheckItem , UpgradeReason , type UpgradeIssue } from "./type" ;
7+ import { type DependencyCheckItem , UpgradeReason , type UpgradeIssue , type VersionSet } from "./type" ;
88import { DEPENDENCY_JAVA_RUNTIME } from "./dependency.metadata" ;
99import { Upgrade } from '../constants' ;
1010import { buildPackageId } from './utility' ;
1111import metadataManager from './metadataManager' ;
1212import { sendInfo } from 'vscode-extension-telemetry-wrapper' ;
1313
14+ function getVersionRange ( versions : Set < string > ) :string {
15+ const versionList = [ ...versions ] . sort ( ( a , b ) => semver . compare ( a , b ) ) ;
16+ if ( versionList . length === 1 ) {
17+ return versionList [ 0 ] ;
18+ }
19+ return `${ versionList [ 0 ] } |${ versionList [ versionList . length - 1 ] } ` ;
20+ }
21+
1422function getJavaIssues ( data : INodeData ) : UpgradeIssue [ ] {
1523 const javaVersion = data . metaData ?. MaxSourceVersion as number | undefined ;
1624 const { name, supportedVersion } = DEPENDENCY_JAVA_RUNTIME ;
@@ -59,7 +67,7 @@ function getUpgradeForDependency(versionString: string, supportedVersionDefiniti
5967 return null ;
6068}
6169
62- function getDependencyIssue ( data : INodeData ) : UpgradeIssue | null {
70+ function getDependencyIssue ( data : INodeData , versionSet : VersionSet ) : UpgradeIssue | null {
6371 const versionString = data . metaData ?. [ "maven.version" ] ;
6472 const groupId = data . metaData ?. [ "maven.groupId" ] ;
6573 const artifactId = data . metaData ?. [ "maven.artifactId" ] ;
@@ -69,6 +77,11 @@ function getDependencyIssue(data: INodeData): UpgradeIssue | null {
6977 return null ;
7078 }
7179
80+ if ( ! versionSet [ groupId ] ) {
81+ versionSet [ groupId ] = new Set ( ) ;
82+ }
83+ versionSet [ groupId ] . add ( versionString ) ;
84+
7285 return getUpgradeForDependency ( versionString , supportedVersionDefinition , packageId ) ;
7386}
7487
@@ -84,7 +97,20 @@ async function getDependencyIssues(projectNode: INodeData): Promise<UpgradeIssue
8497 path : packageContainer . path ,
8598 } ) ;
8699
87- return packages . map ( getDependencyIssue ) . filter ( ( x ) : x is UpgradeIssue => Boolean ( x ) ) ;
100+ const versionSet : VersionSet = { } ;
101+ const issues = packages . map ( pkg => getDependencyIssue ( pkg , versionSet ) ) . filter ( ( x ) : x is UpgradeIssue => Boolean ( x ) ) ;
102+ if ( Object . entries ( versionSet ) . length > 0 ) {
103+ sendInfo ( "" , {
104+ operationName : "java.dependency.assessmentManager.getDependencyIssues" ,
105+ versionRangeByGroupId : JSON . stringify (
106+ Object . fromEntries (
107+ Object . entries ( versionSet ) . map ( ( [ groupId , versionSet ] ) => [ groupId , getVersionRange ( versionSet ) ] ) ,
108+ ) ,
109+ ) ,
110+ } ) ;
111+ }
112+
113+ return issues ;
88114 } )
89115 ) ;
90116
@@ -113,10 +139,6 @@ async function getWorkspaceIssues(workspaceFolderUri: string): Promise<UpgradeIs
113139 const projects = await Jdtls . getProjects ( workspaceFolderUri ) ;
114140 const projectsIssues = await Promise . allSettled ( projects . map ( async ( projectNode ) => {
115141 const issues = await getProjectIssues ( projectNode ) ;
116- sendInfo ( "" , {
117- operationName : "java.dependency.assessmentManager.getWorkspaceIssues" ,
118- issuesFoundForPackageId : JSON . stringify ( issues . map ( x => `${ x . packageId } :${ x . currentVersion } ` ) ) ,
119- } ) ;
120142 return issues ;
121143 } ) ) ;
122144
0 commit comments