You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/04/01 21:39:09 UTC

[maven] branch MNG-5222 created (now 2064f66)

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a change to branch MNG-5222
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at 2064f66  Evaluate default value

This branch includes the following new commits:

     new 180d426  [MNG-5222] - Maven 3 no longer logs warnings about deprecated plugin parameters
     new 2064f66  Evaluate default value

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven] 02/02: Evaluate default value

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch MNG-5222
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 2064f66d68ec704c355e557e61a166318e4da32b
Author: Slawomir Jaranowski <s....@gmail.com>
AuthorDate: Fri Apr 1 23:35:39 2022 +0200

    Evaluate default value
---
 .../plugin/internal/DefaultMavenPluginManager.java |  2 +-
 .../internal/ValidatingConfigurationListener.java  | 32 ++++++++++++++++------
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
index 88813e6..d8a0281 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -636,7 +636,7 @@ public class DefaultMavenPluginManager
             ConfigurationListener listener = new DebugConfigurationListener( logger );
 
             ValidatingConfigurationListener validator =
-                new ValidatingConfigurationListener( mojo, mojoDescriptor, listener );
+                new ValidatingConfigurationListener( mojo, mojoDescriptor, listener, expressionEvaluator );
 
             logger.debug(
                 "Configuring mojo '" + mojoDescriptor.getId() + "' with " + configuratorId + " configurator -->" );
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
index f27e930..87fce6c 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
@@ -29,6 +29,8 @@ import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.Parameter;
 import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.codehaus.plexus.component.configurator.ConfigurationListener;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,16 +49,19 @@ class ValidatingConfigurationListener
     private final ConfigurationListener delegate;
 
     private final MojoDescriptor mojoDescriptor;
+    private final ExpressionEvaluator expressionEvaluator;
 
     private final Logger logger = LoggerFactory.getLogger( getClass() );
 
     private final Map<String, Parameter> missingParameters;
 
