Author: bentmann
Date: Fri Aug  7 22:17:19 2009
New Revision: 802251

URL: http://svn.apache.org/viewvc?rev=802251&view=rev
Log:
o Fixed critical performance regression introduced in r801648. The relocation 
is now grabbed alongside the direct dependencies when we get the resolution 
group, these bits are stored in the same file and so we can as well process 
them in one go.
Issue id: o

Modified:
    
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
    
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
    
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
    
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
    
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
    
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
    
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
    
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
    
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
    
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java

Modified: 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactUtils.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
 Fri Aug  7 22:17:19 2009
@@ -122,6 +122,11 @@
         return artifactMap;
     }
 
+    public static Artifact copyArtifactSafe( Artifact artifact )
+    {
+        return ( artifact != null ) ? copyArtifact( artifact ) : null;
+    }
+
     public static Artifact copyArtifact( Artifact artifact )
     {
         VersionRange range = artifact.getVersionRange();

Modified: 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java
 Fri Aug  7 22:17:19 2009
@@ -33,10 +33,10 @@
         super( pomArtifact, artifacts, resolutionRepositories );
     }
 
-    public ResolutionGroup( Artifact pomArtifact, Set<Artifact> artifacts, 
Map<String, Artifact> managedVersions,
-                            List<ArtifactRepository> resolutionRepositories )
+    public ResolutionGroup( Artifact pomArtifact, Artifact relocatedArtifact, 
Set<Artifact> artifacts,
+                            Map<String, Artifact> managedVersions, 
List<ArtifactRepository> resolutionRepositories )
     {
-        super( pomArtifact, artifacts, managedVersions, resolutionRepositories 
);
+        super( pomArtifact, relocatedArtifact, artifacts, managedVersions, 
resolutionRepositories );
     }
 
 }

Modified: 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
 Fri Aug  7 22:17:19 2009
@@ -72,11 +72,4 @@
     List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( 
Artifact artifact, ArtifactRepository localRepository, ArtifactRepository 
remoteRepository )                                                              
              
         throws ArtifactMetadataRetrievalException;
 
-    /**
-     * Resolve all relocations in the POM for this artifact, and return the 
new artifact coordinate.
-     */
-    Artifact retrieveRelocatedArtifact( Artifact artifact, ArtifactRepository 
localRepository,
-                                        List<ArtifactRepository> 
remoteRepositories )
-        throws ArtifactMetadataRetrievalException;
-
 }
\ No newline at end of file

Modified: 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java
 Fri Aug  7 22:17:19 2009
@@ -35,18 +35,21 @@
 
     private final Artifact pomArtifact;
 
+    private final Artifact relocatedArtifact;
+
     private final Map<String, Artifact> managedVersions;
 
     public ResolutionGroup( Artifact pomArtifact, Set<Artifact> artifacts,
                             List<ArtifactRepository> resolutionRepositories )
     {
-        this( pomArtifact, artifacts, null, resolutionRepositories );
+        this( pomArtifact, null, artifacts, null, resolutionRepositories );
     }
 
-    public ResolutionGroup( Artifact pomArtifact, Set<Artifact> artifacts, 
Map<String, Artifact> managedVersions,
-                            List<ArtifactRepository> resolutionRepositories )
+    public ResolutionGroup( Artifact pomArtifact, Artifact relocatedArtifact, 
Set<Artifact> artifacts,
+                            Map<String, Artifact> managedVersions, 
List<ArtifactRepository> resolutionRepositories )
     {
         this.pomArtifact = pomArtifact;
+        this.relocatedArtifact = relocatedArtifact;
         this.artifacts = artifacts;
         this.managedVersions = managedVersions;
         this.resolutionRepositories = resolutionRepositories;
@@ -57,6 +60,11 @@
         return pomArtifact;
     }
 
