[MPLUGIN-101] Add encoding parameter to maven-plugin-plugin mojos, and add encoding to PluginToolsRequest to allow it to pass through the plugin tools when executed.

git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/trunk@746366 13f79535-47bb-0310-9956-ffa450edef68
master
John Dennis Casey 2009-02-20 21:13:39 +00:00
parent 0e1c3d6155
commit 03ed8882f2
15 changed files with 93 additions and 29 deletions

View File

@ -61,7 +61,7 @@
<properties> <properties>
<doxiaVersion>1.0-alpha-10</doxiaVersion> <doxiaVersion>1.0-alpha-10</doxiaVersion>
<doxia-sitetoolsVersion>1.0-alpha-10</doxia-sitetoolsVersion> <doxia-sitetoolsVersion>1.0-alpha-10</doxia-sitetoolsVersion>
<pluginToolsVersion>[2.5-SNAPSHOT,)</pluginToolsVersion> <pluginToolsVersion>2.5-SNAPSHOT</pluginToolsVersion>
</properties> </properties>
<!-- Copy from project up --> <!-- Copy from project up -->

View File

@ -61,6 +61,14 @@ public abstract class AbstractGeneratorMojo
*/ */
protected MojoScanner mojoScanner; protected MojoScanner mojoScanner;
/**
* The file encoding of the source files.
*
* @parameter expression="${encoding}" default-value="ISO-8859-1"
* @since 2.5
*/
protected String encoding;
/** /**
* The goal prefix that will appear before the ":". * The goal prefix that will appear before the ":".
* *
@ -147,7 +155,7 @@ public abstract class AbstractGeneratorMojo
{ {
pluginDescriptor.setDependencies( PluginUtils.toComponentDependencies( project.getRuntimeDependencies() ) ); pluginDescriptor.setDependencies( PluginUtils.toComponentDependencies( project.getRuntimeDependencies() ) );
PluginToolsRequest request = new DefaultPluginToolsRequest( project, pluginDescriptor ); PluginToolsRequest request = new DefaultPluginToolsRequest( project, pluginDescriptor ).setEncoding( encoding );
mojoScanner.populatePluginDescriptor( request ); mojoScanner.populatePluginDescriptor( request );

View File

@ -5,9 +5,8 @@ import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
/** /**
* Default implementation of {@link PluginToolsRequest}, which is used to pass parameters to components * Default implementation of {@link PluginToolsRequest}, which is used to pass parameters to components used to extract
* used to extract {@link MojoDescriptor} instances from different types of metadata for a given * {@link MojoDescriptor} instances from different types of metadata for a given plugin.
* plugin.
* *
* @author jdcasey * @author jdcasey
*/ */
@ -16,8 +15,11 @@ public class DefaultPluginToolsRequest
{ {
private PluginDescriptor pluginDescriptor; private PluginDescriptor pluginDescriptor;
private MavenProject project; private MavenProject project;
private String encoding = "ISO-8859-1";
public DefaultPluginToolsRequest( MavenProject project, PluginDescriptor pluginDescriptor ) public DefaultPluginToolsRequest( MavenProject project, PluginDescriptor pluginDescriptor )
{ {
this.project = project; this.project = project;
@ -40,4 +42,26 @@ public class DefaultPluginToolsRequest
return project; return project;
} }
/**
* {@inheritDoc}
*/
public String getEncoding()
{
return this.encoding;
}
/**
* {@inheritDoc}
*/
public PluginToolsRequest setEncoding( String encoding )
{
if ( encoding == null )
{
throw new IllegalArgumentException( "unspecified source file encoding" );
}
this.encoding = encoding;
return this;
}
} }

View File

@ -24,4 +24,16 @@ public interface PluginToolsRequest
*/ */
PluginDescriptor getPluginDescriptor(); PluginDescriptor getPluginDescriptor();
/**
* Gets the file encoding of the source files.
*
* @return The file encoding of the source files, never <code>null</code>.
*/
public String getEncoding();
/**
* @see PluginToolsRequest#getEncoding()
*/
public PluginToolsRequest setEncoding( String encoding );
} }

View File

@ -56,6 +56,7 @@ public interface MojoDescriptorExtractor
* @return a list of mojo descriptors. * @return a list of mojo descriptors.
* @throws ExtractionException if any * @throws ExtractionException if any
* @throws InvalidPluginDescriptorException if any * @throws InvalidPluginDescriptorException if any
* @since 2.5
*/ */
List execute( PluginToolsRequest request ) List execute( PluginToolsRequest request )
throws ExtractionException, InvalidPluginDescriptorException; throws ExtractionException, InvalidPluginDescriptorException;

