Author: bentmann
Date: Tue Sep  1 12:36:12 2009
New Revision: 810004

URL: http://svn.apache.org/viewvc?rev=810004&view=rev
Log:
o Properly reported cycles in the imported models

Modified:
    
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java

Modified: 
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java?rev=810004&r1=810003&r2=810004&view=diff
==============================================================================
--- 
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
 (original)
+++ 
maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
 Tue Sep  1 12:36:12 2009
@@ -22,8 +22,10 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 
@@ -109,6 +111,12 @@
     public ModelBuildingResult build( ModelBuildingRequest request )
         throws ModelBuildingException
     {
+        return build( request, new LinkedHashSet<String>() );
+    }
+
+    private ModelBuildingResult build( ModelBuildingRequest request, 
Collection<String> imports )
+        throws ModelBuildingException
+    {
         DefaultModelBuildingResult result = new DefaultModelBuildingResult();
 
         DefaultModelProblemCollector problems = new 
DefaultModelProblemCollector( null );
@@ -213,6 +221,13 @@
     public ModelBuildingResult build( ModelBuildingRequest request, 
ModelBuildingResult result )
         throws ModelBuildingException
     {
+        return build( request, result, new LinkedHashSet<String>() );
+    }
+
+    private ModelBuildingResult build( ModelBuildingRequest request, 
ModelBuildingResult result,
+                                       Collection<String> imports )
+        throws ModelBuildingException
+    {
         Model resultModel = result.getEffectiveModel();
 
         DefaultModelProblemCollector problems = new 
DefaultModelProblemCollector( result.getProblems() );
@@ -230,7 +245,7 @@
             lifecycleBindingsInjector.injectLifecycleBindings( resultModel, 
request, problems );
         }
 
-        importDependencyManagement( resultModel, request, problems );
+        importDependencyManagement( resultModel, request, problems, imports );
 
         dependencyManagementInjector.injectManagement( resultModel, request, 
problems );
 
@@ -544,7 +559,7 @@
     }
 
     private void importDependencyManagement( Model model, ModelBuildingRequest 
request,
-                                             DefaultModelProblemCollector 
problems )
+                                             DefaultModelProblemCollector 
problems, Collection<String> imports )
     {
         DependencyManagement depMngt = model.getDependencyManagement();
 
@@ -553,6 +568,10 @@
             return;
         }
 
+        String importing = model.getGroupId() + ':' + model.getArtifactId() + 
':' + model.getVersion();
+
+        imports.add( importing );
+
         ModelResolver modelResolver = request.getModelResolver();
 
         ModelBuildingRequest importRequest = null;
@@ -574,6 +593,20 @@
             String artifactId = dependency.getArtifactId();
             String version = dependency.getVersion();
 
+            String imported = groupId + ':' + artifactId + ':' + version;
+
+            if ( imports.contains( imported ) )
+            {
+                String message = "The dependencies of type=pom and with 
scope=import from a cycle: ";
+                for ( String modelId : imports )
+                {
+                    message += modelId + " -> ";
+                }
+                message += imported;
+                problems.addError( message );
+                continue;
+            }
+
             DependencyManagement importMngt =
                 getCache( request.getModelCache(), groupId, artifactId, 
version, ModelCacheTag.IMPORT );
 
@@ -610,7 +643,7 @@
                 ModelBuildingResult importResult;
                 try
                 {
-                    importResult = build( importRequest );
+                    importResult = build( importRequest, imports );
                 }
                 catch ( ModelBuildingException e )
                 {
@@ -640,6 +673,8 @@
             importMngts.add( importMngt );
         }
 
+        imports.remove( importing );
+
         dependencyManagementImporter.importManagement( model, importMngts, 
request, problems );
     }
 


Reply via email to