This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-analyzer.git


The following commit(s) were added to refs/heads/master by this push:
     new b6533fe  [MSHARED-1036] Analyze project classes only once
b6533fe is described below

commit b6533feeb5d97cb961d4f93f6b0e5cbc50adcbb8
Author: Slawomir Jaranowski <[email protected]>
AuthorDate: Mon Feb 21 23:05:59 2022 +0100

    [MSHARED-1036] Analyze project classes only once
---
 .../analyzer/DefaultProjectDependencyAnalyzer.java | 64 ++++++++--------------
 1 file changed, 23 insertions(+), 41 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 dc0c6a2..6115334 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
@@ -70,12 +70,15 @@ public class DefaultProjectDependencyAnalyzer
         {
             Map<Artifact, Set<String>> artifactClassMap = 
buildArtifactClassMap( project );
 
-            Set<String> dependencyClasses = buildDependencyClasses( project );
             Set<String> mainDependencyClasses = buildMainDependencyClasses( 
project );
+            Set<String> testDependencyClasses = buildTestDependencyClasses( 
project );
 
-            Set<String> testOnlyDependencyClasses = 
buildTestDependencyClasses( project );
+            Set<String> dependencyClasses = new HashSet<>();
+            dependencyClasses.addAll( mainDependencyClasses );
+            dependencyClasses.addAll( testDependencyClasses );
 
-            Set<Artifact> declaredArtifacts = buildDeclaredArtifacts( project 
);
+            Set<String> testOnlyDependencyClasses = 
buildTestOnlyDependencyClasses( mainDependencyClasses,
+                                                                               
     testDependencyClasses );
 
             Map<Artifact, Set<String>> usedArtifacts = buildUsedArtifacts( 
artifactClassMap, dependencyClasses );
             Set<Artifact> mainUsedArtifacts = buildUsedArtifacts( 
artifactClassMap, mainDependencyClasses ).keySet();
@@ -83,6 +86,7 @@ public class DefaultProjectDependencyAnalyzer
             Set<Artifact> testArtifacts = buildUsedArtifacts( 
artifactClassMap, testOnlyDependencyClasses ).keySet();
             Set<Artifact> testOnlyArtifacts = removeAll( testArtifacts, 
mainUsedArtifacts );
 
+            Set<Artifact> declaredArtifacts = buildDeclaredArtifacts( project 
);
             Set<Artifact> usedDeclaredArtifacts = new LinkedHashSet<>( 
declaredArtifacts );
             usedDeclaredArtifacts.retainAll( usedArtifacts.keySet() );
 
@@ -97,7 +101,7 @@ public class DefaultProjectDependencyAnalyzer
             Set<Artifact> testArtifactsWithNonTestScope = 
getTestArtifactsWithNonTestScope( testOnlyArtifacts );
 
             return new ProjectDependencyAnalysis( usedDeclaredArtifacts, 
usedUndeclaredArtifactsWithClasses,
-                unusedDeclaredArtifacts, testArtifactsWithNonTestScope );
+                                                  unusedDeclaredArtifacts, 
testArtifactsWithNonTestScope );
         }
         catch ( IOException exception )
         {
@@ -113,7 +117,7 @@ public class DefaultProjectDependencyAnalyzer
      * @param remove set to exclude
      * @return set with remove excluded
      */
-    private Set<Artifact> removeAll( Set<Artifact> start, Set<Artifact> remove 
)
+    private static Set<Artifact> removeAll( Set<Artifact> start, Set<Artifact> 
remove )
     {
         Set<Artifact> results = new LinkedHashSet<>( start.size() );
 
@@ -139,7 +143,7 @@ public class DefaultProjectDependencyAnalyzer
         return results;
     }
 
-    private Set<Artifact> getTestArtifactsWithNonTestScope( Set<Artifact> 
testOnlyArtifacts )
+    private static Set<Artifact> getTestArtifactsWithNonTestScope( 
Set<Artifact> testOnlyArtifacts )
     {
         Set<Artifact> nonTestScopeArtifacts = new LinkedHashSet<>();
 
@@ -201,48 +205,26 @@ public class DefaultProjectDependencyAnalyzer
         return artifactClassMap;
     }
 
-    private Set<String> buildTestDependencyClasses( MavenProject project ) 
throws IOException
+    private static Set<String> buildTestOnlyDependencyClasses( Set<String> 
mainDependencyClasses,
+                                                               Set<String> 
testDependencyClasses )
     {
-        Set<String> testOnlyDependencyClasses = new HashSet<>();
-
-        String outputDirectory = project.getBuild().getOutputDirectory();
-        Set<String> nonTestDependencyClasses = new HashSet<>( 
buildDependencyClasses( outputDirectory ) );
-
-        String testOutputDirectory = 
project.getBuild().getTestOutputDirectory();
-        Set<String> testDependencyClasses = new HashSet<>( 
buildDependencyClasses( testOutputDirectory ) );
-
-        for ( String testString : testDependencyClasses )
-        {
-            if ( !nonTestDependencyClasses.contains( testString ) )
-            {
-                testOnlyDependencyClasses.add( testString );
-            }
-        }
-
+        Set<String> testOnlyDependencyClasses = new HashSet<>( 
testDependencyClasses );
+        testOnlyDependencyClasses.removeAll( mainDependencyClasses );
         return testOnlyDependencyClasses;
     }
 
-    private Set<String> buildDependencyClasses( MavenProject project )
+    private Set<String> buildMainDependencyClasses( MavenProject project )
         throws IOException
     {
-
         String outputDirectory = project.getBuild().getOutputDirectory();
-        Set<String> dependencyClasses = new HashSet<>( buildDependencyClasses( 
outputDirectory ) );
-
-        String testOutputDirectory = 
project.getBuild().getTestOutputDirectory();
-        dependencyClasses.addAll( buildDependencyClasses( testOutputDirectory 
) );
-
-        return dependencyClasses;
+        return buildDependencyClasses( outputDirectory );
     }
 
-    private Set<String> buildMainDependencyClasses( MavenProject project )
+    private Set<String> buildTestDependencyClasses( MavenProject project )
         throws IOException
     {
-
-        String outputDirectory = project.getBuild().getOutputDirectory();
-        Set<String> dependencyClasses = new HashSet<>( buildDependencyClasses( 
outputDirectory ) );
-
-        return dependencyClasses;
+        String testOutputDirectory = 
project.getBuild().getTestOutputDirectory();
+        return buildDependencyClasses( testOutputDirectory );
     }
 
     private Set<String> buildDependencyClasses( String path )
@@ -253,7 +235,7 @@ public class DefaultProjectDependencyAnalyzer
         return dependencyAnalyzer.analyze( url );
     }
 
