Author: bentmann
Date: Sun Sep 13 15:09:33 2009
New Revision: 814330
URL: http://svn.apache.org/viewvc?rev=814330&view=rev
Log:
o Revised ModelProblem to provide more detailed information about problem
location
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
Sun Sep 13 15:09:33 2009
@@ -326,7 +326,7 @@
for ( ModelProblem problem : result.getProblems() )
{
- logger.warn( problem.getMessage() + " @ " +
problem.getSource() );
+ logger.warn( problem.getMessage() + " @ " +
problem.getLocation() );
}
logger.warn( "" );
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
Sun Sep 13 15:09:33 2009
@@ -356,7 +356,7 @@
{
ModelProblem problem =
new DefaultModelProblem( "Child module " +
moduleFile + " of " + pomFile
- + " does not exist",
ModelProblem.Severity.ERROR, model );
+ + " does not exist",
ModelProblem.Severity.ERROR, model, -1, -1, null );
result.getProblems().add( problem );
errors = true;
Modified:
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
(original)
+++
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java
Sun Sep 13 15:09:33 2009
@@ -320,7 +320,7 @@
writer.print( "] " );
writer.print( problem.getMessage() );
writer.print( " @ " );
- writer.println( problem.getSource() );
+ writer.println( problem.getLocation() );
}
}
writer.close();
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
Sun Sep 13 15:09:33 2009
@@ -123,7 +123,7 @@
ProfileActivationContext profileActivationContext =
getProfileActivationContext( request );
- problems.setSourceHint( "(external profiles)" );
+ problems.setSource( "(external profiles)" );
List<Profile> activeExternalProfiles =
profileSelector.getActiveProfiles( request.getProfiles(),
profileActivationContext, problems );
@@ -145,7 +145,7 @@
Model rawModel = tmpModel.clone();
currentData.setRawModel( rawModel );
- problems.setSourceHint( tmpModel );
+ problems.setSource( tmpModel );
modelNormalizer.mergeDuplicates( tmpModel, request, problems );
@@ -185,7 +185,7 @@
Model resultModel = resultData.getModel();
- problems.setSourceHint( resultModel );
+ problems.setSource( resultModel );
problems.setRootModel( resultModel );
resultModel = interpolateModel( resultModel, request, problems );
@@ -231,7 +231,7 @@
Model resultModel = result.getEffectiveModel();
DefaultModelProblemCollector problems = new
DefaultModelProblemCollector( result.getProblems() );
- problems.setSourceHint( resultModel );
+ problems.setSource( resultModel );
problems.setRootModel( resultModel );
modelPathTranslator.alignToBaseDirectory( resultModel,
resultModel.getProjectDirectory(), request );
@@ -284,6 +284,7 @@
}
}
+ problems.setSource( modelSource.getLocation() );
try
{
boolean strict = request.getValidationLevel() >=
ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0;
@@ -294,20 +295,19 @@
}
catch ( ModelParseException e )
{
- problems.add( new DefaultModelProblem( "Non-parseable POM " +
modelSource.getLocation() + ": "
- + e.getMessage(), ModelProblem.Severity.FATAL,
modelSource.getLocation(), e ) );
+ problems.addFatalError( "Non-parseable POM " +
modelSource.getLocation() + ": " + e.getMessage(),
+ e.getLineNumber(), e.getColumnNumber(), e
);
throw new ModelBuildingException( problems.getRootModelId(),
problems.getProblems() );
}
catch ( IOException e )
{
- problems.add( new DefaultModelProblem( "Non-readable POM " +
modelSource.getLocation() + ": "
- + e.getMessage(), ModelProblem.Severity.FATAL,
modelSource.getLocation(), e ) );
+ problems.addFatalError( "Non-parseable POM " +
modelSource.getLocation() + ": " + e.getMessage(), -1, -1, e );
throw new ModelBuildingException( problems.getRootModelId(),
problems.getProblems() );
}
model.setPomFile( pomFile );
- problems.setSourceHint( model );
+ problems.setSource( model );
modelValidator.validateRawModel( model, request, problems );
return model;
@@ -349,7 +349,7 @@
return;
}
- problems.setSourceHint( model );
+ problems.setSource( model );
List<Repository> repositories = model.getRepositories();
Collections.reverse( repositories );
@@ -518,7 +518,7 @@
DefaultModelProblemCollector
problems )
throws ModelBuildingException
{
- problems.setSourceHint( childModel );
+ problems.setSource( childModel );
Parent parent = childModel.getParent();
@@ -543,7 +543,7 @@
catch ( UnresolvableModelException e )
{
problems.addFatalError( "Non-resolvable parent POM "
- + ModelProblemUtils.toId( groupId, artifactId, version ) + ":
" + e.getMessage(), e );
+ + ModelProblemUtils.toId( groupId, artifactId, version ) + ":
" + e.getMessage(), -1, -1, e );
throw new ModelBuildingException( problems.getRootModelId(),
problems.getProblems() );
}
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
Sun Sep 13 15:09:33 2009
@@ -34,6 +34,12 @@
private final String source;
+ private final int lineNumber;
+
+ private final int columnNumber;
+
+ private final String modelId;
+
private final String message;
private final Exception exception;
@@ -41,40 +47,20 @@
private final Severity severity;
/**
- * Creates a new problem with the specified message.
- *
- * @param message The message describing the problem, may be {...@code
null}.
- * @param severity The severity level of the problem, may be {...@code
null} to default to {...@link Severity#ERROR}.
- * @param source The source of the problem, may be {...@code null}.
- */
- public DefaultModelProblem( String message, Severity severity, Model
source )
- {
- this( message, severity, source, null );
- }
-
- /**
* Creates a new problem with the specified message and exception.
*
* @param message The message describing the problem, may be {...@code
null}.
* @param severity The severity level of the problem, may be {...@code
null} to default to {...@link Severity#ERROR}.
* @param source The source of the problem, may be {...@code null}.
+ * @param lineNumber The one-based index of the line containing the error
or {...@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the
error or {...@code -1} if unknown.
* @param exception The exception that caused this problem, may be
{...@code null}.
*/
- public DefaultModelProblem( String message, Severity severity, Model
source, Exception exception )
+ public DefaultModelProblem( String message, Severity severity, Model
source, int lineNumber, int columnNumber,
+ Exception exception )
{
- this( message, severity, ModelProblemUtils.toSourceHint( source ),
exception );
- }
-
- /**
- * Creates a new problem with the specified message.
- *
- * @param message The message describing the problem, may be {...@code
null}.
- * @param severity The severity level of the problem, may be {...@code
null} to default to {...@link Severity#ERROR}.
- * @param source A hint about the source of the problem, may be {...@code
null}.
- */
- public DefaultModelProblem( String message, Severity severity, String
source )
- {
- this( message, severity, source, null );
+ this( message, severity, ModelProblemUtils.toPath( source ),
lineNumber, columnNumber,
+ ModelProblemUtils.toId( source ), exception );
}
/**
@@ -82,14 +68,21 @@
*
* @param message The message describing the problem, may be {...@code
null}.
* @param severity The severity level of the problem, may be {...@code
null} to default to {...@link Severity#ERROR}.
- * @param source A hint about the source of the problem, may be {...@code
null}.
+ * @param source A hint about the source of the problem like a file path,
may be {...@code null}.
+ * @param lineNumber The one-based index of the line containing the
problem or {...@code -1} if unknown.
+ * @param columnNumber The one-based index of the column containing the
problem or {...@code -1} if unknown.
+ * @param modelId The identifier of the model that exhibits the problem,
may be {...@code null}.
* @param exception The exception that caused this problem, may be
{...@code null}.
*/
- public DefaultModelProblem( String message, Severity severity, String
source, Exception exception )
+ public DefaultModelProblem( String message, Severity severity, String
source, int lineNumber, int columnNumber,
+ String modelId, Exception exception )
{
this.message = message;
this.severity = ( severity != null ) ? severity : Severity.ERROR;
this.source = ( source != null ) ? source : "";
+ this.lineNumber = lineNumber;
+ this.columnNumber = columnNumber;
+ this.modelId = ( modelId != null ) ? modelId : "";
this.exception = exception;
}
@@ -98,6 +91,57 @@
return source;
}
+ public int getLineNumber()
+ {
+ return lineNumber;
+ }
+
+ public int getColumnNumber()
+ {
+ return columnNumber;
+ }
+
+ public String getModelId()
+ {
+ return modelId;
+ }
+
+ public String getLocation()
+ {
+ StringBuilder buffer = new StringBuilder( 256 );
+
+ buffer.append( getModelId() );
+
+ if ( getSource().length() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( getSource() );
+ }
+
+ if ( getLineNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "line " ).append( getLineNumber() );
+ }
+
+ if ( getColumnNumber() > 0 )
+ {
+ if ( buffer.length() > 0 )
+ {
+ buffer.append( ", " );
+ }
+ buffer.append( "column " ).append( getColumnNumber() );
+ }
+
+ return buffer.toString();
+ }
+
public Exception getException()
{
return exception;
@@ -135,7 +179,8 @@
StringBuilder buffer = new StringBuilder( 128 );
buffer.append( "[" ).append( getSeverity() ).append( "] " );
- buffer.append( getSource() ).append( ": " ).append( getMessage() );
+ buffer.append( getMessage() );
+ buffer.append( " @ " ).append( getLocation() );
return buffer.toString();
}
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
Sun Sep 13 15:09:33 2009
@@ -39,7 +39,7 @@
private List<ModelProblem> problems;
- private String sourceHint;
+ private String source;
private Model sourceModel;
@@ -55,25 +55,30 @@
return problems;
}
- public void setSourceHint( String sourceHint )
+ public void setSource( String source )
{
- this.sourceHint = sourceHint;
+ this.source = source;
this.sourceModel = null;
}
- public void setSourceHint( Model sourceModel )
+ public void setSource( Model source )
{
- this.sourceModel = sourceModel;
- this.sourceHint = null;
+ this.sourceModel = source;
+ this.source = null;
}
- private String getSourceHint()
+ private String getSource()
{
- if ( sourceHint == null && sourceModel != null )
+ if ( source == null && sourceModel != null )
{
- sourceHint = ModelProblemUtils.toSourceHint( sourceModel );
+ source = ModelProblemUtils.toPath( sourceModel );
}
- return sourceHint;
+ return source;
+ }
+
+ private String getModelId()
+ {
+ return ModelProblemUtils.toId( sourceModel );
}
public void setRootModel( Model rootModel )
@@ -101,34 +106,34 @@
problems.addAll( problems );
}
- public void addFatalError( String message )
+ public void addFatalError( String message, int line, int column, Exception
cause )
{
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.FATAL, getSourceHint() ) );
- }
-
- public void addFatalError( String message, Exception cause )
- {
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.FATAL, getSourceHint(), cause ) );
+ add( message, ModelProblem.Severity.FATAL, line, column, cause );
}
public void addError( String message )
{
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.ERROR, getSourceHint() ) );
+ addError( message, null );
}
public void addError( String message, Exception cause )
{
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.ERROR, getSourceHint(), cause ) );
+ add( message, ModelProblem.Severity.ERROR, -1, -1, cause );
}
public void addWarning( String message )
{
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.WARNING, getSourceHint() ) );
+ addWarning( message, null );
}
public void addWarning( String message, Exception cause )
{
- problems.add( new DefaultModelProblem( message,
ModelProblem.Severity.WARNING, getSourceHint(), cause ) );
+ add( message, ModelProblem.Severity.WARNING, -1, -1, cause );
+ }
+
+ private void add( String message, ModelProblem.Severity severity, int
line, int column, Exception cause )
+ {
+ problems.add( new DefaultModelProblem( message, severity, getSource(),
line, column, getModelId(), cause ) );
}
}
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java
Sun Sep 13 15:09:33 2009
@@ -103,7 +103,7 @@
writer.print( "] " );
writer.print( problem.getMessage() );
writer.print( " @ " );
- writer.println( problem.getSource() );
+ writer.println( problem.getLocation() );
}
return buffer.toString();
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
Sun Sep 13 15:09:33 2009
@@ -44,13 +44,50 @@
/**
* Gets the hint about the source of the problem. While the syntax of this
hint is unspecified and depends on the
* creator of the problem, the general expectation is that the hint
provides sufficient information to the user to
- * track the problem back to its origin.
+ * track the problem back to its origin. A concrete example for such a
source hint can be the file path or URL from
+ * which a POM was read.
*
- * @return The hint about the source of the problem, never {...@code null}.
+ * @return The hint about the source of the problem or an empty string if
unknown, never {...@code null}.
*/
String getSource();
/**
+ * Gets the one-based index of the line containing the problem. The line
number should refer to some text file that
+ * is given by {...@link #getSource()}.
+ *
+ * @return The one-based index of the line containing the problem or a
non-positive value if unknown.
+ */
+ int getLineNumber();
+
+ /**
+ * Gets the one-based index of the column containing the problem. The
column number should refer to some text file
+ * that is given by {...@link #getSource()}.
+ *
+ * @return The one-based index of the column containing the problem or
non-positive value if unknown.
+ */
+ int getColumnNumber();
+
+ /**
+ * Gets the identifier of the model from which the problem originated.
While the general form of this identifier is
+ * <code>groupId:artifactId:version</code> the returned identifier need
not be complete. The identifier is derived
+ * from the information that is available at the point the problem occurs
and as such merely serves as a best effort
+ * to provide information to the user to track the problem back to its
origin.
+ *
+ * @return The identifier of the model from which the problem originated
or an empty string if unknown, never
+ * {...@code null}.
+ */
+ String getModelId();
+
+ /**
+ * Gets the location of the problem. The location is a user-friendly
combination of the values from
+ * {...@link #getModelId()}, {...@link #getSource()}, {...@link
#getLineNumber()} and {...@link #getColumnNumber()}. The exact
+ * syntax of the returned value is undefined.
+ *
+ * @return The location of the problem, never {...@code null}.
+ */
+ String getLocation();
+
+ /**
* Gets the exception that caused this problem (if any).
*
* @return The exception that caused this problem or {...@code null} if
not applicable.
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java
Sun Sep 13 15:09:33 2009
@@ -20,7 +20,11 @@
*/
/**
- * Collects problems that are encountered during model building.
+ * Collects problems that are encountered during model building. The primary
purpose of this component is to account for
+ * the fact that the problem reporter has/should not have information about
the calling context and hence cannot provide
+ * an expressive source hint for the model problem. Instead, the source hint
is configured by the model builder before
+ * it delegates to other components that potentially encounter problems. Then,
the problem reporter can focus on
+ * providing a simple error message, leaving the donkey work of creating a
nice model problem to this component.
*
* @author Benjamin Bentmann
*/
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
URL:
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java?rev=814330&r1=814329&r2=814330&view=diff
==============================================================================
---
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
(original)
+++
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
Sun Sep 13 15:09:33 2009
@@ -57,6 +57,23 @@
return buffer.toString();
}
+ public static String toPath( Model model )
+ {
+ String path = "";
+
+ if ( model != null )
+ {
+ File pomFile = model.getPomFile();
+
+ if ( pomFile != null )
+ {
+ path = pomFile.getAbsolutePath();
+ }
+ }
+
+ return path;
+ }
+
public static String toId( Model model )
{
if ( model == null )