From a46507975719751d306eb9d90efe6c00030b94a6 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Mon, 29 Apr 2013 11:55:46 -0400 Subject: [PATCH] [MNG-5075] MavenProject.getParent throws undocumented ISE --- .../apache/maven/project/MavenProject.java | 20 +++++++++++-- .../maven/project/MavenProjectTest.java | 28 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) 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 c3f214f4c320..1493b7e9cd04 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; @@ -344,6 +346,10 @@ public Model getModel() 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 ) @@ -364,7 +370,11 @@ public MavenProject getParent() } 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 ) @@ -379,11 +389,15 @@ else if ( model.getParent() != null ) } 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 ) 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 60736a384d59..430093f72459 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.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 void testCloneWithActiveProfile() 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 {