View File

@ -184,4 +184,5 @@ public class DefaultMojoScanner
} }
} }
} }
} }

View File

@ -53,6 +53,7 @@ public interface MojoScanner
* @param pluginDescriptor not null * @param pluginDescriptor not null
* @throws ExtractionException if any * @throws ExtractionException if any
* @throws InvalidPluginDescriptorException if any * @throws InvalidPluginDescriptorException if any
* @since 2.5
*/ */
void populatePluginDescriptor( PluginToolsRequest request ) void populatePluginDescriptor( PluginToolsRequest request )
throws ExtractionException, InvalidPluginDescriptorException; throws ExtractionException, InvalidPluginDescriptorException;

View File

@ -19,11 +19,8 @@ package org.apache.maven.tools.plugin.extractor.beanshell;
* under the License. * under the License.
*/ */
import bsh.EvalError;
import bsh.Interpreter;
import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException; import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.tools.plugin.PluginToolsRequest; import org.apache.maven.tools.plugin.PluginToolsRequest;
import org.apache.maven.tools.plugin.extractor.AbstractScriptedMojoDescriptorExtractor; import org.apache.maven.tools.plugin.extractor.AbstractScriptedMojoDescriptorExtractor;
import org.apache.maven.tools.plugin.extractor.ExtractionException; import org.apache.maven.tools.plugin.extractor.ExtractionException;
@ -37,6 +34,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import bsh.EvalError;
import bsh.Interpreter;
/** /**
* Extracts Mojo descriptors from <a href="http://www.beanshell.org/">BeanShell</a> sources. * Extracts Mojo descriptors from <a href="http://www.beanshell.org/">BeanShell</a> sources.
* *
@ -83,7 +83,7 @@ public class BeanshellMojoDescriptorExtractor
relativePath = relativePath.replace( '\\', '/' ); relativePath = relativePath.replace( '\\', '/' );
MojoDescriptor mojoDescriptor = createMojoDescriptor( basedir, relativePath, request.getPluginDescriptor() ); MojoDescriptor mojoDescriptor = createMojoDescriptor( basedir, relativePath, request );
descriptors.add( mojoDescriptor ); descriptors.add( mojoDescriptor );
} }
} }
@ -98,11 +98,11 @@ public class BeanshellMojoDescriptorExtractor
* @return a new Mojo descriptor instance * @return a new Mojo descriptor instance
* @throws InvalidPluginDescriptorException if any * @throws InvalidPluginDescriptorException if any
*/ */
private MojoDescriptor createMojoDescriptor( String basedir, String resource, PluginDescriptor pluginDescriptor ) private MojoDescriptor createMojoDescriptor( String basedir, String resource, PluginToolsRequest request )
throws InvalidPluginDescriptorException throws InvalidPluginDescriptorException
{ {
MojoDescriptor mojoDescriptor = new MojoDescriptor(); MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setPluginDescriptor( pluginDescriptor ); mojoDescriptor.setPluginDescriptor( request.getPluginDescriptor() );
mojoDescriptor.setLanguage( "bsh" ); mojoDescriptor.setLanguage( "bsh" );
mojoDescriptor.setComponentConfigurator( "bsh" ); mojoDescriptor.setComponentConfigurator( "bsh" );
@ -117,7 +117,7 @@ public class BeanshellMojoDescriptorExtractor
interpreter.set( "mojoDescriptor", mojoDescriptor ); interpreter.set( "mojoDescriptor", mojoDescriptor );
interpreter.eval( new InputStreamReader( getClass().getResourceAsStream( "/extractor.bsh" ), "UTF-8" ) ); interpreter.eval( new InputStreamReader( getClass().getResourceAsStream( "/extractor.bsh" ), request.getEncoding() ) );
} }
catch ( EvalError evalError ) catch ( EvalError evalError )
{ {

View File

@ -1,6 +1,7 @@
import bsh.*; import bsh.*;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.io.FileReader; import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.StringUtils;
import org.apache.maven.plugin.descriptor.Parameter; import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException; import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
@ -120,9 +121,9 @@ getDescription( text )
} }
} }
extract( file, mojoDescriptor ) extract( file, encoding, mojoDescriptor )
{ {
this.parser = new Parser( new FileReader( file ) ); this.parser = new Parser( new InputStreamReader( new FileInputStream( file ), encoding ) );
parser.setRetainComments( true ); parser.setRetainComments( true );
this.lastNode = null; this.lastNode = null;
@ -219,4 +220,4 @@ extract( file, mojoDescriptor )
} }
} }
extract( file, mojoDescriptor ); extract( file, encoding, mojoDescriptor );

