2222import java .util .ArrayList ;
2323import java .util .Collection ;
2424import java .util .Collections ;
25+ import java .util .Comparator ;
26+ import java .util .HashMap ;
2527import java .util .HashSet ;
2628import java .util .List ;
29+ import java .util .Map ;
2730import java .util .Objects ;
2831import java .util .Set ;
2932
@@ -42,9 +45,13 @@ public class DefaultProjectDependencyGraph
4245 implements ProjectDependencyGraph
4346{
4447
45- private ProjectSorter sorter ;
48+ private final ProjectSorter sorter ;
4649
47- private List <MavenProject > allProjects ;
50+ private final List <MavenProject > allProjects ;
51+
52+ private final Map <MavenProject , Integer > order ;
53+
54+ private final Map <String , MavenProject > projects ;
4855
4956 /**
5057 * Creates a new project dependency graph based on the specified projects.
@@ -59,6 +66,16 @@ public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
5966 super ();
6067 this .allProjects = Collections .unmodifiableList ( new ArrayList <>( projects ) );
6168 this .sorter = new ProjectSorter ( projects );
69+ List <MavenProject > sorted = this .sorter .getSortedProjects ();
70+ this .order = new HashMap <>( sorted .size () );
71+ this .projects = new HashMap <>( sorted .size () );
72+ int index = 0 ;
73+ for ( MavenProject project : sorted )
74+ {
75+ String id = ProjectSorter .getId ( project );
76+ this .projects .put ( id , project );
77+ this .order .put ( project , index ++ );
78+ }
6279 }
6380
6481 /**
@@ -78,6 +95,16 @@ public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
7895 super ();
7996 this .allProjects = Collections .unmodifiableList ( new ArrayList <>( allProjects ) );
8097 this .sorter = new ProjectSorter ( projects );
98+ List <MavenProject > sorted = this .sorter .getSortedProjects ();
99+ this .order = new HashMap <>( sorted .size () );
100+ this .projects = new HashMap <>( sorted .size () );
101+ int index = 0 ;
102+ for ( MavenProject project : sorted )
103+ {
104+ String id = ProjectSorter .getId ( project );
105+ this .projects .put ( id , project );
106+ this .order .put ( project , index ++ );
107+ }
81108 }
82109
83110 /**
@@ -140,15 +167,13 @@ private void getUpstreamProjects( String projectId, Collection<String> projectId
140167 private List <MavenProject > getSortedProjects ( Set <String > projectIds )
141168 {
142169 List <MavenProject > result = new ArrayList <>( projectIds .size () );
143-
144- for ( MavenProject mavenProject : sorter .getSortedProjects () )
170+ for ( String projectId : projectIds )
145171 {
146- if ( projectIds .contains ( ProjectSorter .getId ( mavenProject ) ) )
147- {
148- result .add ( mavenProject );
149- }
172+ result .add ( projects .get ( projectId ) );
150173 }
151174
175+ Collections .sort ( result , new MavenProjectComparator () );
176+
152177 return result ;
153178 }
154179
@@ -158,4 +183,12 @@ public String toString()
158183 return sorter .getSortedProjects ().toString ();
159184 }
160185
186+ private class MavenProjectComparator implements Comparator <MavenProject >
187+ {
188+ @ Override
189+ public int compare ( MavenProject o1 , MavenProject o2 )
190+ {
191+ return order .get ( o1 ) - order .get ( o2 );
192+ }
193+ }
161194}
0 commit comments