Skip to content

Commit

Permalink
[MNG-6698] Lazily compute the ManagedVersionMap
Browse files Browse the repository at this point in the history
This map is not used by Maven and the computation can be quite heavy, so lazily
compute it. In addition, do not clone the map as it's an unmodifiable one already.

This closes apache#263
  • Loading branch information
gnodet authored and michael-o committed Jul 6, 2019
1 parent 84bf187 commit 7ba9700
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@

import java.io.File;
import java.io.IOException;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -780,21 +782,69 @@ private void initProject( MavenProject project, Map<String, MavenProject> projec
Map<String, Artifact> map = null;
if ( repositorySystem != null )
{
DependencyManagement dependencyManagement = project.getDependencyManagement();
final DependencyManagement dependencyManagement = project.getDependencyManagement();
if ( ( dependencyManagement != null ) && ( ( dependencyManagement.getDependencies() ) != null )
&& ( dependencyManagement.getDependencies().size() > 0 ) )
{
map = new HashMap<>();
for ( Dependency d : dependencyManagement.getDependencies() )
map = new AbstractMap<String, Artifact>()
{
Artifact artifact = repositorySystem.createDependencyArtifact( d );
HashMap<String, Artifact> delegate;

if ( artifact != null )
@Override
public Set<Entry<String, Artifact>> entrySet()
{
map.put( d.getManagementKey(), artifact );
return Collections.unmodifiableSet( compute().entrySet() );
}
}
map = Collections.unmodifiableMap( map );

@Override
public Set<String> keySet()
{
return Collections.unmodifiableSet( compute().keySet() );
}

@Override
public Collection<Artifact> values()
{
return Collections.unmodifiableCollection( compute().values() );
}

@Override
public boolean containsValue( Object value )
{
return compute().containsValue( value );
}

@Override
public boolean containsKey( Object key )
{
return compute().containsKey( key );
}

@Override
public Artifact get( Object key )
{
return compute().get( key );
}

HashMap<String, Artifact> compute()
{
if ( delegate == null )
{
delegate = new HashMap<>();
for ( Dependency d : dependencyManagement.getDependencies() )
{
Artifact artifact = repositorySystem.createDependencyArtifact( d );

if ( artifact != null )
{
delegate.put( d.getManagementKey(), artifact );
}
}
}

return delegate;
}
};
}
else
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1304,7 +1304,7 @@ private void deepCopy( MavenProject project )

if ( project.getManagedVersionMap() != null )
{
setManagedVersionMap( new HashMap<>( project.getManagedVersionMap() ) );
setManagedVersionMap( project.getManagedVersionMap() );
}

lifecyclePhases.addAll( project.lifecyclePhases );
Expand Down

0 comments on commit 7ba9700

Please sign in to comment.