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 2009/08/21 00:42:46 UTC
svn commit: r806383 - in /maven/shared/trunk/maven-filtering: ./
src/main/java/org/apache/maven/shared/filtering/
Author: jdcasey
Date: Thu Aug 20 22:42:46 2009
New Revision: 806383
URL: http://svn.apache.org/viewvc?rev=806383&view=rev
Log:
use a recursion interceptor to guard against recursive expressions spanning multiple project prefixes.
Modified:
maven/shared/trunk/maven-filtering/pom.xml
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
Modified: maven/shared/trunk/maven-filtering/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/pom.xml?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/pom.xml (original)
+++ maven/shared/trunk/maven-filtering/pom.xml Thu Aug 20 22:42:46 2009
@@ -87,12 +87,12 @@
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
- <version>1.5.8</version>
+ <version>1.5.15</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-interpolation</artifactId>
- <version>1.7</version>
+ <version>1.12-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.sonatype.plexus</groupId>
Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java (original)
+++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java Thu Aug 20 22:42:46 2009
@@ -22,8 +22,11 @@
import org.apache.maven.execution.MavenSession;
import org.apache.maven.project.MavenProject;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Properties;
+import java.util.Set;
/**
* @since 1.0-beta-3
@@ -41,6 +44,13 @@
private MavenSession mavenSession;
+ /**
+ * List of String considered as expressions which contains values in the project/pom : pom project
+ * default value will be pom and project.
+ * @since 1.0-beta-2
+ */
+ private List projectStartExpressions = new ArrayList();
+
/**
* String which will escape interpolation mechanism : foo \${foo.bar} -> foo ${foo.bar}
* @since 1.0-beta-2
@@ -57,19 +67,35 @@
*/
private boolean injectProjectBuildFilters = false;
+ /**
+ * @since 1.0-beta-3
+ */
+ private Set delimiters = new HashSet();
+
protected AbstractMavenFilteringRequest()
{
+ initDefaults();
}
protected AbstractMavenFilteringRequest( MavenProject mavenProject, List filters,
String encoding, MavenSession mavenSession )
{
+ initDefaults();
this.mavenProject = mavenProject;
this.filters = filters;
this.encoding = encoding;
this.mavenSession = mavenSession;
}
+ private void initDefaults()
+ {
+ projectStartExpressions.add( "pom" );
+ projectStartExpressions.add( "project" );
+
+ delimiters.add( "${*}" );
+ delimiters.add( "@*@" );
+ }
+
public MavenProject getMavenProject()
{
return mavenProject;
@@ -196,6 +222,48 @@
this.escapeString = escapeString;
}
-
+ /**
+ * @return
+ * @since 1.0-beta-2
+ */
+ public List getProjectStartExpressions()
+ {
+ return projectStartExpressions;
+ }
+
+ /**
+ * @param projectStartExpressions
+ * @since 1.0-beta-2
+ */
+ public void setProjectStartExpressions( List projectStartExpressions )
+ {
+ this.projectStartExpressions = projectStartExpressions;
+ }
+
+ /**
+ * @return Not allowed to be null or empty.
+ * @since 1.0-beta-3
+ */
+ public Set getDelimiters()
+ {
+ return delimiters;
+ }
+
+ /**
+ * @param delimiters If null, reset delimiters to ${*} only. Otherwise, use the provided parameter value.
+ * @since 1.0-beta-3
+ */
+ public void setDelimiters( Set delimiters )
+ {
+ if ( delimiters == null || delimiters.isEmpty() )
+ {
+ this.delimiters.clear();
+ this.delimiters.add( "${*}" );
+ }
+ else
+ {
+ this.delimiters = delimiters;
+ }
+ }
}
Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java (original)
+++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java Thu Aug 20 22:42:46 2009
@@ -32,6 +32,9 @@
import org.apache.maven.project.MavenProject;
import org.sonatype.plexus.build.incremental.BuildContext;
import org.codehaus.plexus.interpolation.InterpolatorFilterReader;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.SimpleRecursionInterceptor;
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.interpolation.ValueSource;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -155,9 +158,11 @@
}
- public List getDefaultFilterWrappers( final AbstractMavenFilteringRequest request )
+ public List getDefaultFilterWrappers( final AbstractMavenFilteringRequest req )
throws MavenFilteringException
{
+ // compensate for null parameter value.
+ final AbstractMavenFilteringRequest request = req == null ? new MavenFileFilterRequest() : req;
// here we build some properties which will be used to read some properties files
// to interpolate the expression ${ } in this properties file
@@ -209,11 +214,11 @@
if ( request.getAdditionalProperties() != null )
{
- // additionnal properties wins
+ // additional properties wins
filterProperties.putAll( request.getAdditionalProperties() );
}
- List defaultFilterWrappers = new ArrayList( 3 );
+ List defaultFilterWrappers = request == null ? new ArrayList( 1 ) : new ArrayList( request.getDelimiters().size() + 1 );
if ( getLogger().isDebugEnabled() )
{
@@ -224,45 +229,68 @@
new PropertiesEscapingBackSlashValueSource( request.isEscapeWindowsPaths(), filterProperties );
final String escapeString = request == null ? null : request.getEscapeString();
-
- // support ${token}
- FileUtils.FilterWrapper one = new FileUtils.FilterWrapper()
- {
- public Reader getReader( Reader reader )
- {
- StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator();
- MavenProjectValueSource valueSource =
- new MavenProjectValueSource( request.getMavenProject(), request.isEscapeWindowsPaths() );
- valueSource.setPropertiesValueSource( propertiesValueSource );
- propertiesInterpolator.addValueSource( valueSource );
- propertiesInterpolator.setEscapeString( escapeString );
- InterpolatorFilterReader filterReader = new InterpolatorFilterReader( reader, propertiesInterpolator );
- filterReader.setInterpolateWithPrefixPattern( false );
- filterReader.setEscapeString( escapeString );
- return filterReader;
- }
- };
- defaultFilterWrappers.add( one );
-
- // support @token@
- FileUtils.FilterWrapper second = new FileUtils.FilterWrapper()
+
+ if ( request != null )
{
- public Reader getReader( Reader reader )
+ for ( Iterator it = request.getDelimiters().iterator(); it.hasNext(); )
{
- StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( "@", "@" );
- MavenProjectValueSource valueSource =
- new MavenProjectValueSource( request.getMavenProject(), request.isEscapeWindowsPaths() );
- valueSource.setPropertiesValueSource( propertiesValueSource );
- propertiesInterpolator.addValueSource( valueSource );
- propertiesInterpolator.setEscapeString( escapeString );
- InterpolatorFilterReader filterReader =
- new InterpolatorFilterReader( reader, propertiesInterpolator, "@", "@" );
- filterReader.setInterpolateWithPrefixPattern( false );
- filterReader.setEscapeString( escapeString );
- return filterReader;
+ String delimiterPattern = (String) it.next();
+ final String[] delimiters = new String[2];
+
+ int splitIdx = delimiterPattern.indexOf( '*' );
+ if ( splitIdx < 0 || splitIdx == delimiterPattern.length() - 1 )
+ {
+ delimiters[0] = delimiterPattern;
+ delimiters[1] = delimiterPattern;
+ }
+ else
+ {
+ delimiters[0] = delimiterPattern.substring( 0, splitIdx );
+ delimiters[1] = delimiterPattern.substring( splitIdx + 1 );
+ }
+
+ FileUtils.FilterWrapper wrapper = new FileUtils.FilterWrapper()
+ {
+ public Reader getReader( Reader reader )
+ {
+ StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( delimiters[0],
+ delimiters[1] );
+
+ RecursionInterceptor ri = null;
+ if ( request.getProjectStartExpressions() != null && !request.getProjectStartExpressions().isEmpty() )
+ {
+ ri = new PrefixAwareRecursionInterceptor( request.getProjectStartExpressions(), true );
+ }
+ else
+ {
+ ri = new SimpleRecursionInterceptor();
+ }
+
+ MavenProjectValueSource valueSource = new MavenProjectValueSource(
+ request.getMavenProject(),
+ request.isEscapeWindowsPaths() );
+
+ valueSource.setPropertiesValueSource( propertiesValueSource );
+
+ propertiesInterpolator.addValueSource( valueSource );
+ propertiesInterpolator.setEscapeString( escapeString );
+
+ InterpolatorFilterReader filterReader = new InterpolatorFilterReader( reader,
+ propertiesInterpolator,
+ delimiters[0],
+ delimiters[1],
+ ri );
+
+ filterReader.setInterpolateWithPrefixPattern( false );
+ filterReader.setEscapeString( escapeString );
+
+ return filterReader;
+ }
+ };
+
+ defaultFilterWrappers.add( wrapper );
}
- };
- defaultFilterWrappers.add( second );
+ }
return defaultFilterWrappers;
}
Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java (original)
+++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java Thu Aug 20 22:42:46 2009
@@ -57,13 +57,6 @@
private boolean useDefaultFilterWrappers = false;
- /**
- * List of String considered as expressions which contains values in the project/pom : pom project
- * default value will be pom and project.
- * @since 1.0-beta-2
- */
- private List projectStartExpressions = new ArrayList();
-
/**
* Overwrite existing files even if the destination files are newer.
* <b>false by default</b>
@@ -79,15 +72,8 @@
public MavenResourcesExecution()
{
- initProjectStartExpressions();
}
- private void initProjectStartExpressions()
- {
- projectStartExpressions.add( "pom" );
- projectStartExpressions.add( "project" );
- }
-
/**
* <b>As we use a maven project useDefaultFilterWrappers will set to true</b>
* @param resources
@@ -102,7 +88,6 @@
List fileFilters, List nonFilteredFileExtensions, MavenSession mavenSession )
{
super( mavenProject, fileFilters, encoding, mavenSession );
- initProjectStartExpressions();
this.resources = resources;
this.outputDirectory = outputDirectory;
this.nonFilteredFileExtensions = nonFilteredFileExtensions;
@@ -283,24 +268,6 @@
* @return
* @since 1.0-beta-2
*/
- public List getProjectStartExpressions()
- {
- return projectStartExpressions;
- }
-
- /**
- * @param projectStartExpressions
- * @since 1.0-beta-2
- */
- public void setProjectStartExpressions( List projectStartExpressions )
- {
- this.projectStartExpressions = projectStartExpressions;
- }
-
- /**
- * @return
- * @since 1.0-beta-2
- */
public boolean isOverwrite()
{
return overwrite;