You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/08/31 23:49:55 UTC

svn commit: r991347 - in /maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm: ClassRealmRequest.java DefaultClassRealmManager.java

Author: bentmann
Date: Tue Aug 31 21:49:55 2010
New Revision: 991347

URL: http://svn.apache.org/viewvc?rev=991347&view=rev
Log:
[MNG-4787] Allow class realm manager delegates to alter public part of Maven core realm

Modified:
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
    maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java?rev=991347&r1=991346&r2=991347&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java Tue Aug 31 21:49:55 2010
@@ -29,9 +29,30 @@ import java.util.List;
 public interface ClassRealmRequest
 {
 
+    /**
+     * The type of a class realm.
+     */
     enum RealmType
     {
-        Project, Extension, Plugin,
+        /**
+         * The class realm for the public API of the Maven core.
+         */
+        Core,
+
+        /**
+         * A class realm for a project to aggregates its build extensions.
+         */
+        Project,
+
+        /**
+         * A class realm for a build extension.
+         */
+        Extension,
+
+        /**
+         * A class realm for a plugin.
+         */
+        Plugin,
     }
 
     /**
@@ -49,7 +70,7 @@ public interface ClassRealmRequest
     ClassLoader getParent();
 
     /**
-     * Gets the packages/types to import from the parent realm
+     * Gets the packages/types to import from the parent realm.
      * 
      * @return The modifiable list of packages/types to import from the parent realm, never {@code null}.
      */

Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java?rev=991347&r1=991346&r2=991347&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java (original)
+++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java Tue Aug 31 21:49:55 2010
@@ -105,8 +105,26 @@ public class DefaultClassRealmManager
         if ( mavenRealm == null )
         {
             mavenRealm = newRealm( "maven.api" );
+
             importMavenApi( mavenRealm );
+
             mavenRealm.setParentClassLoader( ClassLoader.getSystemClassLoader() );
+
+            List<ClassRealmManagerDelegate> delegates = getDelegates();
+            if ( !delegates.isEmpty() )
+            {
+                List<ClassRealmConstituent> constituents = new ArrayList<ClassRealmConstituent>();
+
+                ClassRealmRequest request =
+                    new DefaultClassRealmRequest( RealmType.Core, null, new ArrayList<String>(), constituents );
+
+                for ( ClassRealmManagerDelegate delegate : delegates )
+                {
+                    delegate.setupRealm( mavenRealm, request );
+                }
+
+                populateRealm( mavenRealm, constituents );
+            }
         }
         return mavenRealm;
     }
@@ -150,8 +168,6 @@ public class DefaultClassRealmManager
             imports = new ArrayList<String>();
         }
 
-        ClassRealmRequest request = new DefaultClassRealmRequest( type, parent, imports, constituents );
-
         ClassRealm classRealm = newRealm( baseRealmId );
 
         if ( parent != null )
@@ -163,9 +179,15 @@ public class DefaultClassRealmManager
             classRealm.setParentRealm( getMavenRealm() );
         }
 
-        for ( ClassRealmManagerDelegate delegate : getDelegates() )
+        List<ClassRealmManagerDelegate> delegates = getDelegates();
+        if ( !delegates.isEmpty() )
         {
-            delegate.setupRealm( classRealm, request );
+            ClassRealmRequest request = new DefaultClassRealmRequest( type, parent, imports, constituents );
+
+            for ( ClassRealmManagerDelegate delegate : delegates )
+            {
+                delegate.setupRealm( classRealm, request );
+            }
         }
 
         if ( importXpp3Dom )
@@ -193,35 +215,12 @@ public class DefaultClassRealmManager
             }
         }
 
-        if ( logger.isDebugEnabled() )
-        {
-            logger.debug( "Populating class realm " + classRealm.getId() );
-        }
-
-        for ( ClassRealmConstituent constituent : constituents )
-        {
-            File file = constituent.getFile();
-
-            String id = getId( constituent );
-            artifactIds.remove( id );
-
-            if ( logger.isDebugEnabled() )
-            {
-                logger.debug( "  Included: " + id );
-            }
-
-            try
-            {
-                classRealm.addURL( file.toURI().toURL() );
-            }
-            catch ( MalformedURLException e )
-            {
-                // Not going to happen
-            }
-        }
+        Set<String> includedIds = populateRealm( classRealm, constituents );
 
         if ( logger.isDebugEnabled() )
         {
+            artifactIds.removeAll( includedIds );
+
             for ( String id : artifactIds )
             {
                 logger.debug( "  Excluded: " + id );
@@ -362,8 +361,45 @@ public class DefaultClassRealmManager
         }
         catch ( ComponentLookupException e )
         {
+            logger.error( "Failed to lookup class realm delegates: " + e.getMessage(), e );
+
             return Collections.emptyList();
         }
     }
 
+    private Set<String> populateRealm( ClassRealm classRealm, List<ClassRealmConstituent> constituents )
+    {
+        Set<String> includedIds = new LinkedHashSet<String>();
+
+        if ( logger.isDebugEnabled() )
+        {
+            logger.debug( "Populating class realm " + classRealm.getId() );
+        }
+
+        for ( ClassRealmConstituent constituent : constituents )
+        {
+            File file = constituent.getFile();
+
+            String id = getId( constituent );
+            includedIds.add( id );
+
+            if ( logger.isDebugEnabled() )
+            {
+                logger.debug( "  Included: " + id );
+            }
+
+            try
+            {
+                classRealm.addURL( file.toURI().toURL() );
+            }
+            catch ( MalformedURLException e )
+            {
+                // Not going to happen
+                logger.error( e.getMessage(), e );
+            }
+        }
+
+        return includedIds;
+    }
+
 }