You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2014/01/05 20:17:38 UTC

git commit: [MNG-5075] MavenProject.getParent throws undocumented ISE

Updated Branches:
  refs/heads/master 93d07bdf9 -> 2eb419ed9


[MNG-5075] MavenProject.getParent throws undocumented ISE

Submitted by Jesse Glick


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

Branch: refs/heads/master
Commit: 2eb419ed95ccfdd80c5755890e649a49274cceca
Parents: 93d07bd
Author: Jesse Glick <jg...@cloudbees.com>
Authored: Mon Apr 29 11:55:46 2013 -0400
Committer: Stephen Connolly <st...@gmail.com>
Committed: Sun Jan 5 19:17:03 2014 +0000

----------------------------------------------------------------------
 .../org/apache/maven/project/MavenProject.java  | 20 +++++++++++---
 .../apache/maven/project/MavenProjectTest.java  | 28 ++++++++++++++++++++
 2 files changed, 45 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/2eb419ed/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index d6f308f..91038b3 100644
--- a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -102,6 +102,8 @@ public class MavenProject
 
     public static final String EMPTY_PROJECT_VERSION = "0";
 
+    private static final MavenProject ERROR_BUILDING_PARENT = new MavenProject();
+
     private Model model;
 
     private MavenProject parent;
@@ -343,6 +345,10 @@ public class MavenProject
         return model;
     }
 
+    /**
+     * Returns the project corresponding to a declared parent.
+     * @return the parent, or null if no parent is declared or there was an error building it
+     */
     public MavenProject getParent()
     {
         if ( parent == null )
@@ -363,7 +369,11 @@ public class MavenProject
                 }
                 catch ( ProjectBuildingException e )
                 {
-                    throw new IllegalStateException( "Failed to build parent project for " + getId(), e );
+                    if ( logger != null )
+                    {
+                        logger.error( "Failed to build parent project for " + getId(), e );
+                    }
+                    parent = ERROR_BUILDING_PARENT;
                 }
             }
             else if ( model.getParent() != null )
@@ -378,11 +388,15 @@ public class MavenProject
                 }
                 catch ( ProjectBuildingException e )
                 {
-                    throw new IllegalStateException( "Failed to build parent project for " + getId(), e );
+                    if ( logger != null )
+                    {
+                        logger.error( "Failed to build parent project for " + getId(), e );
+                    }
+                    parent = ERROR_BUILDING_PARENT;
                 }
             }
         }
-        return parent;
+        return parent == ERROR_BUILDING_PARENT ? null : parent;
     }
 
     public void setParent( MavenProject parent )

http://git-wip-us.apache.org/repos/asf/maven/blob/2eb419ed/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
----------------------------------------------------------------------
diff --git a/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java b/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
index 60736a3..430093f 100644
--- a/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java
@@ -23,7 +23,9 @@ import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.maven.lifecycle.internal.stub.LoggerStub;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Parent;
@@ -177,6 +179,32 @@ public class MavenProjectTest
                        activeProfilesClone );
     }
 
+    public void testInvalidParent() throws Exception
+    {
+        Parent parent = new Parent();
+        parent.setGroupId( "test-group" );
+        parent.setArtifactId( "parent-artifact" );
+        parent.setVersion( "1.0" );
+        Model model = new Model();
+        model.setParent( parent );
+        model.setArtifactId( "child-artifact" );
+        final AtomicInteger logged = new AtomicInteger();
+        class L extends LoggerStub
+        {
+            @Override
+            public void error( String s, Throwable throwable )
+            {
+                logged.incrementAndGet();
+            }
+        }
+        MavenProject project = new MavenProject( repositorySystem, projectBuilder, newBuildingRequest(), new L() );
+        project.setModel( model );
+        assertNull( project.getParent() );
+        assertEquals( 1, logged.get() );
+        assertNull( project.getParent() );
+        assertEquals( 1, logged.get() );
+    }
+
     public void testUndefinedOutputDirectory()
         throws Exception
     {