View File

@ -589,7 +589,7 @@ public class JavaMojoDescriptorExtractor
public List execute( PluginToolsRequest request ) public List execute( PluginToolsRequest request )
throws ExtractionException, InvalidPluginDescriptorException throws ExtractionException, InvalidPluginDescriptorException
{ {
JavaClass[] javaClasses = discoverClasses( request.getProject() ); JavaClass[] javaClasses = discoverClasses( request );
List descriptors = new ArrayList(); List descriptors = new ArrayList();
@ -614,11 +614,15 @@ public class JavaMojoDescriptorExtractor
/** /**
* @param project not null * @param project not null
* @param encoding The file encoding of the source files, must not be <code>null</code>.
* @return an array of java class * @return an array of java class
*/ */
protected JavaClass[] discoverClasses( final MavenProject project ) protected JavaClass[] discoverClasses( final PluginToolsRequest request )
{ {
JavaDocBuilder builder = new JavaDocBuilder(); JavaDocBuilder builder = new JavaDocBuilder();
builder.setEncoding( request.getEncoding() );
MavenProject project = request.getProject();
for ( Iterator i = project.getCompileSourceRoots().iterator(); i.hasNext(); ) for ( Iterator i = project.getCompileSourceRoots().iterator(); i.hasNext(); )
{ {

View File

@ -25,6 +25,8 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter; import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptor; import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProject;
import org.apache.maven.tools.plugin.DefaultPluginToolsRequest;
import org.apache.maven.tools.plugin.PluginToolsRequest;
import java.io.File; import java.io.File;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
@ -59,7 +61,11 @@ public class JavaMojoDescriptorExtractorTest
PluginDescriptor pluginDescriptor = new PluginDescriptor(); PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "test" ); pluginDescriptor.setGoalPrefix( "test" );
List results = extractor.execute( project, pluginDescriptor );
PluginToolsRequest request = new DefaultPluginToolsRequest( project, pluginDescriptor );
List results = extractor.execute( request );
assertEquals( "Extracted mojos", 2, results.size() ); assertEquals( "Extracted mojos", 2, results.size() );
for ( int i = 0; i < 2; i++ ) for ( int i = 0; i < 2; i++ )
@ -92,7 +98,10 @@ public class JavaMojoDescriptorExtractorTest
PluginDescriptor pluginDescriptor = new PluginDescriptor(); PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "test" ); pluginDescriptor.setGoalPrefix( "test" );
List results = extractor.execute( project, pluginDescriptor );
PluginToolsRequest request = new DefaultPluginToolsRequest( project, pluginDescriptor );
List results = extractor.execute( request );
assertEquals( 1, results.size() ); assertEquals( 1, results.size() );
MojoDescriptor mojoDescriptor = (MojoDescriptor) results.get( 0 ); MojoDescriptor mojoDescriptor = (MojoDescriptor) results.get( 0 );
@ -156,7 +165,10 @@ public class JavaMojoDescriptorExtractorTest
PluginDescriptor pluginDescriptor = new PluginDescriptor(); PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "test" ); pluginDescriptor.setGoalPrefix( "test" );
List results = extractor.execute( project, pluginDescriptor );
PluginToolsRequest request = new DefaultPluginToolsRequest( project, pluginDescriptor );
List results = extractor.execute( request );
assertEquals( 0, results.size() ); assertEquals( 0, results.size() );
} }

View File

@ -144,7 +144,7 @@
</distributionManagement> </distributionManagement>
<properties> <properties>
<pluginToolsVersion>[2.5-SNAPSHOT,)</pluginToolsVersion> <pluginToolsVersion>2.5-SNAPSHOT</pluginToolsVersion>
<pluginTestingHarnessVersion>1.2</pluginTestingHarnessVersion> <pluginTestingHarnessVersion>1.2</pluginTestingHarnessVersion>
</properties> </properties>