You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/02/21 22:06:19 UTC

[maven-dependency-analyzer] branch MSHARED-1036 created (now be58e8e)

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

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


      at be58e8e  [MSHARED-1036] Analyze project classes only once

This branch includes the following new commits:

     new be58e8e  [MSHARED-1036] Analyze project classes only once

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-dependency-analyzer] 01/01: [MSHARED-1036] Analyze project classes only once

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit be58e8e1fbdce8f4f3522af5d8e60f2f14193e7a
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Mon Feb 21 23:05:59 2022 +0100

    [MSHARED-1036] Analyze project classes only once
---
 .../analyzer/DefaultProjectDependencyAnalyzer.java | 77 +++++++---------------
 1 file changed, 25 insertions(+), 52 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..63ebfd3 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
@@ -33,9 +33,11 @@ import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
+import java.util.stream.Collectors;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.MavenProject;
@@ -62,7 +64,9 @@ public class DefaultProjectDependencyAnalyzer
     @Inject
     private DependencyAnalyzer dependencyAnalyzer;
 
-    /** {@inheritDoc} */
+    /**
+     * {@inheritDoc}
+     */
     public ProjectDependencyAnalysis analyze( MavenProject project )
         throws ProjectDependencyAnalyzerException
     {
@@ -70,12 +74,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 +90,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 +105,7 @@ public class DefaultProjectDependencyAnalyzer
             Set<Artifact> testArtifactsWithNonTestScope = getTestArtifactsWithNonTestScope( testOnlyArtifacts );
 
             return new ProjectDependencyAnalysis( usedDeclaredArtifacts, usedUndeclaredArtifactsWithClasses,
-                unusedDeclaredArtifacts, testArtifactsWithNonTestScope );
+                                                  unusedDeclaredArtifacts, testArtifactsWithNonTestScope );
         }
         catch ( IOException exception )
         {
@@ -201,68 +209,38 @@ public class DefaultProjectDependencyAnalyzer
         return artifactClassMap;
     }
 
-    private Set<String> buildTestDependencyClasses( MavenProject project ) throws IOException
+    private 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 );
-            }
-        }
-
-        return testOnlyDependencyClasses;
+        return testDependencyClasses.stream()
+            .filter( klass -> !mainDependencyClasses.contains( klass ) )
+            .collect( Collectors.toSet() );
     }
 
-    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 )
         throws IOException
     {
         URL url = new File( path ).toURI().toURL();
-
         return dependencyAnalyzer.analyze( url );
     }
 
     private Set<Artifact> buildDeclaredArtifacts( MavenProject project )
     {
-        Set<Artifact> declaredArtifacts = project.getDependencyArtifacts();
-
-        if ( declaredArtifacts == null )
-        {
-            declaredArtifacts = Collections.emptySet();
-        }
-
-        return declaredArtifacts;
+        return Optional.ofNullable( project.getDependencyArtifacts() ).orElseGet( Collections::emptySet );
     }
 
     private Map<Artifact, Set<String>> buildUsedArtifacts( Map<Artifact, Set<String>> artifactClassMap,
@@ -276,12 +254,7 @@ public class DefaultProjectDependencyAnalyzer
 
             if ( artifact != null )
             {
-                Set<String> classesFromArtifact = usedArtifacts.get( artifact );
-                if ( classesFromArtifact == null )
-                {
-                    classesFromArtifact = new HashSet<String>();
-                    usedArtifacts.put( artifact, classesFromArtifact );
-                }
+                Set<String> classesFromArtifact = usedArtifacts.computeIfAbsent( artifact, k -> new HashSet<>() );
                 classesFromArtifact.add( className );
             }
         }