Repository: maven
Updated Branches:
  refs/heads/master 8c3a2b717 -> 24e792188


[MNG-5971] Imported dependencies should be available to inheritance processing

o Updated to account for MNG-4052.


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/24e79218
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/24e79218
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/24e79218

Branch: refs/heads/master
Commit: 24e792188260ffd41278555c9452c2a91e2acb3d
Parents: 8c3a2b7
Author: Christian Schulte <schu...@apache.org>
Authored: Mon Feb 22 03:00:08 2016 +0100
Committer: Christian Schulte <schu...@apache.org>
Committed: Mon Feb 22 03:17:28 2016 +0100

----------------------------------------------------------------------
 .../model/building/DefaultModelBuilder.java     | 81 +++++++++++++-------
 .../building/DefaultModelBuildingResult.java    | 26 ++++++-
 .../model/building/ModelBuildingResult.java     | 12 +++
 3 files changed, 90 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/24e79218/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index 072be72..5265755 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -335,13 +335,13 @@ public class DefaultModelBuilder
             }
             else if ( currentData == resultData )
             { // First iteration - add initial id after version resolution.
-                currentData.setGroupId( currentData.getRawModel().getGroupId() 
== null ? parentData.getGroupId()
-                                                                               
       : currentData.getRawModel()
-                                                                               
           .getGroupId() );
+                currentData.setGroupId( currentData.getRawModel().getGroupId() 
== null
+                                            ? parentData.getGroupId()
+                                            : 
currentData.getRawModel().getGroupId() );
 
-                currentData.setVersion( currentData.getRawModel().getVersion() 
== null ? parentData.getVersion()
-                                                                               
       : currentData.getRawModel()
-                                                                               
           .getVersion() );
+                currentData.setVersion( currentData.getRawModel().getVersion() 
== null
+                                            ? parentData.getVersion()
+                                            : 
currentData.getRawModel().getVersion() );
 
                 currentData.setArtifactId( 
currentData.getRawModel().getArtifactId() );
                 parentIds.add( currentData.getId() );
@@ -374,27 +374,41 @@ public class DefaultModelBuilder
         problems.setSource( inputModel );
         checkPluginVersions( lineage, request, problems );
 
+        // [MNG-4052] import scope dependencies prefer to download pom rather 
than find it in the current project
         // [MNG-5971] Imported dependencies should be available to inheritance 
processing
-        processImports( lineage, request, problems );
+        //
+        // This first phase of model building is used for building models 
holding just enough information to map
+        // groupId:artifactId:version to pom files and to provide modules to 
build. For this, inheritance and
+        // interpolation needs to be performed. A temporary model is built in 
phase 1 applying inheritance and
+        // interpolation to fill in those values but is not returned. The rest 
of the model building takes place in
+        // phase 2.
+        final List<ModelData> intermediateLineage = new ArrayList<>( 
lineage.size() );
+        for ( final ModelData modelData : lineage )
+        {
+            final ModelData intermediateModel = new ModelData( 
modelData.getSource(), modelData.getModel().clone() );
+            intermediateModel.setRawModel( modelData.getRawModel().clone() );
+            intermediateModel.setActiveProfiles( modelData.getActiveProfiles() 
);
+            intermediateModel.setArtifactId( modelData.getArtifactId() );
+            intermediateModel.setGroupId( modelData.getGroupId() );
+            intermediateModel.setVersion( modelData.getVersion() );
+            intermediateLineage.add( intermediateModel );
+        }
 
         // inheritance assembly
-        assembleInheritance( lineage, request, problems );
+        assembleInheritance( intermediateLineage, request, problems );
+
+        Model intermediateModel = intermediateLineage.get( 0 ).getModel();
+        intermediateModel = interpolateModel( intermediateModel, request, 
problems );
 
         Model resultModel = resultData.getModel();
 
+        resultModel.setGroupId( intermediateModel.getGroupId() );
+        resultModel.setArtifactId( intermediateModel.getArtifactId() );
+        resultModel.setVersion( intermediateModel.getVersion() );
+
         problems.setSource( resultModel );
         problems.setRootModel( resultModel );
 
-        // model interpolation
-        resultModel = interpolateModel( resultModel, request, problems );
-        resultData.setModel( resultModel );
-
-        // url normalization
-        modelUrlNormalizer.normalize( resultModel, request );
-
-        // Now the fully interpolated model is available: reconfigure the 
resolver
-        configureResolver( request.getModelResolver(), resultModel, problems, 
true );
-
         resultData.setGroupId( resultModel.getGroupId() );
         resultData.setArtifactId( resultModel.getArtifactId() );
         resultData.setVersion( resultModel.getVersion() );
@@ -408,6 +422,7 @@ public class DefaultModelBuilder
             result.addModelId( modelId );
             result.setActivePomProfiles( modelId, 
currentData.getActiveProfiles() );
             result.setRawModel( modelId, currentData.getRawModel() );
+            result.setEffectiveModel( modelId, currentData.getModel() );
         }
 
         if ( !request.isTwoPhaseBuilding() )
