You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2020/03/28 22:04:46 UTC

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

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

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

commit 1ae8382447b1aba6c05d45e57c9622b3ce22a279
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.
    - Stop using deprecated DebugConfigurationListener class.
---
 .../plugin/internal/DefaultMavenPluginManager.java |  6 +-
 .../internal/ValidatingConfigurationListener.java  | 79 ++++++++++++++++++++--
 2 files changed, 75 insertions(+), 10 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 9febd4a..0939e29 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
@@ -27,7 +27,6 @@ import org.apache.maven.execution.scope.internal.MojoExecutionScopeModule;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.monitor.logging.DefaultLog;
 import org.apache.maven.plugin.ContextEnabled;
-import org.apache.maven.plugin.DebugConfigurationListener;
 import org.apache.maven.plugin.ExtensionRealmCache;
 import org.apache.maven.plugin.InvalidPluginDescriptorException;
 import org.apache.maven.plugin.MavenPluginManager;
@@ -67,7 +66,6 @@ import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException;
 import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
 import org.codehaus.plexus.component.configurator.ComponentConfigurator;
-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.codehaus.plexus.component.repository.ComponentDescriptor;
@@ -616,10 +614,8 @@ public class DefaultMavenPluginManager
             // so that this method could entirely be handled by a plexus lookup?
             configurator = container.lookup( ComponentConfigurator.class, configuratorId );
 
-            ConfigurationListener listener = new DebugConfigurationListener( logger );
-
             ValidatingConfigurationListener validator =
-                new ValidatingConfigurationListener( mojo, mojoDescriptor, listener );
+                new ValidatingConfigurationListener( mojo, mojoDescriptor, logger );
 
             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 99b18af..f1879f2 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,16 @@ 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 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.logging.Logger;
 
 /**
  * A configuration listener to help validate the plugin configuration. For instance, check for required but missing
@@ -39,14 +42,17 @@ class ValidatingConfigurationListener
 
     private final Object mojo;
 
-    private final ConfigurationListener delegate;
+    private final MojoDescriptor mojoDescriptor;
+
+    private final Logger logger;
 
     private final Map<String, Parameter> missingParameters;
 
-    ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate )
+    ValidatingConfigurationListener( Object mojo, MojoDescriptor mojoDescriptor, Logger logger )
     {
         this.mojo = mojo;
-        this.delegate = delegate;
+        this.mojoDescriptor = mojoDescriptor;
+        this.logger = logger;
         this.missingParameters = new HashMap<>();
 
         if ( mojoDescriptor.getParameters() != null )
@@ -68,21 +74,31 @@ class ValidatingConfigurationListener
 
     public void notifyFieldChangeUsingSetter( String fieldName, Object value, Object target )
     {
-        delegate.notifyFieldChangeUsingSetter( fieldName, value, target );
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "  (s) " + fieldName + " = " + toString( value ) );
+        }
 
         if ( mojo == target )
         {
             notify( fieldName, value );
+
+            warnDeprecated( fieldName, value );
         }
     }
 
     public void notifyFieldChangeUsingReflection( String fieldName, Object value, Object target )
     {
-        delegate.notifyFieldChangeUsingReflection( fieldName, value, target );
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "  (f) " + fieldName + " = " + toString( value ) );
+        }
 
         if ( mojo == target )
         {
             notify( fieldName, value );
+
+            warnDeprecated( fieldName, value );
         }
     }
 
@@ -94,4 +110,57 @@ class ValidatingConfigurationListener
         }
     }
 
+    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 userParam = parameter.getExpression().replace( "${", "'" ).replace( '}', '\'' );
+                    sb.append( " (User Parameter " ).append( userParam ).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 String toString( Object obj )
+    {
+        String str;
+        if ( obj != null && obj.getClass().isArray() )
+        {
+            int n = Array.getLength( obj );
+            StringBuilder buf = new StringBuilder( 256 );
+            buf.append( '[' );
+            for ( int i = 0; i < n; i++ )
+            {
+                if ( i > 0 )
+                {
+                    buf.append( ", " );
+                }
+                buf.append( String.valueOf( Array.get( obj, i ) ) );
+            }
+            buf.append( ']' );
+            str = buf.toString();
+        }
+        else
+        {
+            str = String.valueOf( obj );
+        }
+        return str;
+    }
 }