3636import java .util .Set ;
3737import java .util .jar .JarEntry ;
3838import java .util .jar .JarFile ;
39+ import java .util .stream .Collectors ;
3940
4041import org .apache .maven .artifact .Artifact ;
4142import org .apache .maven .project .MavenProject ;
@@ -68,17 +69,17 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection<String
6869 ClassesPatterns excludedClassesPatterns = new ClassesPatterns (excludedClasses );
6970 Map <Artifact , Set <String >> artifactClassMap = buildArtifactClassMap (project , excludedClassesPatterns );
7071
71- Set <String > mainDependencyClasses = buildMainDependencyClasses (project , excludedClassesPatterns );
72- Set <String > testDependencyClasses = buildTestDependencyClasses (project , excludedClassesPatterns );
72+ Set <DependencyUsage > mainDependencyClasses = buildMainDependencyClasses (project , excludedClassesPatterns );
73+ Set <DependencyUsage > testDependencyClasses = buildTestDependencyClasses (project , excludedClassesPatterns );
7374
74- Set <String > dependencyClasses = new HashSet <>();
75+ Set <DependencyUsage > dependencyClasses = new HashSet <>();
7576 dependencyClasses .addAll (mainDependencyClasses );
7677 dependencyClasses .addAll (testDependencyClasses );
7778
78- Set <String > testOnlyDependencyClasses =
79+ Set <DependencyUsage > testOnlyDependencyClasses =
7980 buildTestOnlyDependencyClasses (mainDependencyClasses , testDependencyClasses );
8081
81- Map <Artifact , Set <String >> usedArtifacts = buildUsedArtifacts (artifactClassMap , dependencyClasses );
82+ Map <Artifact , Set <DependencyUsage >> usedArtifacts = buildUsedArtifacts (artifactClassMap , dependencyClasses );
8283 Set <Artifact > mainUsedArtifacts =
8384 buildUsedArtifacts (artifactClassMap , mainDependencyClasses ).keySet ();
8485
@@ -90,7 +91,7 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection<String
9091 Set <Artifact > usedDeclaredArtifacts = new LinkedHashSet <>(declaredArtifacts );
9192 usedDeclaredArtifacts .retainAll (usedArtifacts .keySet ());
9293
93- Map <Artifact , Set <String >> usedUndeclaredArtifactsWithClasses = new LinkedHashMap <>(usedArtifacts );
94+ Map <Artifact , Set <DependencyUsage >> usedUndeclaredArtifactsWithClasses = new LinkedHashMap <>(usedArtifacts );
9495 Set <Artifact > usedUndeclaredArtifacts =
9596 removeAll (usedUndeclaredArtifactsWithClasses .keySet (), declaredArtifacts );
9697 usedUndeclaredArtifactsWithClasses .keySet ().retainAll (usedUndeclaredArtifacts );
@@ -190,29 +191,33 @@ private Map<Artifact, Set<String>> buildArtifactClassMap(MavenProject project, C
190191 return artifactClassMap ;
191192 }
192193
193- private static Set <String > buildTestOnlyDependencyClasses (
194- Set <String > mainDependencyClasses , Set <String > testDependencyClasses ) {
195- Set <String > testOnlyDependencyClasses = new HashSet <>(testDependencyClasses );
196- testOnlyDependencyClasses .removeAll (mainDependencyClasses );
194+ private static Set <DependencyUsage > buildTestOnlyDependencyClasses (
195+ Set <DependencyUsage > mainDependencyClasses , Set <DependencyUsage > testDependencyClasses ) {
196+ Set <DependencyUsage > testOnlyDependencyClasses = new HashSet <>(testDependencyClasses );
197+ Set <String > mainDepClassNames = mainDependencyClasses .stream ()
198+ .map (DependencyUsage ::getDependencyClass )
199+ .collect (Collectors .toSet ());
200+ testOnlyDependencyClasses .removeIf (u -> mainDepClassNames .contains (u .getDependencyClass ()));
197201 return testOnlyDependencyClasses ;
198202 }
199203
200- private Set <String > buildMainDependencyClasses (MavenProject project , ClassesPatterns excludedClasses )
204+ private Set <DependencyUsage > buildMainDependencyClasses (MavenProject project , ClassesPatterns excludedClasses )
201205 throws IOException {
202206 String outputDirectory = project .getBuild ().getOutputDirectory ();
203207 return buildDependencyClasses (outputDirectory , excludedClasses );
204208 }
205209
206- private Set <String > buildTestDependencyClasses (MavenProject project , ClassesPatterns excludedClasses )
210+ private Set <DependencyUsage > buildTestDependencyClasses (MavenProject project , ClassesPatterns excludedClasses )
207211 throws IOException {
208212 String testOutputDirectory = project .getBuild ().getTestOutputDirectory ();
209213 return buildDependencyClasses (testOutputDirectory , excludedClasses );
210214 }
211215
212- private Set <String > buildDependencyClasses (String path , ClassesPatterns excludedClasses ) throws IOException {
216+ private Set <DependencyUsage > buildDependencyClasses (String path , ClassesPatterns excludedClasses )
217+ throws IOException {
213218 URL url = new File (path ).toURI ().toURL ();
214219
215- return dependencyAnalyzer .analyze (url , excludedClasses );
220+ return dependencyAnalyzer .analyzeUsages (url , excludedClasses );
216221 }
217222
218223 private static Set <Artifact > buildDeclaredArtifacts (MavenProject project ) {
@@ -225,20 +230,20 @@ private static Set<Artifact> buildDeclaredArtifacts(MavenProject project) {
225230 return declaredArtifacts ;
226231 }
227232
228- private static Map <Artifact , Set <String >> buildUsedArtifacts (
229- Map <Artifact , Set <String >> artifactClassMap , Set <String > dependencyClasses ) {
230- Map <Artifact , Set <String >> usedArtifacts = new HashMap <>();
233+ private static Map <Artifact , Set <DependencyUsage >> buildUsedArtifacts (
234+ Map <Artifact , Set <String >> artifactClassMap , Set <DependencyUsage > dependencyClasses ) {
235+ Map <Artifact , Set <DependencyUsage >> usedArtifacts = new HashMap <>();
231236
232- for (String className : dependencyClasses ) {
233- Artifact artifact = findArtifactForClassName (artifactClassMap , className );
237+ for (DependencyUsage classUsage : dependencyClasses ) {
238+ Artifact artifact = findArtifactForClassName (artifactClassMap , classUsage . getDependencyClass () );
234239
235240 if (artifact != null ) {
236- Set <String > classesFromArtifact = usedArtifacts .get (artifact );
241+ Set <DependencyUsage > classesFromArtifact = usedArtifacts .get (artifact );
237242 if (classesFromArtifact == null ) {
238243 classesFromArtifact = new HashSet <>();
239244 usedArtifacts .put (artifact , classesFromArtifact );
240245 }
241- classesFromArtifact .add (className );
246+ classesFromArtifact .add (classUsage );
242247 }
243248 }
244249
0 commit comments