You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2021/09/27 18:19:41 UTC
[maven] branch maven-3.8.x updated: [MNG-7235] Speed improvements
when calculating the sorted project graph
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch maven-3.8.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.8.x by this push:
new 0a6bbb8 [MNG-7235] Speed improvements when calculating the sorted project graph
0a6bbb8 is described below
commit 0a6bbb8301717d386e6588a7ea32e3e2451c7060
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Thu Sep 9 16:10:25 2021 +0200
[MNG-7235] Speed improvements when calculating the sorted project graph
This closes #530
---
.../maven/graph/DefaultProjectDependencyGraph.java | 49 ++++++++++++++++++----
1 file changed, 41 insertions(+), 8 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 e0067f1..7804312 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
@@ -22,8 +22,11 @@ package org.apache.maven.graph;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Objects;
import java.util.Set;
@@ -42,9 +45,13 @@ public class DefaultProjectDependencyGraph
implements ProjectDependencyGraph
{
- private ProjectSorter sorter;
+ private final ProjectSorter sorter;
- private List<MavenProject> allProjects;
+ private final List<MavenProject> allProjects;
+
+ private final Map<MavenProject, Integer> order;
+
+ private final Map<String, MavenProject> projects;
/**
* Creates a new project dependency graph based on the specified projects.
@@ -59,6 +66,16 @@ public class DefaultProjectDependencyGraph
super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) );
this.sorter = new ProjectSorter( projects );
+ List<MavenProject> sorted = this.sorter.getSortedProjects();
+ this.order = new HashMap<>( sorted.size() );
+ this.projects = new HashMap<>( sorted.size() );
+ int index = 0;
+ for ( MavenProject project : sorted )
+ {
+ String id = ProjectSorter.getId( project );
+ this.projects.put( id, project );
+ this.order.put( project, index++ );
+ }
}
/**
@@ -78,6 +95,16 @@ public class DefaultProjectDependencyGraph
super();
this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) );
this.sorter = new ProjectSorter( projects );
+ List<MavenProject> sorted = this.sorter.getSortedProjects();
+ this.order = new HashMap<>( sorted.size() );
+ this.projects = new HashMap<>( sorted.size() );
+ int index = 0;
+ for ( MavenProject project : sorted )
+ {
+ String id = ProjectSorter.getId( project );
+ this.projects.put( id, project );
+ this.order.put( project, index++ );
+ }
}
/**
@@ -140,15 +167,13 @@ public class DefaultProjectDependencyGraph
private List<MavenProject> getSortedProjects( Set<String> projectIds )
{
List<MavenProject> result = new ArrayList<>( projectIds.size() );
-
- for ( MavenProject mavenProject : sorter.getSortedProjects() )
+ for ( String projectId : projectIds )
{
- if ( projectIds.contains( ProjectSorter.getId( mavenProject ) ) )
- {
- result.add( mavenProject );
- }
+ result.add( projects.get( projectId ) );
}
+ Collections.sort( result, new MavenProjectComparator() );
+
return result;
}
@@ -158,4 +183,12 @@ public class DefaultProjectDependencyGraph
return sorter.getSortedProjects().toString();
}
+ private class MavenProjectComparator implements Comparator<MavenProject>
+ {
+ @Override
+ public int compare( MavenProject o1, MavenProject o2 )
+ {
+ return order.get( o1 ) - order.get( o2 );
+ }
+ }
}