[FIXES MANTTASKS-217]

git-svn-id: https://svn.apache.org/repos/asf/maven/ant-tasks/trunk@1085345 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java b/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
index b9041b8..2a8bef4 100644
--- a/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
+++ b/src/main/java/org/apache/maven/artifact/ant/AbstractArtifactTask.java
@@ -28,6 +28,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -533,7 +534,14 @@
     {
         Pom pom = new Pom();
 
-        pom.setMavenProject( createMinimalProject( localRepository ) );
+        MavenProject minimalProject = createMinimalProject( localRepository );
+        // we nulled out these fields to allow inheritance when creating poms, but the dummy
+        // needs to be a valid pom, so set them back to something that's OK to resolve
+        minimalProject.setGroupId( "org.apache.maven" );
+        minimalProject.setArtifactId( "super-pom" );
+        minimalProject.setVersion( "2.0" );
+        minimalProject.setPackaging( "pom" );
+        pom.setMavenProject( minimalProject );
 
         return pom;
     }
@@ -553,7 +561,13 @@
 
         try
         {
-            return projectBuilder.buildStandaloneSuperProject( builderConfig );
+            MavenProject mavenProject = projectBuilder.buildStandaloneSuperProject(builderConfig);
+            // if we don't null out these fields then the pom that will be created is at the super-pom's
+            // GAV coordinates and we will not be able to inherit partial GAV coordinates from a parent GAV.
+            mavenProject.setGroupId(null);
+            mavenProject.setArtifactId(null);
+            mavenProject.setVersion(null);
+            return mavenProject;
         }
         catch ( ProjectBuildingException e )
         {
@@ -655,6 +669,25 @@
         return pomRefId;
     }
 
+    /**
+     * Try to get all the poms with id's which have been added to the ANT project
+     * @return
+     */
+    public List/*<Pom>*/ getAntReactorPoms()
+    {
+        List result = new ArrayList();
+        Iterator i = getProject().getReferences().values().iterator();
+        while ( i.hasNext() )
+        {
+            Object ref = i.next();
+            if ( ref instanceof Pom )
+            {
+                result.add( (Pom)ref );
+            }
+        }
+        return result;
+    }
+
     public void setPomRefId( String pomRefId )
     {
         this.pomRefId = pomRefId;
diff --git a/src/main/java/org/apache/maven/artifact/ant/Pom.java b/src/main/java/org/apache/maven/artifact/ant/Pom.java
index 8abfd76..7f7e862 100644
--- a/src/main/java/org/apache/maven/artifact/ant/Pom.java
+++ b/src/main/java/org/apache/maven/artifact/ant/Pom.java
@@ -44,10 +44,13 @@
 import org.apache.maven.project.MavenProjectHelper;
 import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
+import org.apache.maven.project.injection.ModelDefaultsInjector;
 import org.apache.maven.project.interpolation.ModelInterpolationException;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.PropertyHelper;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -222,6 +225,44 @@
         {
             this.getPomFromAntProject( refid );
         }
+        else if ( mavenProject != null )
+        {
+            addAntRepositoriesToProfileManager();
+            ProjectBuilderConfiguration builderConfig = this.createProjectBuilderConfig( localRepository );
+            try
+            {
+                builder.calculateConcreteState( mavenProject, builderConfig, false );
+            }
+            catch ( ModelInterpolationException mie )
+            {
+                throw new BuildException( "Unable to interpolate POM " + file.getName() + ": " + mie.getMessage(), mie );
+            }
+
+        }
+        if ( mavenProject != null && mavenProject.getModel().getParent() != null )
+        {
+            String parentGroupId = mavenProject.getModel().getParent().getGroupId();
+            String parentArtifactId = mavenProject.getModel().getParent().getArtifactId();
+            String parentVersion = mavenProject.getModel().getParent().getVersion();
+            Iterator i = getAntReactorPoms().iterator();
+            while ( i.hasNext() )
+            {
+                Pom pom = (Pom)i.next();
+                if ( StringUtils.equals( parentGroupId, pom.getGroupId() )
+                        && StringUtils.equals( parentArtifactId, pom.getArtifactId() )
+                        && StringUtils.equals( parentVersion, pom.getVersion() ) )
+                {
+                    pom.initialiseMavenProject( builder, localRepository );
+                    mavenProject.setParent( pom.getMavenProject() );
+                    ModelInheritanceAssembler modelInheritanceAssembler =
+                            (ModelInheritanceAssembler) lookup( ModelInheritanceAssembler. ROLE );
+                    modelInheritanceAssembler.assembleModelInheritance( mavenProject.getModel(), pom.getModel() );
+                    break;
+                }
+            }
+        }
+        ModelDefaultsInjector modelDefaultsInjector = (ModelDefaultsInjector) lookup( ModelDefaultsInjector.ROLE );
+        modelDefaultsInjector.injectDefaults(mavenProject.getModel());
     }
 
     protected MavenProject getMavenProject()
@@ -551,6 +592,11 @@
 
     public void addConfiguredDependencyManagement( DependencyManagement dependencyManagement )
     {
+        if ( getMavenProject().getDependencyManagement() == null )
+        {
+            // is is a bit disappointing that we have to access the encapsulated model to fix the NPE
+            getMavenProject().getModel().setDependencyManagement(new DependencyManagement());
+        }
         getMavenProject().getDependencyManagement().setDependencies( dependencyManagement.getDependencies() );
     }