You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/08/20 04:05:51 UTC

svn commit: r687224 - in /maven/components/branches/maven-2.0.10-RC: ./ maven-project/src/main/java/org/apache/maven/project/interpolation/ maven-project/src/main/resources/META-INF/plexus/ maven-project/src/test/java/org/apache/maven/project/interpola...

Author: jdcasey
Date: Tue Aug 19 19:05:51 2008
New Revision: 687224

URL: http://svn.apache.org/viewvc?rev=687224&view=rev
Log:
Introducing String.indexOf-based interpolator to improve performance, since the regular expressions used in the regex-based interpolator weren't really useful enough to justify the CPU hit.

Added:
    maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
    maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
    maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java   (contents, props changed)
      - copied, changed from r687095, maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
    maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/StringSearchModelInterpolatorTest.java
Modified:
    maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
    maven/components/branches/maven-2.0.10-RC/maven-project/src/main/resources/META-INF/plexus/components.xml
    maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
    maven/components/branches/maven-2.0.10-RC/pom.xml

Added: maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java?rev=687224&view=auto
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java (added)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java Tue Aug 19 19:05:51 2008
@@ -0,0 +1,331 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
+import org.apache.maven.project.ProjectBuilderConfiguration;
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
+import org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.ValueSource;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Use a regular expression search to find and resolve expressions within the POM.
+ *
+ * @author jdcasey Created on Feb 3, 2005
+ * @version $Id: RegexBasedModelInterpolator.java 683740 2008-08-07 22:33:15Z jdcasey $
+ * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
+ */
+public abstract class AbstractStringBasedModelInterpolator
+    extends AbstractLogEnabled
+    implements ModelInterpolator, Initializable
+{
+    private static final List PROJECT_PREFIXES = Arrays.asList( new String[]{ "pom.", "project." } );
+
+    private static final List TRANSLATED_PATH_EXPRESSIONS;
+
+    static
+    {
+        List translatedPrefixes = new ArrayList();
+
+        // MNG-1927, MNG-2124, MNG-3355:
+        // If the build section is present and the project directory is non-null, we should make
+        // sure interpolation of the directories below uses translated paths.
+        // Afterward, we'll double back and translate any paths that weren't covered during interpolation via the
+        // code below...
+        translatedPrefixes.add( "build.directory" );
+        translatedPrefixes.add( "build.outputDirectory" );
+        translatedPrefixes.add( "build.testOutputDirectory" );
+        translatedPrefixes.add( "build.sourceDirectory" );
+        translatedPrefixes.add( "build.testSourceDirectory" );
+        translatedPrefixes.add( "build.scriptSourceDirectory" );
+        translatedPrefixes.add( "reporting.outputDirectory" );
+
+        TRANSLATED_PATH_EXPRESSIONS = translatedPrefixes;
+    }
+
+    private PathTranslator pathTranslator;
+    
+    private Interpolator interpolator;
+    
+    private RecursionInterceptor recursionInterceptor;
+
+    // for testing.
+    protected AbstractStringBasedModelInterpolator( PathTranslator pathTranslator )
+    {
+        this.pathTranslator = pathTranslator;
+    }
+
+    /**
+     * @todo: Remove the throws clause.
+     * @throws IOException This exception is not thrown any more, and needs to be removed.
+     */
+    protected AbstractStringBasedModelInterpolator()
+    {
+    }
+
+    public Model interpolate( Model model, Map context )
+        throws ModelInterpolationException
+    {
+        return interpolate( model, context, true );
+    }
+
+    /**
+     * Serialize the inbound Model instance to a StringWriter, perform the regex replacement to resolve
+     * POM expressions, then re-parse into the resolved Model instance.
+     * <br/>
+     * <b>NOTE:</b> This will result in a different instance of Model being returned!!!
+     *
+     * @param model   The inbound Model instance, to serialize and reference for expression resolution
+     * @param context The other context map to be used during resolution
+     * @return The resolved instance of the inbound Model. This is a different instance!
+     *
+     * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
+     */
+    public Model interpolate( Model model, Map context, boolean strict )
+        throws ModelInterpolationException
+    {
+        Properties props = new Properties();
+        props.putAll( context );
+
+        return interpolate( model,
+                            null,
+                            new DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
+                            true );
+    }
+
+    public Model interpolate( Model model,
+                              File projectDir,
+                              ProjectBuilderConfiguration config,
+                              boolean debugEnabled )
+        throws ModelInterpolationException
+    {
+        StringWriter sWriter = new StringWriter( 1024 );
+
+        MavenXpp3Writer writer = new MavenXpp3Writer();
+        try
+        {
+            writer.write( sWriter, model );
+        }
+        catch ( IOException e )
+        {
+            throw new ModelInterpolationException( "Cannot serialize project model for interpolation.", e );
+        }
+
+        String serializedModel = sWriter.toString();
+        serializedModel = interpolate( serializedModel, model, projectDir, config, debugEnabled );
+
+        StringReader sReader = new StringReader( serializedModel );
+
+        MavenXpp3Reader modelReader = new MavenXpp3Reader();
+        try
+        {
+            model = modelReader.read( sReader );
+        }
+        catch ( IOException e )
+        {
+            throw new ModelInterpolationException(
+                "Cannot read project model from interpolating filter of serialized version.", e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new ModelInterpolationException(
+                "Cannot read project model from interpolating filter of serialized version.", e );
+        }
+
+        return model;
+    }
+
+    /**
+     * Interpolates all expressions in the src parameter.
+     * <p>
+     * The algorithm used for each expression is:
+     * <ul>
+     *   <li>If it starts with either "pom." or "project.", the expression is evaluated against the model.</li>
+     *   <li>If the value is null, get the value from the context.</li>
+     *   <li>If the value is null, but the context contains the expression, don't replace the expression string
+     *       with the value, and continue to find other expressions.</li>
+     *   <li>If the value is null, get it from the model properties.</li>
+     *   <li>
+     * @param overrideContext
+     * @param outputDebugMessages
+     */
+    public String interpolate( String src,
+                               Model model,
+                               final File projectDir,
+                               ProjectBuilderConfiguration config,
+                               boolean debug )
+        throws ModelInterpolationException
+    {
+        Logger logger = getLogger();
+
+        String timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
+
+        Properties modelProperties = model.getProperties();
+        if ( modelProperties != null )
+        {
+            timestampFormat = modelProperties.getProperty( BUILD_TIMESTAMP_FORMAT_PROPERTY, timestampFormat );
+        }
+
+        ValueSource modelValueSource1 = new PrefixedObjectValueSource( PROJECT_PREFIXES, model, false );
+        ValueSource modelValueSource2 = new ObjectBasedValueSource( model );
+
+        ValueSource basedirValueSource = new PrefixedValueSourceWrapper( new ValueSource(){
+            public Object getValue( String expression )
+            {
+                if ( projectDir != null && "basedir".equals( expression ) )
+                {
+                    return projectDir.getAbsolutePath();
+                }
+
+                return null;
+            }
+        },
+        PROJECT_PREFIXES, true );
+
+        PathTranslatingPostProcessor pathTranslatingPostProcessor =
+            new PathTranslatingPostProcessor( TRANSLATED_PATH_EXPRESSIONS, projectDir, pathTranslator );
+        
+        String result = src;
+        synchronized( this )
+        {
+            List valueSources = new ArrayList( 7 );
+            
+            // NOTE: Order counts here!
+            valueSources.add( basedirValueSource );
+            valueSources.add( new BuildTimestampValueSource( config.getBuildStartTime(), timestampFormat ) );
+            valueSources.add( new MapBasedValueSource( config.getExecutionProperties() ) );
+            valueSources.add( modelValueSource1 );
+            valueSources.add( new PrefixedValueSourceWrapper( new MapBasedValueSource( modelProperties ), PROJECT_PREFIXES, true ) );
+            valueSources.add( modelValueSource2 );
+            valueSources.add( new MapBasedValueSource( config.getUserProperties() ) );
+            
+            for ( Iterator it = valueSources.iterator(); it.hasNext(); )
+            {
+                ValueSource vs = (ValueSource) it.next();
+                interpolator.addValueSource( vs );
+            }
+            
+            interpolator.addPostProcessor( pathTranslatingPostProcessor );
+
+            try
+            {
+                try
+                {
+                    result = interpolator.interpolate( result, recursionInterceptor );
+                }
+                catch( InterpolationException e )
+                {
+                    throw new ModelInterpolationException( e.getMessage(), e );
+                }
+
+                if ( debug )
+                {
+                    List feedback = interpolator.getFeedback();
+                    if ( feedback != null && !feedback.isEmpty() )
+                    {
+                        logger.debug( "Maven encountered the following problems during initial POM interpolation:" );
+
+                        Object last = null;
+                        for ( Iterator it = feedback.iterator(); it.hasNext(); )
+                        {
+                            Object next = it.next();
+
+                            if ( next instanceof Throwable )
+                            {
+                                if ( last == null )
+                                {
+                                    logger.debug( "", ( (Throwable) next ) );
+                                }
+                                else
+                                {
+                                    logger.debug( String.valueOf( last ), ( (Throwable) next ) );
+                                }
+                            }
+                            else
+                            {
+                                if ( last != null )
+                                {
+                                    logger.debug( String.valueOf( last ) );
+                                }
+
+                                last = next;
+                            }
+                        }
+
+                        if ( last != null )
+                        {
+                            logger.debug( String.valueOf( last ) );
+                        }
+                    }
+                }
+
+                interpolator.clearFeedback();
+            }
+            finally
+            {
+                for ( Iterator iterator = valueSources.iterator(); iterator.hasNext(); )
+                {
+                    ValueSource vs = (ValueSource) iterator.next();
+                    interpolator.removeValuesSource( vs );
+                }
+                
+                interpolator.removePostProcessor( pathTranslatingPostProcessor );
+            }
+        }
+
+        return result;
+    }
+    
+    protected abstract Interpolator createInterpolator();
+
+    public void initialize()
+        throws InitializationException
+    {
+        interpolator = createInterpolator();
+        recursionInterceptor = new PrefixAwareRecursionInterceptor( PROJECT_PREFIXES );
+    }
+
+}

Modified: maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java?rev=687224&r1=687223&r2=687224&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java Tue Aug 19 19:05:51 2008
@@ -19,38 +19,13 @@
  * under the License.
  */
 
-import org.apache.maven.model.Model;
-import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
-import org.apache.maven.project.DefaultProjectBuilderConfiguration;
-import org.apache.maven.project.ProjectBuilderConfiguration;
-import org.apache.maven.project.path.PathTranslator;
-import org.codehaus.plexus.interpolation.InterpolationException;
-import org.codehaus.plexus.interpolation.MapBasedValueSource;
-import org.codehaus.plexus.interpolation.ObjectBasedValueSource;
-import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
-import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
-import org.codehaus.plexus.interpolation.PrefixedValueSourceWrapper;
-import org.codehaus.plexus.interpolation.RecursionInterceptor;
-import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
-import org.codehaus.plexus.interpolation.ValueSource;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
 import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+
 /**
  * Use a regular expression search to find and resolve expressions within the POM.
  *
@@ -59,276 +34,25 @@
  * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
  */
 public class RegexBasedModelInterpolator
-    extends AbstractLogEnabled
-    implements ModelInterpolator, Initializable
+    extends AbstractStringBasedModelInterpolator
 {
-    private static final List PROJECT_PREFIXES = Arrays.asList( new String[]{ "pom.", "project." } );
-
-    private static final List TRANSLATED_PATH_EXPRESSIONS;
-
-    static
-    {
-        List translatedPrefixes = new ArrayList();
-
-        // MNG-1927, MNG-2124, MNG-3355:
-        // If the build section is present and the project directory is non-null, we should make
-        // sure interpolation of the directories below uses translated paths.
-        // Afterward, we'll double back and translate any paths that weren't covered during interpolation via the
-        // code below...
-        translatedPrefixes.add( "build.directory" );
-        translatedPrefixes.add( "build.outputDirectory" );
-        translatedPrefixes.add( "build.testOutputDirectory" );
-        translatedPrefixes.add( "build.sourceDirectory" );
-        translatedPrefixes.add( "build.testSourceDirectory" );
-        translatedPrefixes.add( "build.scriptSourceDirectory" );
-        translatedPrefixes.add( "reporting.outputDirectory" );
-
-        TRANSLATED_PATH_EXPRESSIONS = translatedPrefixes;
-    }
-
-    private PathTranslator pathTranslator;
-    
-    private RegexBasedInterpolator interpolator;
-    
-    private RecursionInterceptor recursionInterceptor;
 
-    public RegexBasedModelInterpolator( Properties envars )
-    {
-    }
-    
-    // for testing.
-    protected RegexBasedModelInterpolator( PathTranslator pathTranslator )
-    {
-        this.pathTranslator = pathTranslator;
-    }
-
-    /**
-     * @todo: Remove the throws clause.
-     * @throws IOException This exception is not thrown any more, and needs to be removed.
-     */
     public RegexBasedModelInterpolator()
         throws IOException
     {
     }
-
-    public Model interpolate( Model model, Map context )
-        throws ModelInterpolationException
-    {
-        return interpolate( model, context, true );
-    }
-
-    /**
-     * Serialize the inbound Model instance to a StringWriter, perform the regex replacement to resolve
-     * POM expressions, then re-parse into the resolved Model instance.
-     * <br/>
-     * <b>NOTE:</b> This will result in a different instance of Model being returned!!!
-     *
-     * @param model   The inbound Model instance, to serialize and reference for expression resolution
-     * @param context The other context map to be used during resolution
-     * @return The resolved instance of the inbound Model. This is a different instance!
-     *
-     * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
-     */
-    public Model interpolate( Model model, Map context, boolean strict )
-        throws ModelInterpolationException
-    {
-        Properties props = new Properties();
-        props.putAll( context );
-
-        return interpolate( model,
-                            null,
-                            new DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
-                            true );
-    }
-
-    public Model interpolate( Model model,
-                              File projectDir,
-                              ProjectBuilderConfiguration config,
-                              boolean debugEnabled )
-        throws ModelInterpolationException
+    
+    public RegexBasedModelInterpolator( PathTranslator pathTranslator )
     {
-        StringWriter sWriter = new StringWriter( 1024 );
-
-        MavenXpp3Writer writer = new MavenXpp3Writer();
-        try
-        {
-            writer.write( sWriter, model );
-        }
-        catch ( IOException e )
-        {
-            throw new ModelInterpolationException( "Cannot serialize project model for interpolation.", e );
-        }
-
-        String serializedModel = sWriter.toString();
-        serializedModel = interpolate( serializedModel, model, projectDir, config, debugEnabled );
-
-        StringReader sReader = new StringReader( serializedModel );
-
-        MavenXpp3Reader modelReader = new MavenXpp3Reader();
-        try
-        {
-            model = modelReader.read( sReader );
-        }
-        catch ( IOException e )
-        {
-            throw new ModelInterpolationException(
-                "Cannot read project model from interpolating filter of serialized version.", e );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new ModelInterpolationException(
-                "Cannot read project model from interpolating filter of serialized version.", e );
-        }
-
-        return model;
+        super( pathTranslator );
     }
 
-    /**
-     * Interpolates all expressions in the src parameter.
-     * <p>
-     * The algorithm used for each expression is:
-     * <ul>
-     *   <li>If it starts with either "pom." or "project.", the expression is evaluated against the model.</li>
-     *   <li>If the value is null, get the value from the context.</li>
-     *   <li>If the value is null, but the context contains the expression, don't replace the expression string
-     *       with the value, and continue to find other expressions.</li>
-     *   <li>If the value is null, get it from the model properties.</li>
-     *   <li>
-     * @param overrideContext
-     * @param outputDebugMessages
-     */
-    public String interpolate( String src,
-                               Model model,
-                               final File projectDir,
-                               ProjectBuilderConfiguration config,
-                               boolean debug )
-        throws ModelInterpolationException
+    public RegexBasedModelInterpolator( Properties envars )
     {
-        Logger logger = getLogger();
-
-        String timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
-
-        Properties modelProperties = model.getProperties();
-        if ( modelProperties != null )
-        {
-            timestampFormat = modelProperties.getProperty( BUILD_TIMESTAMP_FORMAT_PROPERTY, timestampFormat );
-        }
-
-        ValueSource modelValueSource1 = new PrefixedObjectValueSource( PROJECT_PREFIXES, model, false );
-        ValueSource modelValueSource2 = new ObjectBasedValueSource( model );
-
-        ValueSource basedirValueSource = new PrefixedValueSourceWrapper( new ValueSource(){
-            public Object getValue( String expression )
-            {
-                if ( projectDir != null && "basedir".equals( expression ) )
-                {
-                    return projectDir.getAbsolutePath();
-                }
-
-                return null;
-            }
-        },
-        PROJECT_PREFIXES, true );
-
-        PathTranslatingPostProcessor pathTranslatingPostProcessor =
-            new PathTranslatingPostProcessor( TRANSLATED_PATH_EXPRESSIONS, projectDir, pathTranslator );
-        
-        String result = src;
-        synchronized( this )
-        {
-            List valueSources = new ArrayList( 7 );
-            
-            // NOTE: Order counts here!
-            valueSources.add( basedirValueSource );
-            valueSources.add( new BuildTimestampValueSource( config.getBuildStartTime(), timestampFormat ) );
-            valueSources.add( new MapBasedValueSource( config.getExecutionProperties() ) );
-            valueSources.add( modelValueSource1 );
-            valueSources.add( new PrefixedValueSourceWrapper( new MapBasedValueSource( modelProperties ), PROJECT_PREFIXES, true ) );
-            valueSources.add( modelValueSource2 );
-            valueSources.add( new MapBasedValueSource( config.getUserProperties() ) );
-            
-            for ( Iterator it = valueSources.iterator(); it.hasNext(); )
-            {
-                ValueSource vs = (ValueSource) it.next();
-                interpolator.addValueSource( vs );
-            }
-            
-            interpolator.addPostProcessor( pathTranslatingPostProcessor );
-
-            try
-            {
-                try
-                {
-                    result = interpolator.interpolate( result, "", recursionInterceptor );
-                }
-                catch( InterpolationException e )
-                {
-                    throw new ModelInterpolationException( e.getMessage(), e );
-                }
-
-                if ( debug )
-                {
-                    List feedback = interpolator.getFeedback();
-                    if ( feedback != null && !feedback.isEmpty() )
-                    {
-                        logger.debug( "Maven encountered the following problems during initial POM interpolation:" );
-
-                        Object last = null;
-                        for ( Iterator it = feedback.iterator(); it.hasNext(); )
-                        {
-                            Object next = it.next();
-
-                            if ( next instanceof Throwable )
-                            {
-                                if ( last == null )
-                                {
-                                    logger.debug( "", ( (Throwable) next ) );
-                                }
-                                else
-                                {
-                                    logger.debug( String.valueOf( last ), ( (Throwable) next ) );
-                                }
-                            }
-                            else
-                            {
-                                if ( last != null )
-                                {
-                                    logger.debug( String.valueOf( last ) );
-                                }
-
-                                last = next;
-                            }
-                        }
-
-                        if ( last != null )
-                        {
-                            logger.debug( String.valueOf( last ) );
-                        }
-                    }
-                }
-
-                interpolator.clearFeedback();
-            }
-            finally
-            {
-                for ( Iterator iterator = valueSources.iterator(); iterator.hasNext(); )
-                {
-                    ValueSource vs = (ValueSource) iterator.next();
-                    interpolator.removeValuesSource( vs );
-                }
-                
-                interpolator.removePostProcessor( pathTranslatingPostProcessor );
-            }
-        }
-
-        return result;
     }
 
-    public void initialize()
-        throws InitializationException
+    protected Interpolator createInterpolator()
     {
-        interpolator = new RegexBasedInterpolator();
-        recursionInterceptor = new PrefixAwareRecursionInterceptor( PROJECT_PREFIXES );
+        return new RegexBasedInterpolator( true );
     }
-
 }

Added: maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java?rev=687224&view=auto
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java (added)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java Tue Aug 19 19:05:51 2008
@@ -0,0 +1,25 @@
+package org.apache.maven.project.interpolation;
+
+import org.apache.maven.project.path.PathTranslator;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
+
+public class StringSearchModelInterpolator
+    extends AbstractStringBasedModelInterpolator
+{
+
+    public StringSearchModelInterpolator()
+    {
+    }
+
+    public StringSearchModelInterpolator( PathTranslator pathTranslator )
+    {
+        super( pathTranslator );
+    }
+
+    protected Interpolator createInterpolator()
+    {
+        return new StringSearchInterpolator();
+    }
+
+}

Modified: maven/components/branches/maven-2.0.10-RC/maven-project/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=687224&r1=687223&r2=687224&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/main/resources/META-INF/plexus/components.xml Tue Aug 19 19:05:51 2008
@@ -40,7 +40,7 @@
      -->
     <component>
       <role>org.apache.maven.project.interpolation.ModelInterpolator</role>
-      <implementation>org.apache.maven.project.interpolation.RegexBasedModelInterpolator</implementation>
+      <implementation>org.apache.maven.project.interpolation.StringSearchModelInterpolator</implementation>
       <requirements>
         <requirement>
           <role>org.apache.maven.project.path.PathTranslator</role>

Copied: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java (from r687095, maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java)
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java?p2=maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java&p1=maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java&r1=687095&r2=687224&rev=687224&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java Tue Aug 19 19:05:51 2008
@@ -49,7 +49,7 @@
  * @author jdcasey
  * @version $Id$
  */
-public class RegexBasedModelInterpolatorTest
+public abstract class AbstractModelInterpolatorTest
     extends TestCase
 {
     private Map context;
@@ -91,7 +91,7 @@
     }
 
     public void testShouldNotThrowExceptionOnReferenceToNonExistentValue()
-        throws IOException, ModelInterpolationException, InitializationException
+        throws Exception
     {
         Model model = new Model();
 
@@ -100,8 +100,7 @@
 
         model.setScm( scm );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
 
@@ -109,7 +108,7 @@
     }
 
     public void testShouldThrowExceptionOnRecursiveScmConnectionReference()
-        throws IOException, InitializationException
+        throws Exception
     {
         Model model = new Model();
 
@@ -120,8 +119,7 @@
 
         try
         {
-            RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-            interpolator.initialize();
+            ModelInterpolator interpolator = createInterpolator();
             
             interpolator.interpolate( model, context );
 
@@ -134,7 +132,7 @@
     }
 
     public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression()
-        throws IOException, ModelInterpolationException, InitializationException
+        throws Exception
     {
         Model model = new Model();
 
@@ -145,8 +143,7 @@
 
         model.addProperty( "test", "test" );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -166,8 +163,7 @@
 
         model.setOrganization( org );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -185,8 +181,7 @@
 
         model.addDependency( dep );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -219,8 +214,7 @@
          }
          */
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -239,8 +233,7 @@
 
         model.addDependency( dep );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -260,8 +253,7 @@
 
         model.addRepository( repository );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -283,8 +275,7 @@
 
         model.setProperties( modelProperties );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -304,8 +295,7 @@
 
         model.setProperties( modelProperties );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator( envars );
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
 
@@ -323,8 +313,7 @@
 
         model.setProperties( modelProperties );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -356,8 +345,7 @@
 
         model.setBuild( build );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model out = interpolator.interpolate( model, context );
         
@@ -370,7 +358,7 @@
     }
 
     public void testShouldInterpolateUnprefixedBasedirExpression()
-        throws ModelInterpolationException, IOException, InitializationException
+        throws Exception
     {
         File basedir = new File( "/test/path" );
         Model model = new Model();
@@ -379,8 +367,7 @@
 
         model.addDependency( dep );
 
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator();
         
         Model result = interpolator.interpolate( model, basedir, new DefaultProjectBuilderConfiguration(), true );
 
@@ -403,8 +390,7 @@
         build.setOutputDirectory( "${project.build.directory}/classes" );
         
         PathTranslator translator = new DefaultPathTranslator();
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator( translator );
-        interpolator.initialize();
+        ModelInterpolator interpolator = createInterpolator( translator );
         
         File basedir = new File( System.getProperty( "java.io.tmpdir" ), "base" );
         
@@ -417,6 +403,12 @@
         assertEquals( check, value );
     }
 
+    protected abstract ModelInterpolator createInterpolator( PathTranslator translator )
+        throws Exception;
+
+    protected abstract ModelInterpolator createInterpolator()
+        throws Exception;
+
 //    public void testPOMExpressionDoesNotUseSystemProperty()
 //        throws Exception
 //    {
@@ -446,7 +438,7 @@
 //        throws Exception
 //    {
 //        ( (Dependency) model.getDependencies().get( 0 ) ).setVersion( depVersionExpr );
-//        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
+//        Model out = createInterpolator().interpolate( model, context );
 //        String result = ( (Dependency) out.getDependencies().get( 0 ) ).getVersion();
 //        assertEquals( "Expected '" + expectedVersion + "' for version expression '"
 //                      + depVersionExpr + "', but was '" + result + "'", expectedVersion, result );

Propchange: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java
------------------------------------------------------------------------------
    cvs2svn:cvs-rev = 1.2

Propchange: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractModelInterpolatorTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java?rev=687224&r1=687223&r2=687224&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java (original)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java Tue Aug 19 19:05:51 2008
@@ -19,437 +19,30 @@
  * under the License.
  */
 
-import org.apache.maven.model.Build;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.Organization;
-import org.apache.maven.model.Repository;
-import org.apache.maven.model.Resource;
-import org.apache.maven.model.Scm;
-import org.apache.maven.project.DefaultProjectBuilderConfiguration;
-import org.apache.maven.project.path.DefaultPathTranslator;
 import org.apache.maven.project.path.PathTranslator;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import junit.framework.TestCase;
 
 /**
  * @author jdcasey
  * @version $Id$
  */
 public class RegexBasedModelInterpolatorTest
-    extends TestCase
+    extends AbstractModelInterpolatorTest
 {
-    private Map context;
-    
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
-
-        context = Collections.singletonMap( "basedir", "myBasedir" );
-    }
-    
-    public void testDefaultBuildTimestampFormatShouldParseTimeIn24HourFormat()
-    {
-        Calendar cal = Calendar.getInstance();
-        cal.set( Calendar.HOUR, 12 );
-        cal.set( Calendar.AM_PM, Calendar.AM );
-        
-        // just to make sure all the bases are covered...
-        cal.set( Calendar.HOUR_OF_DAY, 0 );
-        cal.set( Calendar.MINUTE, 16 );
-        cal.set( Calendar.YEAR, 1976 );
-        cal.set( Calendar.MONTH, Calendar.NOVEMBER );
-        cal.set( Calendar.DATE, 11 );
-        
-        Date firstTestDate = cal.getTime();
-        
-        cal.set( Calendar.HOUR, 11 );
-        cal.set( Calendar.AM_PM, Calendar.PM );
-        
-        // just to make sure all the bases are covered...
-        cal.set( Calendar.HOUR_OF_DAY, 23 );
-        
-        Date secondTestDate = cal.getTime();
-        
-        SimpleDateFormat format = new SimpleDateFormat( ModelInterpolator.DEFAULT_BUILD_TIMESTAMP_FORMAT );
-        assertEquals( "19761111-0016", format.format( firstTestDate ) );
-        assertEquals( "19761111-2316", format.format( secondTestDate ) );
-    }
-
-    public void testShouldNotThrowExceptionOnReferenceToNonExistentValue()
-        throws IOException, ModelInterpolationException, InitializationException
-    {
-        Model model = new Model();
-
-        Scm scm = new Scm();
-        scm.setConnection( "${test}/somepath" );
-
-        model.setScm( scm );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-
-        assertEquals( "${test}/somepath", out.getScm().getConnection() );
-    }
-
-    public void testShouldThrowExceptionOnRecursiveScmConnectionReference()
-        throws IOException, InitializationException
-    {
-        Model model = new Model();
-
-        Scm scm = new Scm();
-        scm.setConnection( "${project.scm.connection}/somepath" );
-
-        model.setScm( scm );
-
-        try
-        {
-            RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-            interpolator.initialize();
-            
-            interpolator.interpolate( model, context );
-
-            fail( "The interpolator should not allow self-referencing expressions in POM." );
-        }
-        catch ( ModelInterpolationException e )
-        {
-
-        }
-    }
-
-    public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression()
-        throws IOException, ModelInterpolationException, InitializationException
-    {
-        Model model = new Model();
-
-        Scm scm = new Scm();
-        scm.setConnection( "${test}/somepath" );
-
-        model.setScm( scm );
-
-        model.addProperty( "test", "test" );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( "test/somepath", out.getScm().getConnection() );
-    }
-
-    public void testShouldInterpolateOrganizationNameCorrectly()
-        throws Exception
-    {
-        String orgName = "MyCo";
-
-        Model model = new Model();
-        model.setName( "${pom.organization.name} Tools" );
-
-        Organization org = new Organization();
-        org.setName( orgName );
-
-        model.setOrganization( org );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( orgName + " Tools", out.getName() );
-    }
-
-    public void testShouldInterpolateDependencyVersionToSetSameAsProjectVersion()
-        throws Exception
-    {
-        Model model = new Model();
-        model.setVersion( "3.8.1" );
-
-        Dependency dep = new Dependency();
-        dep.setVersion( "${version}" );
-
-        model.addDependency( dep );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( "3.8.1", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
-    }
-
-    public void testShouldNotInterpolateDependencyVersionWithInvalidReference()
-        throws Exception
-    {
-        Model model = new Model();
-        model.setVersion( "3.8.1" );
-
-        Dependency dep = new Dependency();
-        dep.setVersion( "${something}" );
-
-        model.addDependency( dep );
-
-        /*
-         // This is the desired behaviour, however there are too many crappy poms in the repo and an issue with the
-         // timing of executing the interpolation
-
-         try
-         {
-         new RegexBasedModelInterpolator().interpolate( model, context );
-         fail( "Should have failed to interpolate with invalid reference" );
-         }
-         catch ( ModelInterpolationException expected )
-         {
-         assertTrue( true );
-         }
-         */
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( "${something}", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
-    }
-
-    public void testTwoReferences()
-        throws Exception
-    {
-        Model model = new Model();
-        model.setVersion( "3.8.1" );
-        model.setArtifactId( "foo" );
-
-        Dependency dep = new Dependency();
-        dep.setVersion( "${artifactId}-${version}" );
-
-        model.addDependency( dep );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( "foo-3.8.1", ( (Dependency) out.getDependencies().get( 0 ) ).getVersion() );
-    }
-
-    public void testBasedir()
-        throws Exception
-    {
-        Model model = new Model();
-        model.setVersion( "3.8.1" );
-        model.setArtifactId( "foo" );
-
-        Repository repository = new Repository();
-
-        repository.setUrl( "file://localhost/${basedir}/temp-repo" );
-
-        model.addRepository( repository );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( "file://localhost/myBasedir/temp-repo", ( (Repository) out.getRepositories().get( 0 ) ).getUrl() );
-    }
-
-    public void testEnvars()
-        throws Exception
-    {
-        Map context = new HashMap();
-
-        context.put( "env.HOME", "/path/to/home" );
-
-        Model model = new Model();
-
-        Properties modelProperties = new Properties();
-
-        modelProperties.setProperty( "outputDirectory", "${env.HOME}" );
-
-        model.setProperties( modelProperties );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( out.getProperties().getProperty( "outputDirectory" ), "/path/to/home" );
-    }
-
-    public void testEnvarExpressionThatEvaluatesToNullReturnsTheLiteralString()
+    protected ModelInterpolator createInterpolator( PathTranslator translator )
         throws Exception
     {
-        Properties envars = new Properties();
-
-        Model model = new Model();
-
-        Properties modelProperties = new Properties();
-
-        modelProperties.setProperty( "outputDirectory", "${env.DOES_NOT_EXIST}" );
-
-        model.setProperties( modelProperties );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator( envars );
+        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator( translator );
         interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
 
-        assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${env.DOES_NOT_EXIST}" );
+        return interpolator;
     }
 
-    public void testExpressionThatEvaluatesToNullReturnsTheLiteralString()
+    protected ModelInterpolator createInterpolator()
         throws Exception
     {
-        Model model = new Model();
-
-        Properties modelProperties = new Properties();
-
-        modelProperties.setProperty( "outputDirectory", "${DOES_NOT_EXIST}" );
-
-        model.setProperties( modelProperties );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${DOES_NOT_EXIST}" );
-    }
-
-    public void testShouldInterpolateSourceDirectoryReferencedFromResourceDirectoryCorrectly()
-        throws Exception
-    {
-        Model model = new Model();
-
-        Build build = new Build();
-        build.setSourceDirectory( "correct" );
-
-        Resource res = new Resource();
-        res.setDirectory( "${project.build.sourceDirectory}" );
-
-        build.addResource( res );
-
-        Resource res2 = new Resource();
-        res2.setDirectory( "${pom.build.sourceDirectory}" );
-
-        build.addResource( res2 );
-
-        Resource res3 = new Resource();
-        res3.setDirectory( "${build.sourceDirectory}" );
-
-        build.addResource( res3 );
-
-        model.setBuild( build );
-
         RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
         interpolator.initialize();
-        
-        Model out = interpolator.interpolate( model, context );
-        
-        List outResources = out.getBuild().getResources();
-        Iterator resIt = outResources.iterator();
 
-        assertEquals( build.getSourceDirectory(), ( (Resource) resIt.next() ).getDirectory() );
-        assertEquals( build.getSourceDirectory(), ( (Resource) resIt.next() ).getDirectory() );
-        assertEquals( build.getSourceDirectory(), ( (Resource) resIt.next() ).getDirectory() );
+        return interpolator;
     }
-
-    public void testShouldInterpolateUnprefixedBasedirExpression()
-        throws ModelInterpolationException, IOException, InitializationException
-    {
-        File basedir = new File( "/test/path" );
-        Model model = new Model();
-        Dependency dep = new Dependency();
-        dep.setSystemPath( "${basedir}/artifact.jar" );
-
-        model.addDependency( dep );
-
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator();
-        interpolator.initialize();
-        
-        Model result = interpolator.interpolate( model, basedir, new DefaultProjectBuilderConfiguration(), true );
-
-        List rDeps = result.getDependencies();
-        assertNotNull( rDeps );
-        assertEquals( 1, rDeps.size() );
-        assertEquals( new File( basedir, "artifact.jar" ).getAbsolutePath(), new File( ( (Dependency) rDeps.get( 0 ) )
-            .getSystemPath() ).getAbsolutePath() );
-    }
-    
-    public void testTwoLevelRecursiveBasedirAlignedExpression()
-        throws Exception
-    {
-        Model model = new Model();
-        Build build = new Build();
-        
-        model.setBuild( build );
-        
-        build.setDirectory( "${project.basedir}/target" );
-        build.setOutputDirectory( "${project.build.directory}/classes" );
-        
-        PathTranslator translator = new DefaultPathTranslator();
-        RegexBasedModelInterpolator interpolator = new RegexBasedModelInterpolator( translator );
-        interpolator.initialize();
-        
-        File basedir = new File( System.getProperty( "java.io.tmpdir" ), "base" );
-        
-        String value = interpolator.interpolate( "${project.build.outputDirectory}/foo", model, basedir, new DefaultProjectBuilderConfiguration(), true );
-        value = value.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
-        
-        String check = new File( basedir, "target/classes/foo" ).getAbsolutePath();
-        check = check.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
-        
-        assertEquals( check, value );
-    }
-
-//    public void testPOMExpressionDoesNotUseSystemProperty()
-//        throws Exception
-//    {
-//        Model model = new Model();
-//        model.setVersion( "1.0" );
-//
-//        Properties modelProperties = new Properties();
-//        modelProperties.setProperty( "version", "prop version" );
-//        modelProperties.setProperty( "foo.version", "prop foo.version" );
-//        modelProperties.setProperty( "pom.version", "prop pom.version" );
-//        modelProperties.setProperty( "project.version", "prop project.version" );
-//
-//        model.setProperties( modelProperties );
-//
-//        Dependency dep = new Dependency();
-//        model.addDependency( dep );
-//
-//        checkDep( "prop version", "${version}", model );
-//        checkDep( "1.0", "${pom.version}", model );
-//        checkDep( "1.0", "${project.version}", model );
-//        checkDep( "prop foo.version", "${foo.version}", model );
-//    }
-//
-//    private void checkDep( String expectedVersion,
-//                           String depVersionExpr,
-//                           Model model )
-//        throws Exception
-//    {
-//        ( (Dependency) model.getDependencies().get( 0 ) ).setVersion( depVersionExpr );
-//        Model out = new RegexBasedModelInterpolator().interpolate( model, context );
-//        String result = ( (Dependency) out.getDependencies().get( 0 ) ).getVersion();
-//        assertEquals( "Expected '" + expectedVersion + "' for version expression '"
-//                      + depVersionExpr + "', but was '" + result + "'", expectedVersion, result );
-//    }
-
 }

Added: maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/StringSearchModelInterpolatorTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/StringSearchModelInterpolatorTest.java?rev=687224&view=auto
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/StringSearchModelInterpolatorTest.java (added)
+++ maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/StringSearchModelInterpolatorTest.java Tue Aug 19 19:05:51 2008
@@ -0,0 +1,48 @@
+package org.apache.maven.project.interpolation;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.project.path.PathTranslator;
+
+/**
+ * @author jdcasey
+ * @version $Id: RegexBasedModelInterpolatorTest.java 686268 2008-08-15 16:01:30Z jdcasey $
+ */
+public class StringSearchModelInterpolatorTest
+    extends AbstractModelInterpolatorTest
+{
+    protected ModelInterpolator createInterpolator( PathTranslator translator )
+        throws Exception
+    {
+        StringSearchModelInterpolator interpolator = new StringSearchModelInterpolator( translator );
+        interpolator.initialize();
+
+        return interpolator;
+    }
+
+    protected ModelInterpolator createInterpolator()
+        throws Exception
+    {
+        StringSearchModelInterpolator interpolator = new StringSearchModelInterpolator();
+        interpolator.initialize();
+
+        return interpolator;
+    }
+}

Modified: maven/components/branches/maven-2.0.10-RC/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.10-RC/pom.xml?rev=687224&r1=687223&r2=687224&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.10-RC/pom.xml (original)
+++ maven/components/branches/maven-2.0.10-RC/pom.xml Tue Aug 19 19:05:51 2008
@@ -371,7 +371,7 @@
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-interpolation</artifactId>
-        <version>1.1</version>
+        <version>1.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>