You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2016/02/19 01:13:47 UTC

[2/2] maven git commit: [MNG-5971] Imported dependencies should be available to inheritance processing

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

o Updated to support property inheritance and interpolation in
  'include' scope dependencies.


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

Branch: refs/heads/master
Commit: b30be5d6844693910a4861a644e4062021002d1f
Parents: 4f983e1
Author: Christian Schulte <sc...@apache.org>
Authored: Fri Feb 19 01:11:48 2016 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Fri Feb 19 01:13:01 2016 +0100

----------------------------------------------------------------------
 .../model/building/DefaultModelBuilder.java     | 83 +++++++++++++++++++-
 1 file changed, 79 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/b30be5d6/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 8872a5b..c57f836 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
@@ -384,6 +384,9 @@ public class DefaultModelBuilder
         problems.setSource( inputModel );
         checkPluginVersions( lineage, request, problems );
 
+        // include processing
+        includeDependencies( lineage, request, problems );
+
         // inheritance assembly
         assembleInheritance( lineage, request, problems );
 
@@ -616,9 +619,6 @@ public class DefaultModelBuilder
 
         problems.setSource( model );
 
-        this.importDependencyManagement( model, "include", request, problems, new HashSet<String>() );
-        this.importDependencies( model, "include", request, problems, new HashSet<String>() );
-
         modelValidator.validateRawModel( model, request, problems );
 
         if ( hasFatalErrors( problems ) )
@@ -729,6 +729,82 @@ public class DefaultModelBuilder
         }
     }
 
+    private void includeDependencies( final List<ModelData> lineage, final ModelBuildingRequest request,
+                                      final DefaultModelProblemCollector problems )
+    {
+        // Creates an intermediate model with property inheritance and interpolation.
+        final List<Model> intermediateLineage = new ArrayList<>( lineage.size() );
+
+        for ( int i = 0, s0 = lineage.size(); i < s0; i++ )
+        {
+            final Model model = lineage.get( i ).getModel();
+            intermediateLineage.add( model.clone() );
+        }
+
+        for ( int i = intermediateLineage.size() - 2; i >= 0; i-- )
+        {
+            final Model parent = intermediateLineage.get( i + 1 );
+            final Model child = intermediateLineage.get( i );
+
+            final Properties properties = new Properties();
+            properties.putAll( parent.getProperties() );
+            properties.putAll( child.getProperties() );
+            child.setProperties( properties );
+        }
+
+        for ( int i = 0, s0 = intermediateLineage.size(); i < s0; i++ )
+        {
+            final Model model = intermediateLineage.get( i );
+            this.interpolateModel( model, request, problems );
+        }
+
+        // Exchanges 'include' scope dependencies in the original lineage with possibly interpolated values.
+        for ( int i = 0, s0 = lineage.size(); i < s0; i++ )
+        {
+            final Model model = lineage.get( i ).getModel();
+
+            if ( model.getDependencyManagement() != null )
+            {
+                for ( int j = 0, s1 = model.getDependencyManagement().getDependencies().size(); j < s1; j++ )
+                {
+                    final Dependency dependency = model.getDependencyManagement().getDependencies().get( j );
+
+                    if ( "include".equals( dependency.getScope() ) && "pom".equals( dependency.getType() ) )
+                    {
+                        final Dependency interpolated =
+                            intermediateLineage.get( i ).getDependencyManagement().getDependencies().get( j );
+
+                        model.getDependencyManagement().getDependencies().set( j, interpolated );
+                    }
+                }
+            }
+
+            for ( int j = 0, s1 = model.getDependencies().size(); j < s1; j++ )
+            {
+                final Dependency dependency = model.getDependencies().get( j );
+
+                if ( "include".equals( dependency.getScope() ) && "pom".equals( dependency.getType() ) )
+                {
+                    final Dependency interpolated = intermediateLineage.get( i ).getDependencies().get( j );
+                    model.getDependencies().set( j, interpolated );
+                }
+            }
+        }
+
+        // Performs inclusion of dependencies in the original lineage.
+        for ( int i = 0, s0 = lineage.size(), superModelIdx = lineage.size() - 1; i < s0; i++ )
+        {
+            final Model model = lineage.get( i ).getModel();
+            this.importDependencyManagement( model, "include", request, problems, new HashSet<String>() );
+            this.importDependencies( model, "include", request, problems, new HashSet<String>() );
+
+            if ( i != superModelIdx )
+            {
+                modelValidator.validateRawModel( model, request, problems );
+            }
+        }
+    }
+
     private void assembleInheritance( List<ModelData> lineage, ModelBuildingRequest request,
                                       ModelProblemCollector problems )
     {
@@ -1187,7 +1263,6 @@ public class DefaultModelBuilder
                 }
                 message += imported;
                 problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( message ) );
-
                 continue;
             }