Author: bentmann
Date: Fri Aug 28 17:57:04 2009
New Revision: 808971

URL: http://svn.apache.org/viewvc?rev=808971&view=rev
Log:
[MNG-4238] [regression] plugin parameters of primitive types can't be populated 
from expression

o First part of the fix, complete solution requires new plexus container 
(PLX-431) as well

Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java?rev=808971&r1=808970&r2=808971&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
 Fri Aug 28 17:57:04 2009
@@ -309,7 +309,7 @@
          * could still be converted by the configurator so we leave those 
alone). If so, back off to evaluating the
          * expression from properties only.
          */
-        if ( value != null && type != null && !( value instanceof String ) && 
!type.isInstance( value ) )
+        if ( value != null && type != null && !( value instanceof String ) && 
!isTypeCompatible( type, value ) )
         {
             value = null;
         }
@@ -359,6 +359,24 @@
         return value;
     }
 
+    private static boolean isTypeCompatible( Class<?> type, Object value )
+    {
+        if ( type.isInstance( value ) )
+        {
+            return true;
+        }
+        else if ( ( type.isPrimitive() || type.getName().startsWith( 
"java.lang." ) )
+            && value.getClass().getName().startsWith( "java.lang." ) )
+        {
+            // likely Boolean -> boolean, Short -> int etc. conversions, it's 
not the problem case we try to avoid
+            return true;
+        }
+        else
+        {
+            return false;
+        }
+    }
+
     private String stripTokens( String expr )
     {
         if ( expr.startsWith( "${" ) && ( expr.indexOf( "}" ) == expr.length() 
- 1 ) )


Reply via email to