@@ -422,13 +437,6 @@ public class DefaultModelBuilder
     public ModelBuildingResult build( ModelBuildingRequest request, 
ModelBuildingResult result )
         throws ModelBuildingException
     {
-        return build( request, result, new LinkedHashSet<String>(), new 
LinkedHashSet<String>() );
-    }
-
-    private ModelBuildingResult build( ModelBuildingRequest request, 
ModelBuildingResult result,
-                                       Collection<String> managementImports, 
Collection<String> dependencyImports )
-        throws ModelBuildingException
-    {
         // phase 2
         Model resultModel = result.getEffectiveModel();
 
@@ -436,6 +444,27 @@ public class DefaultModelBuilder
         problems.setSource( resultModel );
         problems.setRootModel( resultModel );
 
+        final List<ModelData> lineage = new ArrayList<>( 
result.getModelIds().size() );
+
+        for ( final String modelId : result.getModelIds() )
+        {
+            lineage.add( new ModelData( null, result.getEffectiveModel( 
modelId ) ) );
+        }
+
+        // [MNG-5971] Imported dependencies should be available to inheritance 
processing
+        processImports( lineage, request, problems );
+
+        // inheritance assembly
+        assembleInheritance( lineage, request, problems );
+
+        resultModel = interpolateModel( resultModel, request, problems );
+
+        // url normalization
+        modelUrlNormalizer.normalize( resultModel, request );
+
+        // Now the fully interpolated model is available: reconfigure the 
resolver
+        configureResolver( request.getModelResolver(), resultModel, problems, 
true );
+
         // model path translation
         modelPathTranslator.alignToBaseDirectory( resultModel, 
resultModel.getProjectDirectory(), request );
 
@@ -718,7 +747,7 @@ public class DefaultModelBuilder
     {
         // [MNG-5971] Imported dependencies should be available to inheritance 
processing
 
-        // Creates an intermediate model with property and repository 
inheritance.
+        // Creates an intermediate model with only property and repository 
inheritance.
         final List<Model> intermediateLineage = new ArrayList<>( 
lineage.size() );
 
         for ( int i = 0, s0 = lineage.size(); i < s0; i++ )

http://git-wip-us.apache.org/repos/asf/maven/blob/24e79218/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
index 7bf45b5..fe1c7ae 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java
@@ -39,11 +39,13 @@ class DefaultModelBuildingResult
 
     private Model effectiveModel;
 
-    private List<String> modelIds;
+    private final List<String> modelIds;
 
-    private Map<String, Model> rawModels;
+    private final Map<String, Model> rawModels;
 
-    private Map<String, List<Profile>> activePomProfiles;
+    private final Map<String, Model> effectiveModels;
+
+    private final Map<String, List<Profile>> activePomProfiles;
 
     private List<Profile> activeExternalProfiles;
 
@@ -56,6 +58,7 @@ class DefaultModelBuildingResult
         activePomProfiles = new HashMap<>();
         activeExternalProfiles = new ArrayList<>();
         problems = new ArrayList<>();
+        effectiveModels = new HashMap<>();
     }
 
     @Override
@@ -110,6 +113,23 @@ class DefaultModelBuildingResult
     }
 
     @Override
+    public Model getEffectiveModel( final String modelId )
+    {
+        return this.effectiveModels.get( modelId );
+    }
+
+    public DefaultModelBuildingResult setEffectiveModel( final String modelId, 
final Model model )
+    {
+        // Intentionally notNull because Super POM may not contain a modelId
+        Validate.notNull( modelId, "modelId must not be null" );
+        Validate.notNull( model, "model must not be null" );
+
+        this.effectiveModels.put( modelId, model );
+
+        return this;
+    }
+
+    @Override
     public List<Profile> getActivePomProfiles( String modelId )
     {
         return activePomProfiles.get( modelId );

http://git-wip-us.apache.org/repos/asf/maven/blob/24e79218/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
index 44b1295..f86b6ec 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java
@@ -69,6 +69,18 @@ public interface ModelBuildingResult
     Model getRawModel( String modelId );
 
     /**
+     * Gets the effective model for a given identifier. The model identifier 
should be from the collection obtained by
+     * {@link #getModelIds()}. As a special case, an empty string can be used 
as the identifier for the super POM.
+     *
+     * @param modelId The identifier of the desired effective model, must not 
be {@code null}.
+     *
+     * @return The effective model or {@code null} if the specified model id 
does not refer to a known model.
+     *
+     * @since 3.4
+     */
+    Model getEffectiveModel( String modelId );
+
+    /**
      * Gets the profiles from the specified model that were active during 
model building. The model identifier should be
      * from the collection obtained by {@link #getModelIds()}. As a special 
case, an empty string can be used as the
      * identifier for the super POM.

Reply via email to