Author: jdcasey
Date: Thu Jan 31 17:54:15 2008
New Revision: 617326

URL: http://svn.apache.org/viewvc?rev=617326&view=rev
Log:
[MNG-2145] Merging fix from trunk revId: 617325

Modified:
    
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
    
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
    
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Thu Jan 31 17:54:15 2008
@@ -843,6 +843,9 @@
             }
         }
 
+        // merge any duplicated plugin definitions together, using the first 
appearance as the dominant one.
+        ModelUtils.mergeDuplicatePluginDefinitions( 
project.getModel().getBuild() );
+
         mergeManagedDependencies(project.getModel(), localRepository, 
parentSearchRepositories);
 
         try

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
 Thu Jan 31 17:54:15 2008
@@ -62,6 +62,54 @@
 {
     
     /**
+     * Given this plugin list:
+     *
+     * A1 -> B -> C -> A2 -> D
+     *
+     * Rearrange it to this:
+     *
+     * A(A1 + A2) -> B -> C -> D
+     *
+     * In cases of overlapping definitions, A1 is overridden by A2
+     *
+     */
+    public static void mergeDuplicatePluginDefinitions( PluginContainer 
pluginContainer )
+    {
+        if ( pluginContainer == null )
+        {
+            return;
+        }
+
+        List originalPlugins = pluginContainer.getPlugins();
+
+        if ( ( originalPlugins == null ) || originalPlugins.isEmpty() )
+        {
+            return;
+        }
+
+        List normalized = new ArrayList( originalPlugins.size() );
+
+        for ( Iterator it = originalPlugins.iterator(); it.hasNext(); )
+        {
+            Plugin currentPlugin = (Plugin) it.next();
+
+            if ( normalized.contains( currentPlugin ) )
+            {
+                int idx = normalized.indexOf( currentPlugin );
+                Plugin firstPlugin = (Plugin) normalized.get( idx );
+
+                mergePluginDefinitions( firstPlugin, currentPlugin, false );
+            }
+            else
+            {
+                normalized.add( currentPlugin );
+            }
+        }
+
+        pluginContainer.setPlugins( normalized );
+    }
+
+    /**
      * This should be the resulting ordering of plugins after merging:
      * 
      * Given:

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 Thu Jan 31 17:54:15 2008
@@ -66,7 +66,8 @@
 
     public void inject( Profile profile, Model model )
     {
-        injectDependencies( profile, model );
+
+        model.setDependencies( injectDependencies( profile.getDependencies(), 
model.getDependencies() ) );
 
         injectModules( profile, model );
 
@@ -213,6 +214,8 @@
             modelPlugin.setVersion( profilePlugin.getVersion() );
         }
 
+        modelPlugin.setDependencies( injectDependencies( 
profilePlugin.getDependencies(), modelPlugin.getDependencies() ) );
+
         // merge the lists of goals that are not attached to an <execution/>
         injectConfigurationContainer( profilePlugin, modelPlugin );
 
@@ -590,33 +593,29 @@
         recessive.flushReportSetMap();
     }
 
-    private void injectDependencies( Profile profile, Model model )
+    private List injectDependencies( List profileDeps, List modelDeps )
     {
         Map depsMap = new LinkedHashMap();
 
-        List deps = model.getDependencies();
-
-        if ( deps != null )
+        if ( modelDeps != null )
         {
-            for ( Iterator it = deps.iterator(); it.hasNext(); )
+            for ( Iterator it = modelDeps.iterator(); it.hasNext(); )
             {
                 Dependency dependency = (Dependency) it.next();
                 depsMap.put( dependency.getManagementKey(), dependency );
             }
         }
 
-        deps = profile.getDependencies();
-
-        if ( deps != null )
+        if ( profileDeps != null )
         {
-            for ( Iterator it = deps.iterator(); it.hasNext(); )
+            for ( Iterator it = profileDeps.iterator(); it.hasNext(); )
             {
                 Dependency dependency = (Dependency) it.next();
                 depsMap.put( dependency.getManagementKey(), dependency );
             }
         }
 
-        model.setDependencies( new ArrayList( depsMap.values() ) );
+        return new ArrayList( depsMap.values() );
     }
 
 }

Modified: 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java?rev=617326&r1=617325&r2=617326&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
 (original)
+++ 
maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/injection/DefaultProfileInjectorTest.java
 Thu Jan 31 17:54:15 2008
@@ -35,10 +35,44 @@
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.Repository;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.apache.maven.model.Dependency;
+
+import junit.framework.TestCase;
 
 public class DefaultProfileInjectorTest
     extends TestCase
 {
+
+    public void 
testShouldUseProfilePluginDependencyVersionOverMainPluginDepVersion()
+    {
+        PluginContainer profile = new PluginContainer();
+        Plugin profilePlugin = createPlugin( "group", "artifact", "1", 
Collections.EMPTY_MAP );
+        Dependency profileDep = createDependency( "g", "a", "2" );
+        profilePlugin.addDependency( profileDep );
+        profile.addPlugin( profilePlugin );
+
+        PluginContainer model = new PluginContainer();
+        Plugin plugin = createPlugin( "group", "artifact", "1", 
Collections.EMPTY_MAP );
+        Dependency dep = createDependency( "g", "a", "1" );
+        plugin.addDependency( dep );
+        model.addPlugin( plugin );
+
+        new DefaultProfileInjector().injectPlugins( profile, model );
+
+        assertEquals( profileDep.getVersion(), ((Dependency) 
plugin.getDependencies().get( 0 ) ).getVersion() );
+    }
+
+    private Dependency createDependency( String gid,
+                                         String aid,
+                                         String ver )
+    {
+        Dependency dep = new Dependency();
+        dep.setGroupId( gid );
+        dep.setArtifactId( aid );
+        dep.setVersion( ver );
+
+        return dep;
+    }
 
     /**
      * Test that this is the resulting ordering of plugins after merging:


Reply via email to