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 6d1603367581e43af7168732846812bb2b42368f Author: Karl Heinz Marbaise <[email protected]> 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()
