From 90cdf73fd38a9f4362146df321d1992628408b40 Mon Sep 17 00:00:00 2001 From: Sanjana Date: Tue, 3 Feb 2026 00:00:57 +0530 Subject: [PATCH] Optimize artifact lookup and improve code quality in DefaultProjectDependencyAnalyzer --- .../DefaultProjectDependencyAnalyzer.java | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java index b59bd41..1123e56 100644 --- a/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java +++ b/src/main/java/org/apache/maven/shared/dependency/analyzer/DefaultProjectDependencyAnalyzer.java @@ -43,7 +43,9 @@ import org.apache.maven.project.MavenProject; /** - *

DefaultProjectDependencyAnalyzer class.

+ *

+ * DefaultProjectDependencyAnalyzer class. + *

* * @author Mark Hobson */ @@ -69,6 +71,7 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection> artifactClassMap = buildArtifactClassMap(project, excludedClassesPatterns); + Map classToArtifactMap = buildClassToArtifactMap(artifactClassMap); Set mainDependencyClasses = new HashSet<>(); for (MainDependencyClassesProvider provider : mainDependencyClassesProviders) { @@ -84,14 +87,14 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection testOnlyDependencyClasses = - buildTestOnlyDependencyClasses(mainDependencyClasses, testDependencyClasses); + Set testOnlyDependencyClasses = buildTestOnlyDependencyClasses(mainDependencyClasses, + testDependencyClasses); - Map> usedArtifacts = buildUsedArtifacts(artifactClassMap, dependencyClasses); - Set mainUsedArtifacts = - buildUsedArtifacts(artifactClassMap, mainDependencyClasses).keySet(); + Map> usedArtifacts = buildUsedArtifacts(classToArtifactMap, + dependencyClasses); + Set mainUsedArtifacts = buildUsedArtifacts(classToArtifactMap, mainDependencyClasses).keySet(); - Set testArtifacts = buildUsedArtifacts(artifactClassMap, testOnlyDependencyClasses) + Set testArtifacts = buildUsedArtifacts(classToArtifactMap, testOnlyDependencyClasses) .keySet(); Set testOnlyArtifacts = removeAll(testArtifacts, mainUsedArtifacts); @@ -105,8 +108,8 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection> usedUndeclaredArtifactsWithClasses = new LinkedHashMap<>(usedArtifacts); - Set usedUndeclaredArtifacts = - removeAll(usedUndeclaredArtifactsWithClasses.keySet(), declaredArtifacts); + Set usedUndeclaredArtifacts = removeAll(usedUndeclaredArtifactsWithClasses.keySet(), + declaredArtifacts); usedUndeclaredArtifactsWithClasses.keySet().retainAll(usedUndeclaredArtifacts); @@ -124,7 +127,8 @@ public ProjectDependencyAnalysis analyze(MavenProject project, Collection getTestArtifactsWithNonTestScope(Set test Set nonTestScopeArtifacts = new LinkedHashSet<>(); for (Artifact artifact : testOnlyArtifacts) { - if (artifact.getScope().equals("compile")) { + if (Artifact.SCOPE_COMPILE.equals(artifact.getScope())) { nonTestScopeArtifacts.add(artifact); } } @@ -226,19 +230,14 @@ private static Set buildDeclaredArtifacts(MavenProject project) { } private static Map> buildUsedArtifacts( - Map> artifactClassMap, Set dependencyClasses) { + Map classToArtifactMap, Set dependencyClasses) { Map> usedArtifacts = new HashMap<>(); for (DependencyUsage classUsage : dependencyClasses) { - Artifact artifact = findArtifactForClassName(artifactClassMap, classUsage.getDependencyClass()); + Artifact artifact = classToArtifactMap.get(classUsage.getDependencyClass()); if (artifact != null && !includedInJDK(artifact)) { - Set classesFromArtifact = usedArtifacts.get(artifact); - if (classesFromArtifact == null) { - classesFromArtifact = new HashSet<>(); - usedArtifacts.put(artifact, classesFromArtifact); - } - classesFromArtifact.add(classUsage); + usedArtifacts.computeIfAbsent(artifact, k -> new HashSet<>()).add(classUsage); } } @@ -260,13 +259,16 @@ private static boolean includedInJDK(Artifact artifact) { return false; } - private static Artifact findArtifactForClassName(Map> artifactClassMap, String className) { + private static Map buildClassToArtifactMap(Map> artifactClassMap) { + Map classToArtifactMap = new HashMap<>(); + for (Map.Entry> entry : artifactClassMap.entrySet()) { - if (entry.getValue().contains(className)) { - return entry.getKey(); + Artifact artifact = entry.getKey(); + for (String className : entry.getValue()) { + classToArtifactMap.put(className, artifact); } } - return null; + return classToArtifactMap; } }