MNG-3131: Error message is misleading if a missing plugin parameter is of a type like List

This commit is contained in:
rfscholte 2013-02-16 14:49:19 +01:00
parent b1b526ac9e
commit 56cd921fbd
2 changed files with 178 additions and 4 deletions

View File

@ -19,8 +19,10 @@ package org.apache.maven.plugin;
* under the License.
*/
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
@ -75,12 +77,53 @@ public class PluginParameterException
StringBuilder messageBuffer )
{
String expression = param.getExpression();
if ( param.isEditable() )
{
messageBuffer.append( "Inside the definition for plugin \'" + mojo.getPluginDescriptor().getArtifactId()
+ "\', specify the following:\n\n<configuration>\n ...\n <" + param.getName() + ">VALUE</"
+ param.getName() + ">\n</configuration>" );
boolean isArray = param.getType().endsWith( "[]" );
boolean isCollection = false;
boolean isMap = false;
if ( !isArray )
{
try
{
//assuming Type is available in current ClassLoader
isCollection = Collection.class.isAssignableFrom( Class.forName( param.getType() ) );
isMap = Map.class.isAssignableFrom( Class.forName( param.getType() ) );
}
catch ( ClassNotFoundException e )
{
// assume it is not assignable from Collection or Map
}
}
messageBuffer.append( "Inside the definition for plugin \'");
messageBuffer.append( mojo.getPluginDescriptor().getArtifactId() );
messageBuffer.append( "\', specify the following:\n\n<configuration>\n ...\n" );
messageBuffer.append( " <" ).append( param.getName() ).append( '>' );
if( isArray || isCollection )
{
messageBuffer.append( '\n' );
messageBuffer.append( " <item>" );
}
else if ( isMap )
{
messageBuffer.append( '\n' );
messageBuffer.append( " <KEY>" );
}
messageBuffer.append( "VALUE" );
if( isArray || isCollection )
{
messageBuffer.append( "</item>\n" );
messageBuffer.append( " " );
}
else if ( isMap )
{
messageBuffer.append( "</KEY>\n" );
messageBuffer.append( " " );
}
messageBuffer.append( "</" ).append( param.getName() ).append( ">\n" );
messageBuffer.append( "</configuration>" );
String alias = param.getAlias();
if ( StringUtils.isNotEmpty( alias ) && !alias.equals( param.getName() ) )

View File

@ -0,0 +1,131 @@
package org.apache.maven.plugin;
/*
* 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.util.Collections;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import junit.framework.TestCase;
/**
* MNG-3131
*
* @author Robert Scholte
*
*/
public class PluginParameterExceptionTest
extends TestCase
{
public void testMissingRequiredStringArrayTypeParameter()
{
MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setGoal( "goal" );
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "goalPrefix" );
pluginDescriptor.setArtifactId( "artifactId" );
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
Parameter parameter = new Parameter();
parameter.setType( "java.lang.String[]" );
parameter.setName( "toAddresses" );
parameter.setRequired( true );
PluginParameterException exception =
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
"\n" +
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
"\n" +
"<configuration>\n" +
" ...\n" +
" <toAddresses>\n" +
" <item>VALUE</item>\n" +
" </toAddresses>\n" +
"</configuration>.\n", exception.buildDiagnosticMessage() );
}
public void testMissingRequiredCollectionTypeParameter()
{
MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setGoal( "goal" );
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "goalPrefix" );
pluginDescriptor.setArtifactId( "artifactId" );
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
Parameter parameter = new Parameter();
parameter.setType( "java.util.List" );
parameter.setName( "toAddresses" );
parameter.setRequired( true );
PluginParameterException exception =
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
"\n" +
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
"\n" +
"<configuration>\n" +
" ...\n" +
" <toAddresses>\n" +
" <item>VALUE</item>\n" +
" </toAddresses>\n" +
"</configuration>.\n", exception.buildDiagnosticMessage() );
}
public void testMissingRequiredMapTypeParameter()
{
MojoDescriptor mojoDescriptor = new MojoDescriptor();
mojoDescriptor.setGoal( "goal" );
PluginDescriptor pluginDescriptor = new PluginDescriptor();
pluginDescriptor.setGoalPrefix( "goalPrefix" );
pluginDescriptor.setArtifactId( "artifactId" );
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
Parameter parameter = new Parameter();
parameter.setType( "java.util.Map" );
parameter.setName( "toAddresses" );
parameter.setRequired( true );
PluginParameterException exception =
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
"\n" +
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
"\n" +
"<configuration>\n" +
" ...\n" +
" <toAddresses>\n" +
" <KEY>VALUE</KEY>\n" +
" </toAddresses>\n" +
"</configuration>.\n", exception.buildDiagnosticMessage() );
}
}