-    private Set<Artifact> buildDeclaredArtifacts( MavenProject project )
+    private static Set<Artifact> buildDeclaredArtifacts( MavenProject project )
     {
         Set<Artifact> declaredArtifacts = project.getDependencyArtifacts();
 
@@ -265,8 +247,8 @@ public class DefaultProjectDependencyAnalyzer
         return declaredArtifacts;
     }
 
-    private Map<Artifact, Set<String>> buildUsedArtifacts( Map<Artifact, 
Set<String>> artifactClassMap,
-                                                           Set<String> 
dependencyClasses )
+    private static Map<Artifact, Set<String>> buildUsedArtifacts( 
Map<Artifact, Set<String>> artifactClassMap,
+                                                                  Set<String> 
dependencyClasses )
     {
         Map<Artifact, Set<String>> usedArtifacts = new HashMap<>();
 
@@ -289,7 +271,7 @@ public class DefaultProjectDependencyAnalyzer
         return usedArtifacts;
     }
 
-    private Artifact findArtifactForClassName( Map<Artifact, Set<String>> 
artifactClassMap, String className )
+    private static Artifact findArtifactForClassName( Map<Artifact, 
Set<String>> artifactClassMap, String className )
     {
         for ( Map.Entry<Artifact, Set<String>> entry : 
artifactClassMap.entrySet() )
         {

Reply via email to