Author: brett
Date: Tue Mar 17 02:28:26 2009
New Revision: 755086

URL: http://svn.apache.org/viewvc?rev=755086&view=rev
Log:
[MNG-4091] Validate the plugin descriptors and improve error reporting when 
mismatched with artifact

Added:
    
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
   (contents, props changed)
      - copied, changed from r755055, 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java
Modified:
    
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java

Modified: 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=755086&r1=755085&r2=755086&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Tue Mar 17 02:28:26 2009
@@ -69,6 +69,7 @@
 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.discovery.ComponentDiscoveryListener;
 import 
org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
 import 
org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.configuration.PlexusConfiguration;
@@ -84,6 +85,7 @@
 import java.io.File;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -296,10 +298,26 @@
 
         try
         {
-            child = container.createChildContainer( 
PluginUtils.constructVersionedKey( plugin ).intern(),
+            MavenPluginValidator validator = new MavenPluginValidator( 
pluginArtifact );
+
+            String key = PluginUtils.constructVersionedKey( plugin ).intern();
+            child = container.createChildContainer( key,
                                                     Collections.singletonList( 
pluginArtifact.getFile() ),
                                                     Collections.EMPTY_MAP,
-                                                    Collections.singletonList( 
pluginCollector ) );
+                                                    Arrays.asList( new 
ComponentDiscoveryListener[] { validator, pluginCollector } ) );
+
+            if ( validator.hasErrors() )
+            {
+                String msg = "Plugin '" + key + "' has an invalid descriptor:";
+                int count = 1;
+                for ( Iterator i = validator.getErrors().iterator(); 
i.hasNext(); )
+                {
+                    msg += "\n" + count + ") " + i.next();
+                    count++;
+                }
+                throw new PluginManagerException( msg );
+            }
+
             try
             {
                 child.getContainerRealm().importFrom( "plexus.core", 
"org.codehaus.plexus.util.xml.Xpp3Dom" );

Copied: 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
 (from r755055, 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java)
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java?p2=maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java&p1=maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java&r1=755055&r2=755086&rev=755086&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java
 (original)
+++ 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
 Tue Mar 17 02:28:26 2009
@@ -19,33 +19,27 @@
  * under the License.
  */
 
-import org.apache.maven.model.Plugin;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.codehaus.plexus.component.discovery.ComponentDiscoveryEvent;
 import org.codehaus.plexus.component.discovery.ComponentDiscoveryListener;
 import org.codehaus.plexus.component.repository.ComponentSetDescriptor;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
 
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
+import java.util.ArrayList;
+import java.util.List;
 
-public class MavenPluginCollector
-    extends AbstractLogEnabled
+public class MavenPluginValidator
     implements ComponentDiscoveryListener
 {
+    private final Artifact pluginArtifact;
 
-    private Set pluginsInProcess = new HashSet();
+    private List/*<String>*/ errors = new ArrayList/*<String>*/();
 
-    private Map pluginDescriptors = new HashMap();
-
-    private Map pluginIdsByPrefix = new HashMap();
+    public MavenPluginValidator( Artifact pluginArtifact )
+    {
+        this.pluginArtifact = pluginArtifact;
+    }
 
-    // ----------------------------------------------------------------------
-    // Mojo discovery
-    // ----------------------------------------------------------------------
     public void componentDiscovered( ComponentDiscoveryEvent event )
     {
         ComponentSetDescriptor componentSetDescriptor = 
event.getComponentSetDescriptor();
@@ -54,56 +48,31 @@
         {
             PluginDescriptor pluginDescriptor = (PluginDescriptor) 
componentSetDescriptor;
             
-            String key = PluginUtils.constructVersionedKey( pluginDescriptor );
+            if ( !pluginArtifact.getGroupId().equals( 
pluginDescriptor.getGroupId() ) )
+            {
+                errors.add( "Plugin's descriptor contains the wrong group ID: 
" + pluginDescriptor.getGroupId() );
+            }
             
-            if ( !pluginsInProcess.contains( key ) )
+            if ( !pluginArtifact.getArtifactId().equals( 
pluginDescriptor.getArtifactId() ) )
             {
-                pluginsInProcess.add( key );
-
-                pluginDescriptors.put( key, pluginDescriptor );
-
-                // TODO: throw an (not runtime) exception if there is a prefix 
overlap - means doing so elsewhere
-                // we also need to deal with multiple versions somehow - 
currently, first wins
-                if ( !pluginIdsByPrefix.containsKey( 
pluginDescriptor.getGoalPrefix() ) )
-                {
-                    pluginIdsByPrefix.put( pluginDescriptor.getGoalPrefix(), 
pluginDescriptor );
-                }
+                errors.add( "Plugin's descriptor contains the wrong artifact 
ID: " + pluginDescriptor.getArtifactId() );
+            }
+            
+            if ( !pluginArtifact.getBaseVersion().equals( 
pluginDescriptor.getVersion() ) )
+            {
+                errors.add( "Plugin's descriptor contains the wrong version: " 
+ pluginDescriptor.getVersion() );
             }
         }
     }
 
-    public PluginDescriptor getPluginDescriptor( Plugin plugin )
+    public boolean hasErrors()
     {
-        String key = PluginUtils.constructVersionedKey( plugin );
-        return (PluginDescriptor) pluginDescriptors.get( key );
+        return !errors.isEmpty();
     }
 
-    public boolean isPluginInstalled( Plugin plugin )
+    public List/*<String>*/ getErrors()
     {
-        String key = PluginUtils.constructVersionedKey( plugin );
-        return pluginDescriptors.containsKey( key );
+        return errors;
     }
-
-    public PluginDescriptor getPluginDescriptorForPrefix( String prefix )
-    {
-        return (PluginDescriptor) pluginIdsByPrefix.get( prefix );
-    }
-
-    public void flushPluginDescriptor( Plugin plugin )
-    {
-        String key = PluginUtils.constructVersionedKey( plugin );
-        pluginsInProcess.remove( key );
-        pluginDescriptors.remove( key );
-        
-        for ( Iterator it = pluginIdsByPrefix.entrySet().iterator(); 
it.hasNext(); )
-        {
-            Map.Entry entry = (Map.Entry) it.next();
-            
-            if ( key.equals( PluginUtils.constructVersionedKey( 
(PluginDescriptor) entry.getValue() ) ) )
-            {
-                it.remove();
-            }
-        }
-    }
-
 }
+

Propchange: 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Mar 17 02:28:26 2009
@@ -0,0 +1,7 @@
+/maven/components/branches/maven-2.0.10-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:679193-679867,680477-688882,708790-728809,728834
+/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:679552-679867,693956-728820,728836,728940,729060,729738,729785,730461,730631,734502,734803,736543,746381
+/maven/components/branches/maven-2.1.0-M1-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:690315,691793-694304
+/maven/components/branches/maven-2.1.0-RC/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:688883,689695,689976,689990
+/maven/components/branches/maven-2.1.x/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:751686,753648,754505,754542
+/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:572229,720001,721902,726845,729292
+/maven/sandbox/branches/maven/MNG-3379/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginCollector.java:678167


Reply via email to