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/12 20:59:09 UTC

[maven] branch maven-3.9.x updated: [MNG-5222] Maven 3 no longer logs warnings about deprecated plugin parameters

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

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


The following commit(s) were added to refs/heads/maven-3.9.x by this push:
     new ff0300b7c [MNG-5222] Maven 3 no longer logs warnings about deprecated plugin parameters
ff0300b7c is described below

commit ff0300b7cfdb983fd4c54c60d956cbee79412849
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.
    
    (cherry picked from commit c99028b9fb67158edc9f202ff8a178c9465430ba)
---
 .../plugin/internal/DefaultMavenPluginManager.java |   2 +-
 .../internal/ValidatingConfigurationListener.java  | 115 ++++++++++++++++++++-
 2 files changed, 115 insertions(+), 2 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 546f00435..9fdc1f624 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
@@ -642,7 +642,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 99b18af7c..75b5cb4f7 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,22 @@ 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.Iterator;
 import java.util.Map;
+import java.util.Objects;
+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.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A configuration listener to help validate the plugin configuration. For instance, check for required but missing
@@ -36,17 +45,25 @@ import org.codehaus.plexus.component.configurator.ConfigurationListener;
 class ValidatingConfigurationListener
     implements ConfigurationListener
 {
+    private static final Logger LOGGER = LoggerFactory.getLogger( ValidatingConfigurationListener.class );
 
     private final Object mojo;
 
     private final ConfigurationListener delegate;
 
+    private final MojoDescriptor mojoDescriptor;
+    private final ExpressionEvaluator expressionEvaluator;
+
+
     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 )
@@ -92,6 +109,102 @@ 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 )
+        {
+            Object defaultValue = evaluateValue( parameter.getDefaultValue() );
+            if ( !Objects.equals( toString( value ), defaultValue ) )
+            {
+                StringBuilder sb = new StringBuilder();
+                sb.append( "  Parameter '" );
+                sb.append( fieldName );
+                sb.append( '\'' );
+                if ( parameter.getExpression() != null )
+                {
+                    String userProperty = parameter.getExpression().replace( "${", "'" ).replace( '}', '\'' );
+                    sb.append( " (user property " );
+                    sb.append( userProperty );
+                    sb.append( ")" );
+                }
+                sb.append( " is deprecated: " );
+                sb.append( deprecated );
+
+                LOGGER.warn( MessageUtils.buffer().warning( sb.toString() ).toString() );
+            }
+        }
+    }
+
+    private Object evaluateValue( String value )
+    {
+        try
+        {
+            return expressionEvaluator.evaluate( value );
+        }
+        catch ( ExpressionEvaluationException e )
+        {
+            // should not happen here
+        }
+        return value;
     }
 
+    /**
+     * Creates a string representation of the specified object for comparing with default values.
+     *
+     * @param obj The object to create a string representation for, may be <code>null</code>.
+     * @return The string representation, null for empty arrays / collections.
+     */
+    private static String toString( Object obj )
+    {
+        String str;
+        if ( obj != null && obj.getClass().isArray() )
+        {
+            int n = Array.getLength( obj );
+            if ( n == 0 )
+            {
+                str = null;
+            }
+            else
+            {
+                StringJoiner sj = new StringJoiner( "," );
+                for ( int i = 0; i < n; i++ )
+                {
+                    sj.add( String.valueOf( Array.get( obj, i ) ) );
+                }
+                str = sj.toString();
+            }
+        }
+        else if ( obj instanceof Collection )
+        {
+            Collection<?> collection = (Collection<?>) obj;
+            if ( collection.isEmpty() )
+            {
+                str = null;
+            }
+            else
+            {
+                Iterator<?> it = collection.iterator();
+                StringJoiner sj = new StringJoiner( "," );
+                while ( it.hasNext() )
+                {
+                    sj.add( String.valueOf( it.next() ) );
+                }
+                str = sj.toString();
+            }
+        }
+        else
+        {
+            str = String.valueOf( obj );
+        }
+        return str;
+    }
 }