You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2012/08/24 20:25:16 UTC

svn commit: r1377020 - /maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java

Author: krosenvold
Date: Fri Aug 24 18:25:16 2012
New Revision: 1377020

URL: http://svn.apache.org/viewvc?rev=1377020&view=rev
Log:
o Changed clumsy collection interpolation into List interpolation, since it's all lists anyway.

Performs twice as fast, but you'll have to be a profiler to appreciate this subtle
performance increase.

Modified:
    maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java

Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java?rev=1377020&r1=1377019&r2=1377020&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java (original)
+++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java Fri Aug 24 18:25:16 2012
@@ -241,9 +241,13 @@ public class StringSearchModelInterpolat
                                 fields.add( new StringField( currentField ) );
                             }
                         }
+                        else if ( List.class.isAssignableFrom( type ) )
+                        {
+                            fields.add( new ListField( currentField ) );
+                        }
                         else if ( Collection.class.isAssignableFrom( type ) )
                         {
-                            fields.add( new CollectionField( currentField ) );
+                            throw new RuntimeException("We dont interpolate into collections, use a list instead");
                         }
                         else if ( Map.class.isAssignableFrom( type ) )
                         {
@@ -348,10 +352,10 @@ public class StringSearchModelInterpolat
             }
         }
 
-        static final class CollectionField
+        static final class ListField
             extends CacheField
         {
-            CollectionField( Field field )
+            ListField( Field field )
             {
                 super( field );
             }
@@ -360,52 +364,47 @@ public class StringSearchModelInterpolat
             void doInterpolate( Object target, InterpolateObjectAction ctx )
                 throws IllegalAccessException
             {
-                @SuppressWarnings( "unchecked" ) Collection<Object> c = (Collection<Object>) field.get( target );
-                if ( c == null || c.isEmpty() )
+                @SuppressWarnings( "unchecked" ) List<Object> c = (List<Object>) field.get( target );
+                if ( c == null )
                 {
                     return;
                 }
 
-                List<Object> originalValues = new ArrayList<Object>( c );
-                try
-                {
-                    c.clear();
-                }
-                catch ( UnsupportedOperationException e )
+                int size = c.size();
+                Object value;
+                for ( int i = 0; i < size; i++ )
                 {
-                    return;
-                }
 
-                for ( Object value : originalValues )
-                {
-                    if ( value == null )
-                    {
-                        // add the null back in...not sure what else to do...
-                        c.add( value );
-                    }
-                    else if ( String.class == value.getClass() )
-                    {
-                        String interpolated = ctx.interpolate( (String) value );
+                    value = c.get( i );
 
-                        if ( !interpolated.equals( value ) )
-                        {
-                            c.add( interpolated );
-                        }
-                        else
-                        {
-                            c.add( value );
-                        }
-                    }
-                    else
+                    if ( value != null )
                     {
-                        c.add( value );
-                        if ( value.getClass().isArray() )
+                        if ( String.class == value.getClass() )
                         {
-                            evaluateArray( value, ctx );
+                            String interpolated = ctx.interpolate( (String) value );
+
+                            if ( !interpolated.equals( value ) )
+                            {
+                                try
+                                {
+                                    c.set( i, interpolated );
+                                }
+                                catch ( UnsupportedOperationException e )
+                                {
+                                    return;
+                                }
+                            }
                         }
                         else
                         {
-                            ctx.interpolationTargets.add( value );
+                            if ( value.getClass().isArray() )
+                            {
+                                evaluateArray( value, ctx );
+                            }
+                            else
+                            {
+                                ctx.interpolationTargets.add( value );
+                            }
                         }
                     }
                 }