-    ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate )
+    ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate,
+                                     ExpressionEvaluator expressionEvaluator )
     {
         this.mojo = mojo;
         this.delegate = delegate;
         this.mojoDescriptor = mojoDescriptor;
+        this.expressionEvaluator = expressionEvaluator;
         this.missingParameters = new HashMap<>();
 
         if ( mojoDescriptor.getParameters() != null )
@@ -80,7 +85,7 @@ class ValidatingConfigurationListener
     {
         delegate.notifyFieldChangeUsingSetter( fieldName, value, target );
 
-        if ( mojo == target )
+        if ( mojo == target && value != null )
         {
             notify( fieldName, value );
         }
@@ -90,7 +95,7 @@ class ValidatingConfigurationListener
     {
         delegate.notifyFieldChangeUsingReflection( fieldName, value, target );
 
-        if ( mojo == target )
+        if ( mojo == target && value != null )
         {
             notify( fieldName, value );
         }
@@ -98,10 +103,7 @@ class ValidatingConfigurationListener
 
     private void notify( String fieldName, Object value )
     {
-        if ( value != null )
-        {
-            missingParameters.remove( fieldName );
-        }
+        missingParameters.remove( fieldName );
 
         if ( logger.isWarnEnabled() )
         {
@@ -115,7 +117,8 @@ class ValidatingConfigurationListener
         String deprecated = parameter.getDeprecated();
         if ( deprecated != null && !deprecated.isEmpty() )
         {
-            if ( !toString( value ).equals( toString( parameter.getDefaultValue() ) ) )
+            Object defaultValue = evaluateValue( parameter.getDefaultValue() );
+            if ( !toString( value ).equals( toString( defaultValue ) ) )
             {
                 StringBuilder sb = new StringBuilder( "  Parameter '" );
                 sb.append( fieldName ).append( '\'' );
@@ -131,6 +134,19 @@ class ValidatingConfigurationListener
         }
     }
 
+    private Object evaluateValue( String value )
+    {
+        try
+        {
+            return expressionEvaluator.evaluate( value );
+        }
+        catch ( ExpressionEvaluationException e )
+        {
+            // should not happen here
+        }
+        return value;
+    }
+
     /**
      * Creates a human-friendly string representation of the specified object.
      *

[maven] 01/02: [MNG-5222] - Maven 3 no longer logs warnings about deprecated plugin parameters

Posted by sj...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch MNG-5222
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 180d426cc7a776b38991f12014d7a01cac62e901
Author: Gabriel Belingueres <be...@gmail.com>
AuthorDate: Mon Sep 9 00:36:13 2019 -0300

    [MNG-5222] - Maven 3 no longer logs warnings about deprecated plugin
    parameters
    
    - Added warning when setting deprecated parameter with value different
    than the default.
    - Changed Logger to SLF4J.
---
 .../internal/ValidatingConfigurationListener.java  | 64 ++++++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
index 99b18af..f27e930 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java
@@ -19,13 +19,18 @@ package org.apache.maven.plugin.internal;
  * under the License.
  */
 
+import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.StringJoiner;
 
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.Parameter;
+import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.codehaus.plexus.component.configurator.ConfigurationListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A configuration listener to help validate the plugin configuration. For instance, check for required but missing
@@ -41,12 +46,17 @@ class ValidatingConfigurationListener
 
     private final ConfigurationListener delegate;
 
+    private final MojoDescriptor mojoDescriptor;
+
+    private final Logger logger = LoggerFactory.getLogger( getClass() );
+
     private final Map<String, Parameter> missingParameters;
 
     ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate )
     {
         this.mojo = mojo;
         this.delegate = delegate;
+        this.mojoDescriptor = mojoDescriptor;
         this.missingParameters = new HashMap<>();
 
         if ( mojoDescriptor.getParameters() != null )
@@ -92,6 +102,60 @@ class ValidatingConfigurationListener
         {
             missingParameters.remove( fieldName );
         }
+
+        if ( logger.isWarnEnabled() )
+        {
+            warnDeprecated( fieldName, value );
+        }
     }
 
+    private void warnDeprecated( String fieldName, Object value )
+    {
+        Parameter parameter = mojoDescriptor.getParameterMap().get( fieldName );
+        String deprecated = parameter.getDeprecated();
+        if ( deprecated != null && !deprecated.isEmpty() )
+        {
+            if ( !toString( value ).equals( toString( parameter.getDefaultValue() ) ) )
+            {
+                StringBuilder sb = new StringBuilder( "  Parameter '" );
+                sb.append( fieldName ).append( '\'' );
+                if ( parameter.getExpression() != null )
+                {
+                    String userProperty = parameter.getExpression().replace( "${", "'" ).replace( '}', '\'' );
+                    sb.append( " (User Property " ).append( userProperty ).append( ")" );
+                }
+                sb.append( " is deprecated. " ).append( deprecated );
+
+                logger.warn( MessageUtils.buffer().warning( sb.toString() ).toString() );
+            }
+        }
+    }
+
+    /**
+     * Creates a human-friendly string representation of the specified object.
+     *
+     * @param obj The object to create a string representation for, may be <code>null</code>.
+     * @return The string representation, never <code>null</code>.
+     */
+    private static String toString( Object obj )
+    {
+        String str;
+        if ( obj != null && obj.getClass().isArray() )
+        {
+            int n = Array.getLength( obj );
+            StringBuilder buf = new StringBuilder( 256 );
+            StringJoiner sj = new StringJoiner( ", ", "[", "]" );
+            for ( int i = 0; i < n; i++ )
+            {
+                sj.add( String.valueOf( Array.get( obj, i ) ) );
+            }
+            buf.append( sj.toString() );
+            str = buf.toString();
+        }
+        else
+        {
+            str = String.valueOf( obj );
+        }
+        return str;
+    }
 }