Author: rfscholte
Date: Sat Jan 14 13:39:47 2017
New Revision: 1778770

URL: http://svn.apache.org/viewvc?rev=1778770&view=rev
Log:
[MPLUGIN-319] @since values ignored in report
New strategy where we don't need a parameter anymore (who would change it?)

Added:
    
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/
    
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/
    
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/
    
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/MNG6109PluginDescriptorBuilder.java
Modified:
    
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java

Modified: 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
URL: 
http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java?rev=1778770&r1=1778769&r2=1778770&view=diff
==============================================================================
--- 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
 (original)
+++ 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/PluginReport.java
 Sat Jan 14 13:39:47 2017
@@ -47,6 +47,7 @@ import org.apache.maven.plugins.annotati
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import 
org.apache.maven.plugins.plugin.descriptor.MNG6109PluginDescriptorBuilder;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.AbstractMavenReportRenderer;
@@ -195,18 +196,6 @@ public class PluginReport
      */
     @Component
     private RuntimeInformation rtInfo;
-    
-    /**
-     * Maven version range where <code>META-INF/maven/plugin.xml</code> should 
be used to get plugin info:
-     * when running with a Maven version not in the range, plugin info is 
extracted directly from plugin source.
-     * Reading <code>META-INF/maven/plugin.xml</code> gives accurate 
<code>since</code> only with Maven-3.4.0+
-     * (see MNG-6109).
-     * For cases where missing <code>since</code> info is not an issue, this 
version range spec can be changed
-     * to avoid extracting info from plugin source once again.
-     * @since 3.5.1
-     */
-    @Parameter( defaultValue = "(3.3.9,)" )
-    private String usePluginXmlMavenVersionRange;
 
     /**
      * {@inheritDoc}
@@ -271,26 +260,20 @@ public class PluginReport
     private PluginDescriptor extractPluginDescriptor()
         throws MavenReportException
     {
-        if ( !usePluginXml() )
+        PluginDescriptorBuilder builder = getPluginDescriptorBuilder();
+        
+        try
         {
-            getLog().debug( "Mojo configured to avoid plugin.xml (MNG-6109): 
fall back to mojoScanner" );
+            return builder.build( new FileReader( new File( 
project.getBuild().getOutputDirectory(),
+                                                            
"META-INF/maven/plugin.xml" ) ) );
         }
-        else
+        catch ( FileNotFoundException e )
         {
-            PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
-            try
-            {
-                return builder.build( new FileReader( new File( 
project.getBuild().getOutputDirectory(),
-                                                                
"META-INF/maven/plugin.xml" ) ) );
-            }
-            catch ( FileNotFoundException e )
-            {
-                getLog().debug( "Failed to read META-INF/maven/plugin.xml, 
fall back to mojoScanner" );
-            }
-            catch ( PlexusConfigurationException e )
-            {
-                getLog().debug( "Failed to read META-INF/maven/plugin.xml, 
fall back to mojoScanner" );
-            }
+            getLog().debug( "Failed to read META-INF/maven/plugin.xml, fall 
back to mojoScanner" );
+        }
+        catch ( PlexusConfigurationException e )
+        {
+            getLog().debug( "Failed to read META-INF/maven/plugin.xml, fall 
back to mojoScanner" );
         }
 
         // Copy from AbstractGeneratorMojo#execute()
@@ -348,23 +331,35 @@ public class PluginReport
     }
 
     /**
-     * Check if META-INF/maven/plugin.xml should be used (as expected 
initially) or not (because of Maven
-     * MNG-6109 bug that won't give accurate since info when reading 
plugin.xml).
-     * @return true if runing Maven version is in configured 
usePluginXmlMavenVersionRange range
+     * Return the pluginDescriptorBuilder to use based on the Maven version: 
either use the original from the 
+     * maven-plugin-api or a patched version for Maven versions before the 
MNG-6109 fix 
+     * (because of Maven MNG-6109 bug that won't give accurate 'since' info 
when reading plugin.xml).
+     * 
+     * @return the proper pluginDescriptorBuilder
      * @see https://issues.apache.org/jira/browse/MNG-6109
      * @see https://issues.apache.org/jira/browse/MPLUGIN-319
      */
-    private boolean usePluginXml()
+    private PluginDescriptorBuilder getPluginDescriptorBuilder()
     {
+        PluginDescriptorBuilder pluginDescriptorBuilder;
         try
         {
-            VersionRange versionRange = VersionRange.createFromVersionSpec( 
usePluginXmlMavenVersionRange );
-            return versionRange.containsVersion( 
rtInfo.getApplicationVersion() );
+            VersionRange versionRange = VersionRange.createFromVersionSpec( 
"(3.3.9,)" );
+            if ( versionRange.containsVersion( rtInfo.getApplicationVersion() 
) )
+            {
+                pluginDescriptorBuilder = new PluginDescriptorBuilder();
+            }
+            else
+            {
+                pluginDescriptorBuilder = new MNG6109PluginDescriptorBuilder();
+            }
         }
         catch ( InvalidVersionSpecificationException e )
         {
-            return false;
+            return new MNG6109PluginDescriptorBuilder();
         }
+        
+        return pluginDescriptorBuilder;
     }
 
     /**

Added: 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/MNG6109PluginDescriptorBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/MNG6109PluginDescriptorBuilder.java?rev=1778770&view=auto
==============================================================================
--- 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/MNG6109PluginDescriptorBuilder.java
 (added)
+++ 
maven/plugin-tools/trunk/maven-plugin-plugin/src/main/java/org/apache/maven/plugins/plugin/descriptor/MNG6109PluginDescriptorBuilder.java
 Sat Jan 14 13:39:47 2017
@@ -0,0 +1,61 @@
+package org.apache.maven.plugins.plugin.descriptor;
+
+/*
+ * 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.PluginDescriptor;
+import org.apache.maven.plugin.descriptor.PluginDescriptorBuilder;
+import org.codehaus.plexus.configuration.PlexusConfiguration;
+import org.codehaus.plexus.configuration.PlexusConfigurationException;
+
+/**
+ * Reads the plugin descriptor and adds the fix for MNG-6109 when using 
Maven-3.3.9 and before.
+ * Class can be removed once Maven 3.5.0 is the prerequisite for this plugin.
+ * 
+ * @author Robert Scholte
+ * @since 3.5.1
+ */
+public class MNG6109PluginDescriptorBuilder extends PluginDescriptorBuilder
+{
+
+    @Override
+    public MojoDescriptor buildComponentDescriptor( PlexusConfiguration c, 
PluginDescriptor pluginDescriptor )
+        throws PlexusConfigurationException
+    {
+        MojoDescriptor mojoDescriptor = super.buildComponentDescriptor( c, 
pluginDescriptor );
+        
+        // 
----------------------------------------------------------------------
+        // Parameters
+        // 
----------------------------------------------------------------------
+
+        PlexusConfiguration[] parameterConfigurations = c.getChild( 
"parameters" ).getChildren( "parameter" );
+
+        for ( PlexusConfiguration d : parameterConfigurations )
+        {
+            String parameterName = d.getChild( "name" ).getValue();
+            
+            String parameterSince = d.getChild( "since" ).getValue();
+            
+            mojoDescriptor.getParameterMap().get( parameterName ).setSince( 
parameterSince );
+        }
+        
+        return mojoDescriptor;
+    }
+}


Reply via email to