Skip to content

Commit

Permalink
[MNG-7235] Speed improvements when calculating the sorted project graph
Browse files Browse the repository at this point in the history
This closes #530
  • Loading branch information
gnodet authored and michael-o committed Sep 27, 2021
1 parent 8882a9c commit 0a6bbb8
Showing 1 changed file with 41 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
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;

Expand All @@ -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.
Expand All @@ -59,6 +66,16 @@ public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
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++ );
}
}

/**
Expand All @@ -78,6 +95,16 @@ public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
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++ );
}
}

/**
Expand Down Expand Up @@ -140,15 +167,13 @@ private void getUpstreamProjects( String projectId, Collection<String> projectId
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;
}

Expand All @@ -158,4 +183,12 @@ public String toString()
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 );
}
}
}

0 comments on commit 0a6bbb8

Please sign in to comment.