You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2021/10/01 12:30:00 UTC

[maven] 01/04: [MNG-7272] - Code Improvement - II

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

khmarbaise pushed a commit to branch MNG-7272
in repository https://gitbox.apache.org/repos/asf/maven.git

commit b06315a54304a4943dd3667f4cc05b0c05967e5f
Author: Karl Heinz Marbaise <kh...@apache.org>
AuthorDate: Thu Sep 30 00:46:08 2021 +0200

    [MNG-7272] - Code Improvement - II
---
 .../maven/graph/DefaultProjectDependencyGraph.java | 38 ++++++--------
 .../org/apache/maven/project/ProjectSorter.java    | 58 ++++++----------------
 2 files changed, 30 insertions(+), 66 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
index de4ea73..910b610 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
@@ -43,16 +43,16 @@ import org.codehaus.plexus.util.dag.CycleDetectedException;
  * @author Benjamin Bentmann
  */
 public class DefaultProjectDependencyGraph
-    implements ProjectDependencyGraph
+        implements ProjectDependencyGraph
 {
 
-    private final ProjectSorter sorter;
+    private ProjectSorter sorter;
 
-    private final List<MavenProject> allProjects;
+    private List<MavenProject> allProjects;
 
-    private final Map<MavenProject, Integer> order;
+    private Map<MavenProject, Integer> order;
 
-    private final Map<String, MavenProject> projects;
+    private Map<String, MavenProject> projects;
 
     /**
      * Creates a new project dependency graph based on the specified projects.
@@ -62,38 +62,30 @@ public class DefaultProjectDependencyGraph
      * @throws CycleDetectedException
      */
     public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
-        throws CycleDetectedException, DuplicateProjectException
+            throws CycleDetectedException, DuplicateProjectException
     {
-        super();
-        this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) );
-        this.sorter = new ProjectSorter( projects );
-        this.order = new HashMap<>();
-        this.projects = new HashMap<>();
-        List<MavenProject> sorted = this.sorter.getSortedProjects();
-        for ( int index = 0; index < sorted.size(); index++ )
-        {
-            MavenProject project = sorted.get( index );
-            String id = ProjectSorter.getId( project );
-            this.projects.put( id, project );
-            this.order.put( project, index );
-        }
+        init( projects, projects );
     }
 
     /**
      * Creates a new project dependency graph based on the specified projects.
      *
      * @param allProjects All collected projects.
-     * @param projects The projects to create the dependency graph with.
-     *
+     * @param projects    The projects to create the dependency graph with.
      * @throws DuplicateProjectException
      * @throws CycleDetectedException
      * @since 3.5.0
      */
     public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
                                           final Collection<MavenProject> projects )
-        throws CycleDetectedException, DuplicateProjectException
+            throws CycleDetectedException, DuplicateProjectException
+    {
+        init( allProjects, projects );
+    }
+
+    private void init( Collection<MavenProject> allProjects, final Collection<MavenProject> projects )
+            throws CycleDetectedException, DuplicateProjectException
     {
-        super();
         this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) );
         this.sorter = new ProjectSorter( projects );
         this.order = new HashMap<>();
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java b/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
index 40cdf1b..a736410 100644
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
@@ -19,13 +19,12 @@ package org.apache.maven.project;
  * under the License.
  */
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.model.Dependency;
@@ -49,8 +48,6 @@ public class ProjectSorter
 
     private Map<String, MavenProject> projectMap;
 
-    private MavenProject topLevelProject;
-
     /**
      * Sort a list of projects.
      * <ul>
@@ -126,43 +123,29 @@ public class ProjectSorter
                          parent.getVersion(), true, false );
             }
 
-            List<Plugin> buildPlugins = project.getBuildPlugins();
-            if ( buildPlugins != null )
+            for ( Plugin plugin : project.getBuildPlugins() )
             {
-                for ( Plugin plugin : buildPlugins )
+                addEdge( projectMap, vertexMap, project, projectVertex, plugin.getGroupId(),
+                         plugin.getArtifactId(), plugin.getVersion(), false, true );
+
+                for ( Dependency dependency : plugin.getDependencies() )
                 {
-                    addEdge( projectMap, vertexMap, project, projectVertex, plugin.getGroupId(),
-                             plugin.getArtifactId(), plugin.getVersion(), false, true );
-
-                    for ( Dependency dependency : plugin.getDependencies() )
-                    {
-                        addEdge( projectMap, vertexMap, project, projectVertex, dependency.getGroupId(),
-                                 dependency.getArtifactId(), dependency.getVersion(), false, true );
-                    }
+                    addEdge( projectMap, vertexMap, project, projectVertex, dependency.getGroupId(),
+                             dependency.getArtifactId(), dependency.getVersion(), false, true );
                 }
             }
 
-            List<Extension> buildExtensions = project.getBuildExtensions();
-            if ( buildExtensions != null )
+            for ( Extension extension : project.getBuildExtensions() )
             {
-                for ( Extension extension : buildExtensions )
-                {
-                    addEdge( projectMap, vertexMap, project, projectVertex, extension.getGroupId(),
-                             extension.getArtifactId(), extension.getVersion(), false, true );
-                }
+                addEdge( projectMap, vertexMap, project, projectVertex, extension.getGroupId(),
+                         extension.getArtifactId(), extension.getVersion(), false, true );
             }
         }
 
-        List<MavenProject> sortedProjects = new ArrayList<>( projects.size() );
-
         List<String> sortedProjectLabels = TopologicalSorter.sort( dag );
 
-        for ( String id : sortedProjectLabels )
-        {
-            sortedProjects.add( projectMap.get( id ) );
-        }
-
-        this.sortedProjects = Collections.unmodifiableList( sortedProjects );
+        this.sortedProjects = sortedProjectLabels.stream().map( id -> projectMap.get( id ) )
+                .collect( Collectors.collectingAndThen( Collectors.toList(), Collections::unmodifiableList ) );
     }
     @SuppressWarnings( "checkstyle:parameternumber" )
     private void addEdge( Map<String, MavenProject> projectMap, Map<String, Map<String, Vertex>> vertexMap,
@@ -235,19 +218,8 @@ public class ProjectSorter
     // TODO !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
     public MavenProject getTopLevelProject()
     {
-        if ( topLevelProject == null )
-        {
-            for ( Iterator<MavenProject> i = sortedProjects.iterator(); i.hasNext() && ( topLevelProject == null ); )
-            {
-                MavenProject project = i.next();
-                if ( project.isExecutionRoot() )
-                {
-                    topLevelProject = project;
-                }
-            }
-        }
-
-        return topLevelProject;
+        return sortedProjects.stream().filter( MavenProject::isExecutionRoot ).findFirst()
+                .orElse( null );
     }
 
     public List<MavenProject> getSortedProjects()