Author: jdcasey
Date: Mon Mar 31 15:27:20 2008
New Revision: 643188

URL: http://svn.apache.org/viewvc?rev=643188&view=rev
Log:
Cleaning up the pluginRepositories warning, and isolating it to a compatibility 
aspect so we can scan Model and Profile instances as they pass through the 
system more cleanly and ignore violations from POMs that are resolved in the 
repository.

Modified:
    
maven/components/trunk/maven-profile/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
    
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/compat/Maven20xProjectCompatAspect.aj
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Modified: 
maven/components/trunk/maven-profile/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-profile/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java?rev=643188&r1=643187&r2=643188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-profile/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
 (original)
+++ 
maven/components/trunk/maven-profile/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java
 Mon Mar 31 15:27:20 2008
@@ -30,6 +30,9 @@
 
 public class ProfilesConversionUtils
 {
+
+    public static final String PROFILES_XML_SOURCE = "profiles.xml";
+
     private ProfilesConversionUtils()
     {
     }
@@ -40,7 +43,7 @@
 
         profile.setId( profileXmlProfile.getId() );
 
-        profile.setSource( "profiles.xml" );
+        profile.setSource( PROFILES_XML_SOURCE );
 
         org.apache.maven.profiles.Activation profileActivation = 
profileXmlProfile.getActivation();
 
@@ -64,9 +67,9 @@
                 activation.setProperty( prop );
             }
 
-            
+
             ActivationOS profileOs = profileActivation.getOs();
-            
+
             if ( profileOs != null )
             {
                 org.apache.maven.model.ActivationOS os = new 
org.apache.maven.model.ActivationOS();
@@ -76,7 +79,7 @@
                 os.setName( profileOs.getName() );
                 os.setVersion( profileOs.getVersion() );
             }
-            
+
             org.apache.maven.profiles.ActivationFile profileFile = 
profileActivation.getFile();
 
             if ( profileFile != null )

Modified: 
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/compat/Maven20xProjectCompatAspect.aj
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/compat/Maven20xProjectCompatAspect.aj?rev=643188&r1=643187&r2=643188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/compat/Maven20xProjectCompatAspect.aj
 (original)
+++ 
maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/compat/Maven20xProjectCompatAspect.aj
 Mon Mar 31 15:27:20 2008
@@ -1,17 +1,113 @@
 package org.apache.maven.project.aspect.compat;
 
+import org.apache.maven.model.Model;
+import org.apache.maven.project.build.model.ModelLineage;
+import org.apache.maven.project.build.model.ModelLineageIterator;
+import org.apache.maven.project.build.model.ModelLineageBuilder;
 import org.apache.maven.project.DefaultMavenProjectBuilder;
+import org.apache.maven.project.artifact.MavenMetadataSource;
+import org.apache.maven.profiles.build.DefaultProfileAdvisor;
+import org.apache.maven.model.Profile;
+import org.apache.maven.profiles.ProfileManager;
 
-import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 import java.util.Map;
 
 public privileged aspect Maven20xProjectCompatAspect
 {
 
-    //DO NOT USE, it is here only for backward compatibility reasons. The 
existing
-    // maven-assembly-plugin (2.2-beta-1) is accessing it via reflection.
+    private pointcut reactorProjectBuilds():
+        cflow( execution( * 
DefaultMavenProjectBuilder.buildFromSourceFileInternal( .. ) ) )
+        && !cflow( execution( * MavenMetadataSource.*( .. ) ) );
 
-// the aspect weaving seems not to work for reflection from plugin.
-//    private Map DefaultMavenProjectBuilder.processedProjectCache = new 
HashMap();
+    private pointcut lineageBuildResumed( DefaultMavenProjectBuilder 
projectBuilder, ModelLineage lineage ):
+        call( * ModelLineageBuilder.resumeBuildingModelLineage( ModelLineage, 
.. ) )
+        && this( projectBuilder )
+        && args( lineage, .. );
+
+    after( DefaultMavenProjectBuilder projectBuilder, ModelLineage lineage ):
+        reactorProjectBuilds()
+        && lineageBuildResumed( projectBuilder, lineage )
+    {
+        for ( ModelLineageIterator it = lineage.lineageIterator(); 
it.hasNext(); )
+        {
+            Model model = (Model) it.next();
+            List pluginRepos = model.getPluginRepositories();
+
+            if ( pluginRepos != null && !pluginRepos.isEmpty() )
+            {
+                StringBuffer message = new StringBuffer();
+                message.append( "The <pluginRepositories/> section of the POM 
has been deprecated. Please update your POM (" );
+                message.append( model.getId() );
+                message.append( ")." );
+
+                projectBuilder.logger.warn( message.toString() );
+            }
+        }
+    }
+
+    private pointcut externalProfilesApplied( DefaultProfileAdvisor advisor, 
ProfileManager profileManager ):
+        execution( * DefaultProfileAdvisor.applyActivatedExternalProfiles( .., 
ProfileManager+ ) )
+        && this( advisor )
+        && args( .., profileManager );
+
+
+    private boolean settingsProfilesChecked = false;
+
+    before( DefaultProfileAdvisor advisor, ProfileManager profileManager ):
+        reactorProjectBuilds()
+        && externalProfilesApplied( advisor, profileManager )
+    {
+        if ( profileManager == null )
+        {
+            return;
+        }
+
+        Map profilesById = profileManager.getProfilesById();
+        Set invalidProfiles = new HashSet();
+
+        boolean settingsProfilesEncountered = false;
+        for ( Iterator it = profilesById.values().iterator(); it.hasNext(); )
+        {
+            Profile profile = (Profile) it.next();
+
+            if ( "settings.xml".equals( profile.getSource() ) )
+            {
+                settingsProfilesEncountered = true;
+
+                if ( settingsProfilesChecked )
+                {
+                    continue;
+                }
+            }
+
+            List pluginRepos = profile.getPluginRepositories();
+            if ( pluginRepos != null && !pluginRepos.isEmpty() )
+            {
+                invalidProfiles.add( profile );
+            }
+        }
+
+        if ( !invalidProfiles.isEmpty() )
+        {
+            StringBuffer message = new StringBuffer();
+            message.append( "The <pluginRepositories/> section of the POM has 
been deprecated. Please update the following profiles:\n" );
+
+            for ( Iterator it = invalidProfiles.iterator(); it.hasNext(); )
+            {
+                Profile profile = (Profile) it.next();
+                message.append( "\n- " ).append( profile.getId() ).append( " 
(source: " ).append( profile.getSource() ).append( ")" );
+            }
+
+            message.append( "\n" );
+
+            advisor.logger.warn( message.toString() );
+        }
+
+        settingsProfilesChecked = settingsProfilesChecked || 
settingsProfilesEncountered;
+    }
 
 }

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=643188&r1=643187&r2=643188&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Mon Mar 31 15:27:20 2008
@@ -1034,7 +1034,6 @@
 
             if ( ( model.getPluginRepositories() != null ) && 
!model.getPluginRepositories().isEmpty() )
             {
-                getLogger().warn( "The <pluginRepositories/> section of the 
POM has been deprecated. Please update your POMs." );
                 repoSet.addAll( model.getPluginRepositories() );
             }
 


Reply via email to