+    public Artifact getRelocatedArtifact()
+    {
+        return relocatedArtifact;
+    }
+
     public Set<Artifact> getArtifacts()
     {
         return artifacts;

Modified: 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
 Fri Aug  7 22:17:19 2009
@@ -400,6 +400,8 @@
 
                         try
                         {
+                            ResolutionGroup rGroup;
+
                             Object childKey;
                             do
                             {
@@ -481,9 +483,14 @@
                                     fireEvent( 
ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child );
                                 }
 
-                                Artifact relocated =
-                                    source.retrieveRelocatedArtifact( 
artifact, localRepository,
-                                                                      
childRemoteRepositories );
+                                rGroup = source.retrieve( artifact, 
localRepository, childRemoteRepositories );
+
+                                if ( rGroup == null )
+                                {
+                                    break;
+                                }
+
+                                Artifact relocated = 
rGroup.getRelocatedArtifact();
                                 if ( relocated != null && !artifact.equals( 
relocated ) )
                                 {
                                     relocated.setDependencyFilter( 
artifact.getDependencyFilter() );
@@ -504,8 +511,6 @@
                                 continue;
                             }
 
-                            ResolutionGroup rGroup = source.retrieve( 
artifact, localRepository, childRemoteRepositories );
-
                             // TODO might be better to have source.retrieve() 
throw a specific exception for this
                             // situation
                             // and catch here rather than have it return null

Modified: 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java
 Fri Aug  7 22:17:19 2009
@@ -57,14 +57,6 @@
         return Collections.<ArtifactVersion>singletonList( new 
DefaultArtifactVersion( "10.1.3" ) );
     }
 
-    public Artifact retrieveRelocatedArtifact( Artifact artifact,
-                                               ArtifactRepository 
localRepository,
-                                               List<ArtifactRepository> 
remoteRepositories )
-        throws ArtifactMetadataRetrievalException
-    {
-        return artifact;
-    }
-
     public ResolutionGroup retrieve( MetadataResolutionRequest request )
         throws ArtifactMetadataRetrievalException
     {

Modified: 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java
 Fri Aug  7 22:17:19 2009
@@ -69,12 +69,6 @@
         throw new UnsupportedOperationException( "Cannot get available 
versions in this test case" );
     }
 
-    public Artifact retrieveRelocatedArtifact( Artifact artifact, 
ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories 
)
-        throws ArtifactMetadataRetrievalException
-    {
-        return artifact;
-    }
-
     public ResolutionGroup retrieve( MetadataResolutionRequest request )
         throws ArtifactMetadataRetrievalException
     {

Modified: 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
 Fri Aug  7 22:17:19 2009
@@ -217,14 +217,6 @@
                 throw new UnsupportedOperationException( "Cannot get available 
versions in this test case" );
             }
 
-            public Artifact retrieveRelocatedArtifact( Artifact artifact,
-                                                       ArtifactRepository 
localRepository,
-                                                       
List<ArtifactRepository> remoteRepositories )
-                throws ArtifactMetadataRetrievalException
-            {
-                return artifact;
-            }
-
             public ResolutionGroup retrieve( MetadataResolutionRequest request 
)
                 throws ArtifactMetadataRetrievalException
             {

Modified: 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
 Fri Aug  7 22:17:19 2009
@@ -969,14 +969,6 @@
             return artifactVersions;
         }
 
-        public Artifact retrieveRelocatedArtifact( Artifact artifact,
-                                                   ArtifactRepository 
localRepository,
-                                                   List<ArtifactRepository> 
remoteRepositories )
-            throws ArtifactMetadataRetrievalException
-        {
-            return artifact;
-        }
-
         public ResolutionGroup retrieve( MetadataResolutionRequest request )
             throws ArtifactMetadataRetrievalException
         {

Modified: 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
 (original)
+++ 
maven/components/trunk/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java
 Fri Aug  7 22:17:19 2009
@@ -72,12 +72,6 @@
         throw new UnsupportedOperationException( "Cannot get available 
versions in this test case" );
     }
 
-    public Artifact retrieveRelocatedArtifact( Artifact artifact, 
ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories 
)
-        throws ArtifactMetadataRetrievalException
-    {
-        return artifact;
-    }
-
     public ResolutionGroup retrieve( MetadataResolutionRequest request )
         throws ArtifactMetadataRetrievalException
     {

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java
 Fri Aug  7 22:17:19 2009
@@ -126,6 +126,7 @@
     public class CacheRecord
     {
         private Artifact pomArtifact;
+        private Artifact relocatedArtifact;
         private List<Artifact> artifacts;
         private Map<String, Artifact> managedVersions;
         private List<ArtifactRepository> remoteRepositories;
@@ -133,9 +134,11 @@
         private long length;
         private long timestamp;
 
-        CacheRecord(Artifact pomArtifact, Set<Artifact> artifacts, Map<String, 
Artifact> managedVersions, List<ArtifactRepository> remoteRepositories)
+        CacheRecord( Artifact pomArtifact, Artifact relocatedArtifact, 
Set<Artifact> artifacts,
+                     Map<String, Artifact> managedVersions, 
List<ArtifactRepository> remoteRepositories )
         {
             this.pomArtifact = ArtifactUtils.copyArtifact( pomArtifact );
+            this.relocatedArtifact = ArtifactUtils.copyArtifactSafe( 
relocatedArtifact );
             this.artifacts = ArtifactUtils.copyArtifacts( artifacts, new 
ArrayList<Artifact>() );
             this.remoteRepositories = new ArrayList<ArtifactRepository>( 
remoteRepositories );
 
@@ -158,12 +161,17 @@
                 this.timestamp = -1;
             }
         }
-        
+
         public Artifact getArtifact()
         {
             return pomArtifact;
         }
 
+        public Artifact getRelocatedArtifact()
+        {
+            return relocatedArtifact;
+        }
+
         public List<Artifact> getArtifacts()
         {
             return artifacts;
@@ -203,6 +211,7 @@
         if ( cacheRecord != null && !cacheRecord.isStale() )
         {
             Artifact pomArtifact = ArtifactUtils.copyArtifact( 
cacheRecord.getArtifact() );
+            Artifact relocatedArtifact = ArtifactUtils.copyArtifactSafe( 
cacheRecord.getRelocatedArtifact() );
             Set<Artifact> artifacts =
                 ArtifactUtils.copyArtifacts( cacheRecord.getArtifacts(), new 
LinkedHashSet<Artifact>() );
             Map<String, Artifact> managedVersions = 
cacheRecord.getManagedVersions();
@@ -210,7 +219,8 @@
             {
                 managedVersions = ArtifactUtils.copyArtifacts( 
managedVersions, new LinkedHashMap<String, Artifact>() );
             }
-            return new ResolutionGroup( pomArtifact, artifacts, 
managedVersions, cacheRecord.getRemoteRepositories() );
+            return new ResolutionGroup( pomArtifact, relocatedArtifact, 
artifacts, managedVersions,
+                                        cacheRecord.getRemoteRepositories() );
         }
 
         cache.remove( cacheKey );
@@ -223,8 +233,8 @@
     {
         CacheKey cacheKey = new CacheKey( artifact, resolveManagedVersions, 
localRepository, remoteRepositories );
         CacheRecord cacheRecord =
-            new CacheRecord( result.getPomArtifact(), result.getArtifacts(), 
result.getManagedVersions(),
-                             result.getResolutionRepositories() );
+            new CacheRecord( result.getPomArtifact(), 
result.getRelocatedArtifact(), result.getArtifacts(),
+                             result.getManagedVersions(), 
result.getResolutionRepositories() );
 
         cache.put( cacheKey, cacheRecord );
     }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=802251&r1=802250&r2=802251&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
 Fri Aug  7 22:17:19 2009
@@ -26,6 +26,7 @@
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
@@ -127,6 +128,8 @@
 
         Artifact pomArtifact;
 
+        Artifact relocatedArtifact = null;
+
         //TODO: Not even sure this is really required as the project will be 
cached in the builder, we'll see this
         // is currently the biggest hotspot
         if ( artifact instanceof ArtifactWithDependencies )
@@ -157,6 +160,8 @@
             }
             else
             {
+                relocatedArtifact = rel.relocatedArtifact;
+
                 dependencies = rel.project.getDependencies();
 
                 DependencyManagement depMngt = 
rel.project.getDependencyManagement();
@@ -195,7 +200,8 @@
             }
         }
 
-        ResolutionGroup result = new ResolutionGroup( pomArtifact, artifacts, 
managedVersions, remoteRepositories );
+        ResolutionGroup result =
+            new ResolutionGroup( pomArtifact, relocatedArtifact, artifacts, 
managedVersions, remoteRepositories );
 
         cache.put( artifact, resolveManagedVersions, localRepository, 
remoteRepositories, result );
 
@@ -410,63 +416,6 @@
         return projectBuilder;
     }
 
-    public Artifact retrieveRelocatedArtifact( Artifact artifact, 
ArtifactRepository localRepository,
-                                               List<ArtifactRepository> 
remoteRepositories )
-        throws ArtifactMetadataRetrievalException
-    {
-
-        ProjectRelocation rel = retrieveRelocatedProject( artifact, 
localRepository, remoteRepositories );
-
-        if ( rel == null )
-        {
-            return artifact;
-        }
-
-        MavenProject project = rel.project;
-        if ( project == null || getRelocationKey( artifact ).equals( 
getRelocationKey( project.getArtifact() ) ) )
-        {
-            return artifact;
-        }
-
-        // NOTE: Using artifact information here, since some POMs are deployed
-        // to central with one version in the filename, but another in the 
<version> string!
-        // Case in point: org.apache.ws.commons:XmlSchema:1.1:pom.
-        //
-        // Since relocation triggers a reconfiguration of the artifact's 
information
-        // in retrieveRelocatedProject(..), this is safe to do.
-        Artifact result = null;
-        if ( artifact.getClassifier() != null )
-        {
-            result =
-                repositorySystem.createArtifactWithClassifier( 
artifact.getGroupId(), artifact.getArtifactId(),
-                                                               
artifact.getVersion(), artifact.getType(),
-                                                               
artifact.getClassifier() );
-        }
-        else
-        {
-            result =
-                repositorySystem.createArtifact( artifact.getGroupId(), 
artifact.getArtifactId(),
-                                                 artifact.getVersion(), 
artifact.getScope(), artifact.getType() );
-        }
-
-        result.setResolved( artifact.isResolved() );
-        result.setFile( artifact.getFile() );
-
-        result.setScope( artifact.getScope() );
-        result.setArtifactHandler( artifact.getArtifactHandler() );
-        result.setDependencyFilter( artifact.getDependencyFilter() );
-        result.setDependencyTrail( artifact.getDependencyTrail() );
-        result.setOptional( artifact.isOptional() );
-        result.setRelease( artifact.isRelease() );
-
-        return result;
-    }
-
-    private String getRelocationKey( Artifact artifact )
-    {
-        return artifact.getGroupId() + ':' + artifact.getArtifactId() + ':' + 
artifact.getVersion();
-    }
-
     private ProjectRelocation retrieveRelocatedProject( Artifact artifact, 
ArtifactRepository localRepository,
                                                         
List<ArtifactRepository> remoteRepositories )
         throws ArtifactMetadataRetrievalException
@@ -474,20 +423,21 @@
         MavenProject project = null;
 
         Artifact pomArtifact;
+        Artifact relocatedArtifact = artifact;
         boolean done = false;
         do
         {
-            // TODO: can we just modify the original?
             pomArtifact =
-                repositorySystem.createProjectArtifact( artifact.getGroupId(), 
artifact.getArtifactId(),
-                                                        artifact.getVersion(), 
artifact.getScope() );
+                repositorySystem.createProjectArtifact( 
relocatedArtifact.getGroupId(),
+                                                        
relocatedArtifact.getArtifactId(),
+                                                        
relocatedArtifact.getVersion(), relocatedArtifact.getScope() );
 
-            if ( "pom".equals( artifact.getType() ) )
+            if ( "pom".equals( relocatedArtifact.getType() ) )
             {
-                pomArtifact.setFile( artifact.getFile() );
+                pomArtifact.setFile( relocatedArtifact.getFile() );
             }
 
-            if ( Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) )
+            if ( Artifact.SCOPE_SYSTEM.equals( relocatedArtifact.getScope() ) )
             {
                 done = true;
             }
@@ -495,7 +445,6 @@
             {
                 try
                 {
-
                     ProjectBuildingRequest configuration = new 
DefaultProjectBuildingRequest();
                     configuration.setLocalRepository( localRepository );
                     configuration.setRemoteRepositories( remoteRepositories );
@@ -520,31 +469,36 @@
                     {
                         relocation = distMgmt.getRelocation();
 
-                        artifact.setDownloadUrl( distMgmt.getDownloadUrl() );
+                        relocatedArtifact.setDownloadUrl( 
distMgmt.getDownloadUrl() );
                         pomArtifact.setDownloadUrl( distMgmt.getDownloadUrl() 
);
                     }
 
                     if ( relocation != null )
                     {
+                        if ( relocatedArtifact == artifact )
+                        {
+                            relocatedArtifact = ArtifactUtils.copyArtifact( 
artifact );
+                        }
+
                         if ( relocation.getGroupId() != null )
                         {
-                            artifact.setGroupId( relocation.getGroupId() );
+                            relocatedArtifact.setGroupId( 
relocation.getGroupId() );
                             project.setGroupId( relocation.getGroupId() );
                         }
                         if ( relocation.getArtifactId() != null )
                         {
-                            artifact.setArtifactId( relocation.getArtifactId() 
);
+                            relocatedArtifact.setArtifactId( 
relocation.getArtifactId() );
                             project.setArtifactId( relocation.getArtifactId() 
);
                         }
                         if ( relocation.getVersion() != null )
                         {
                             // note: see MNG-3454. This causes a problem, but 
fixing it may break more.
-                            artifact.setVersionRange( 
VersionRange.createFromVersion( relocation.getVersion() ) );
+                            relocatedArtifact.setVersionRange( 
VersionRange.createFromVersion( relocation.getVersion() ) );
                             project.setVersion( relocation.getVersion() );
                         }
 
                         if ( artifact.getDependencyFilter() != null
-                            && !artifact.getDependencyFilter().include( 
artifact ) )
+                            && !artifact.getDependencyFilter().include( 
relocatedArtifact ) )
                         {
                             return null;
                         }
@@ -555,14 +509,14 @@
                         List<ArtifactVersion> available = 
artifact.getAvailableVersions();
                         if ( available != null && !available.isEmpty() )
                         {
-                            artifact.setAvailableVersions( 
retrieveAvailableVersions( artifact, localRepository,
-                                                                               
       remoteRepositories ) );
-
+                            available =
+                                retrieveAvailableVersions( relocatedArtifact, 
localRepository, remoteRepositories );
+                            relocatedArtifact.setAvailableVersions( available 
);
                         }
 
                         String message =
-                            "\n  This artifact has been relocated to " + 
artifact.getGroupId() + ":"
-                                + artifact.getArtifactId() + ":" + 
artifact.getVersion() + ".\n";
+                            "\n  This artifact has been relocated to " + 
relocatedArtifact.getGroupId() + ":"
+                                + relocatedArtifact.getArtifactId() + ":" + 
relocatedArtifact.getVersion() + ".\n";
 
                         if ( relocation.getMessage() != null )
                         {
@@ -596,6 +550,7 @@
         ProjectRelocation rel = new ProjectRelocation();
         rel.project = project;
         rel.pomArtifact = pomArtifact;
+        rel.relocatedArtifact = ( relocatedArtifact == artifact ) ? null : 
relocatedArtifact;
 
         return rel;
     }
@@ -605,6 +560,8 @@
         private MavenProject project;
 
         private Artifact pomArtifact;
+
+        private Artifact relocatedArtifact;
     }
 
 }


Reply via email to