Author: jvanzyl
Date: Thu May 31 20:11:29 2007
New Revision: 543373

URL: http://svn.apache.org/viewvc?view=rev&rev=543373
Log:
MNG-2813: Fix OutOfMemoryError when using profiles and pom inheritance
Submitted by: Jochen Kuhnle

Modified:
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java?view=diff&rev=543373&r1=543372&r2=543373
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 Thu May 31 20:11:29 2007
@@ -291,6 +291,24 @@
         }
 
     }
+    
+    /**
+     * Merge two DOMs. Copy the dominant DOM so the original one is left 
unchanged.
+     * <p>
+     * Use this method instead of a direct call to [EMAIL PROTECTED] 
Xpp3Dom#mergeXpp3Dom(Xpp3Dom, Xpp3Dom)}.
+     * Profiles are dominant, thus they are merge targets, but they may be 
merged in several times
+     * (e.g. if they are inherited). So with the second merge, you don't get 
the profile's original
+     * DOM, but an already merged one.
+     * 
+     * @param dominant Dominant DOM
+     * @param recessive Recessive DOM
+     * @return Merged DOM
+     */
+    private Xpp3Dom merge( Xpp3Dom dominant, Xpp3Dom recessive )
+    {
+        Xpp3Dom dominantCopy = ( dominant == null ) ? null : new Xpp3Dom( 
dominant );
+        return Xpp3Dom.mergeXpp3Dom( dominantCopy, recessive );
+    }
 
     private void injectConfigurationContainer( ConfigurationContainer 
profileContainer,
                                                ConfigurationContainer 
modelContainer )
@@ -298,7 +316,7 @@
         Xpp3Dom configuration = (Xpp3Dom) profileContainer.getConfiguration();
         Xpp3Dom parentConfiguration = (Xpp3Dom) 
modelContainer.getConfiguration();
 
-        configuration = Xpp3Dom.mergeXpp3Dom( configuration, 
parentConfiguration );
+        configuration = merge( configuration, parentConfiguration );
 
         modelContainer.setConfiguration( configuration );
     }
@@ -504,7 +522,7 @@
         Xpp3Dom dominantConfig = (Xpp3Dom) dominant.getConfiguration();
         Xpp3Dom recessiveConfig = (Xpp3Dom) recessive.getConfiguration();
 
-        recessive.setConfiguration( Xpp3Dom.mergeXpp3Dom( dominantConfig, 
recessiveConfig ) );
+        recessive.setConfiguration( merge( dominantConfig, recessiveConfig ) );
 
         Map mergedReportSets = new HashMap();
 
@@ -525,7 +543,7 @@
                 Xpp3Dom dominantRSConfig = (Xpp3Dom) 
dominantReportSet.getConfiguration();
                 Xpp3Dom mergedRSConfig = (Xpp3Dom) merged.getConfiguration();
 
-                merged.setConfiguration( Xpp3Dom.mergeXpp3Dom( 
dominantRSConfig, mergedRSConfig ) );
+                merged.setConfiguration( merge( dominantRSConfig, 
mergedRSConfig ) );
 
                 List mergedReports = merged.getReports();
 


Reply via email to