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

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

commit c41ed514f29671af6797ff7b5cbb51d72cf102a2
Author: Gabriel Belingueres <[email protected]>
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 commits c99028b9fb67158edc9f202ff8a178c9465430ba, 
9ac2d08dc7dec66acc2c835710065b677190e700)
    
    Co-authored-by: Slawomir Jaranowski <[email protected]>
---
 .../plugin/internal/DefaultMavenPluginManager.java |   5 +
 .../plugin/internal/DeprecatedPluginValidator.java | 131 +++++++++++++++++++++
 .../MavenPluginConfigurationValidator.java         |  39 ++++++
 .../internal/ValidatingConfigurationListener.java  |   2 -
 4 files changed, 175 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 d5112e5b3..63ae1909d 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
@@ -164,6 +164,9 @@ public class DefaultMavenPluginManager
     @Requirement
     private PluginArtifactsCache pluginArtifactsCache;
 
+    @Requirement
+    private MavenPluginConfigurationValidator configurationValidator;
+
     private ExtensionDescriptorBuilder extensionDescriptorBuilder = new 
ExtensionDescriptorBuilder();
 
     private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
@@ -594,6 +597,8 @@ public class DefaultMavenPluginManager
 
             ExpressionEvaluator expressionEvaluator = new 
PluginParameterExpressionEvaluator( session, mojoExecution );
 
+            configurationValidator.validate( mojoDescriptor, pomConfiguration, 
expressionEvaluator );
+
             populateMojoExecutionFields( mojo, mojoExecution.getExecutionId(), 
mojoDescriptor, pluginRealm,
                                          pomConfiguration, expressionEvaluator 
);
 
diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/DeprecatedPluginValidator.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DeprecatedPluginValidator.java
new file mode 100644
index 000000000..48e16c60c
--- /dev/null
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/DeprecatedPluginValidator.java
@@ -0,0 +1,131 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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.annotations.Component;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Print warnings if deprecated params of plugin are used in configuration.
+ *
+ * @author Slawomir Jaranowski
+ */
+
+@Component( role = MavenPluginConfigurationValidator.class )
+class DeprecatedPluginValidator implements MavenPluginConfigurationValidator
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger( 
DeprecatedPluginValidator.class );
+
+    @Override
+    public void validate( MojoDescriptor mojoDescriptor,
+                          PlexusConfiguration pomConfiguration,
+                          ExpressionEvaluator expressionEvaluator )
+    {
+        if ( !LOGGER.isWarnEnabled() )
+        {
+            return;
+        }
+
+        if ( mojoDescriptor.getParameters() == null )
+        {
+            return;
+        }
+
+        mojoDescriptor.getParameters().stream()
+            .filter( parameter -> parameter.getDeprecated() != null )
+            .filter( Parameter::isEditable )
+            .forEach( parameter -> checkParameter( parameter, 
pomConfiguration, expressionEvaluator ) );
+    }
+
+    private static void checkParameter( Parameter parameter,
+                                        PlexusConfiguration pomConfiguration,
+                                        ExpressionEvaluator 
expressionEvaluator )
+    {
+        PlexusConfiguration config = pomConfiguration.getChild( 
parameter.getName(), false );
+
+        if ( isValueSet( config, expressionEvaluator ) )
+        {
+            logDeprecateWarn( parameter );
+        }
+    }
+
+    private static boolean isValueSet( PlexusConfiguration config,
+                                       ExpressionEvaluator expressionEvaluator 
)
+    {
+        if ( config == null )
+        {
+            return false;
+        }
+
+        // there are sub items ... so configuration is declared
+        if ( config.getChildCount() > 0 )
+        {
+            return true;
+        }
+
+        String strValue = config.getValue();
+
+        if ( strValue == null || strValue.isEmpty() )
+        {
+            return false;
+        }
+
+        // for declaration like @Parameter( property = "config.property" )
+        // the value will contains ${config.property}
+        try
+        {
+            return expressionEvaluator.evaluate( strValue ) != null;
+        }
+        catch ( ExpressionEvaluationException e )
+        {
+            // not important
+            // will be reported during Mojo fields populate
+        }
+
+        // fallback - in case of error in expressionEvaluator
+        return false;
+    }
+
+    private static void logDeprecateWarn( Parameter parameter )
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append( "Parameter '" );
+        sb.append( parameter.getName() );
+        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( parameter.getDeprecated() );
+
+        LOGGER.warn( MessageUtils.buffer().warning( sb.toString() ).toString() 
);
+    }
+}
diff --git 
a/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginConfigurationValidator.java
 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginConfigurationValidator.java
new file mode 100644
index 000000000..8252782d3
--- /dev/null
+++ 
b/maven-core/src/main/java/org/apache/maven/plugin/internal/MavenPluginConfigurationValidator.java
@@ -0,0 +1,39 @@
+package org.apache.maven.plugin.internal;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugin.descriptor.MojoDescriptor;
+import 
org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+
+/**
+ * Service responsible for validating plugin configuration.
+ *
+ * @author Slawomir Jaranowski
+ */
+interface MavenPluginConfigurationValidator
+{
+    /**
+     * Check mojo configuration.
+     */
+    void validate( MojoDescriptor mojoDescriptor,
+                   PlexusConfiguration pomConfiguration,
+                   ExpressionEvaluator expressionEvaluator );
+}
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..c04f44821 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
@@ -36,7 +36,6 @@ import 
org.codehaus.plexus.component.configurator.ConfigurationListener;
 class ValidatingConfigurationListener
     implements ConfigurationListener
 {
-
     private final Object mojo;
 
     private final ConfigurationListener delegate;
@@ -93,5 +92,4 @@ class ValidatingConfigurationListener
             missingParameters.remove( fieldName );
         }
     }
-
 }

Reply via email to