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;
+ }
}