Author: mkleint Date: Thu Jul 5 13:11:15 2012 New Revision: 1357589 URL: http://svn.apache.org/viewvc?rev=1357589&view=rev Log: MNG-5306 : introduce ModelProblemCollectorRequest and a new ModelProblem property - version which denotes on which validation level the error/warning applies. Additionally move the logic on failing the ModelBuilding from ModelProblemCollector to ModelBuilder's protected method to allow overriding. Default maven behaviour should stay the same.
Added: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java (with props) maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java (with props) Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.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/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/interpolation/AbstractStringBasedModelInterpolator.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java (original) +++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java Thu Jul 5 13:11:15 2012 @@ -36,11 +36,14 @@ import org.codehaus.plexus.component.rep import org.codehaus.plexus.logging.Logger; import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; @Deprecated public class DefaultProfileManager @@ -195,14 +198,13 @@ public class DefaultProfileManager profileSelector.getActiveProfiles( profilesById.values(), context, new ModelProblemCollector() { - public void add( Severity severity, String message, InputLocation location, Exception cause ) + public void add( ModelProblemCollectorRequest req ) { - if ( !ModelProblem.Severity.WARNING.equals( severity ) ) + if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) ) { - errors.add( new ProfileActivationException( message, cause ) ); + errors.add( new ProfileActivationException( req.getMessage(), req.getException() ) ); } } - } ); if ( !errors.isEmpty() ) Modified: maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java (original) +++ maven/maven-3/trunk/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java Thu Jul 5 13:11:15 2012 @@ -19,6 +19,7 @@ package org.apache.maven.project.validat * under the License. */ +import java.util.List; import org.apache.maven.model.InputLocation; import org.apache.maven.model.Model; import org.apache.maven.model.building.DefaultModelBuildingRequest; @@ -26,6 +27,8 @@ import org.apache.maven.model.building.M import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; @@ -66,14 +69,12 @@ public class DefaultModelValidator this.result = result; } - public void add( Severity severity, String message, InputLocation location, Exception cause ) + public void add( ModelProblemCollectorRequest req ) { - if ( !ModelProblem.Severity.WARNING.equals( severity ) ) + if ( !ModelProblem.Severity.WARNING.equals( req.getSeverity() ) ) { - result.addMessage( message ); + result.addMessage( req.getMessage() ); } } - } - } Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java (original) +++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java Thu Jul 5 13:11:15 2012 @@ -37,6 +37,8 @@ import org.apache.maven.model.PluginMana import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.model.merge.MavenModelMerger; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; @@ -64,7 +66,9 @@ public class DefaultLifecycleBindingsInj if ( defaultPlugins == null ) { - problems.add( Severity.ERROR, "Unknown packaging: " + packaging, model.getLocation( "packaging" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Unknown packaging: " + packaging ) + .setLocation( model.getLocation( "packaging" ))); } else if ( !defaultPlugins.isEmpty() ) { Modified: maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java (original) +++ maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java Thu Jul 5 13:11:15 2012 @@ -26,6 +26,8 @@ import org.apache.maven.model.Model; import org.apache.maven.model.building.AbstractModelBuildingListener; import org.apache.maven.model.building.ModelBuildingEvent; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.plugin.version.PluginVersionResolutionException; @@ -95,7 +97,9 @@ class DefaultModelBuildingListener } catch ( Exception e ) { - event.getProblems().add( Severity.ERROR, "Invalid plugin repository: " + e.getMessage(), null, e ); + event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Invalid plugin repository: " + e.getMessage() ) + .setException( e )); } project.setPluginArtifactRepositories( pluginRepositories ); @@ -111,11 +115,15 @@ class DefaultModelBuildingListener } catch ( PluginResolutionException e ) { - event.getProblems().add( Severity.ERROR, "Unresolveable build extension: " + e.getMessage(), null, e ); + event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Unresolveable build extension: " + e.getMessage()) + .setException( e )); } catch ( PluginVersionResolutionException e ) { - event.getProblems().add( Severity.ERROR, "Unresolveable build extension: " + e.getMessage(), null, e ); + event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Unresolveable build extension: " + e.getMessage() ) + .setException( e )); } projectBuildingHelper.selectProjectRealm( project ); @@ -130,7 +138,9 @@ class DefaultModelBuildingListener } catch ( Exception e ) { - event.getProblems().add( Severity.ERROR, "Invalid artifact repository: " + e.getMessage(), null, e ); + event.getProblems().add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Invalid artifact repository: " + e.getMessage() ) + .setException( e )); } project.setRemoteArtifactRepositories( remoteRepositories ); } 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -442,7 +442,7 @@ public class DefaultProjectBuilder { ModelProblem problem = new DefaultModelProblem( "Child module " + moduleFile + " of " + pomFile - + " does not exist", ModelProblem.Severity.ERROR, model, -1, -1, null ); + + " does not exist", ModelProblem.Severity.ERROR, ModelProblem.Version.BASE, model, -1, -1, null ); result.getProblems().add( problem ); noErrors = false; @@ -478,7 +478,7 @@ public class DefaultProjectBuilder ModelProblem problem = new DefaultModelProblem( "Child module " + moduleFile + " of " + pomFile - + " forms aggregation cycle " + buffer, ModelProblem.Severity.ERROR, model, -1, -1, + + " forms aggregation cycle " + buffer, ModelProblem.Severity.ERROR, ModelProblem.Version.BASE, model, -1, -1, null ); result.getProblems().add( problem ); @@ -630,7 +630,7 @@ public class DefaultProjectBuilder ModelProblem problem = new DefaultModelProblem( "Detected profiles.xml alongside " + modelId + ", this file is no longer supported and was ignored" + ", please use the settings.xml instead", - ModelProblem.Severity.WARNING, model, -1, -1, null ); + ModelProblem.Severity.WARNING, ModelProblem.Version.V30, model, -1, -1, null ); result.getProblems().add( problem ); } } 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -42,6 +42,7 @@ import org.apache.maven.model.PluginMana import org.apache.maven.model.Profile; import org.apache.maven.model.Repository; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; import org.apache.maven.model.composition.DependencyManagementImporter; import org.apache.maven.model.inheritance.InheritanceAssembler; import org.apache.maven.model.interpolation.ModelInterpolator; @@ -322,7 +323,7 @@ public class DefaultModelBuilder } message += currentData.getId(); - problems.add( ModelProblem.Severity.FATAL, message, null, null ); + problems.add( new ModelProblemCollectorRequest(ModelProblem.Severity.FATAL, ModelProblem.Version.BASE).setMessage(message)); throw problems.newModelBuildingException(); } } @@ -414,7 +415,7 @@ public class DefaultModelBuilder modelValidator.validateEffectiveModel( resultModel, request, problems ); - if ( problems.hasErrors() ) + if ( hasModelErrors(problems) ) { throw problems.newModelBuildingException(); } @@ -476,13 +477,15 @@ public class DefaultModelBuilder if ( pomFile != null ) { - problems.add( Severity.ERROR, "Malformed POM " + modelSource.getLocation() + ": " + e.getMessage(), - null, e ); + problems.add( new ModelProblemCollectorRequest(Severity.ERROR, Version.V20) + .setMessage("Malformed POM " + modelSource.getLocation() + ": " + e.getMessage()) + .setException(e )); } else { - problems.add( Severity.WARNING, "Malformed POM " + modelSource.getLocation() + ": " - + e.getMessage(), null, e ); + problems.add( new ModelProblemCollectorRequest(Severity.WARNING, Version.V20) + .setMessage("Malformed POM " + modelSource.getLocation() + ": " + e.getMessage()) + .setException(e)); } } @@ -494,8 +497,9 @@ public class DefaultModelBuilder } catch ( ModelParseException e ) { - problems.add( Severity.FATAL, "Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage(), - null, e ); + problems.add( new ModelProblemCollectorRequest(Severity.FATAL, Version.BASE) + .setMessage("Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage()) + .setException(e)); throw problems.newModelBuildingException(); } catch ( IOException e ) @@ -513,7 +517,9 @@ public class DefaultModelBuilder msg = e.getClass().getSimpleName(); } } - problems.add( Severity.FATAL, "Non-readable POM " + modelSource.getLocation() + ": " + msg, null, e ); + problems.add( new ModelProblemCollectorRequest(Severity.FATAL, Version.BASE) + .setMessage("Non-readable POM " + modelSource.getLocation() + ": " + msg) + .setException(e )); throw problems.newModelBuildingException(); } @@ -522,7 +528,7 @@ public class DefaultModelBuilder problems.setSource( model ); modelValidator.validateRawModel( model, request, problems ); - if ( problems.hasFatalErrors() ) + if ( hasFatalErrors(problems) ) { throw problems.newModelBuildingException(); } @@ -562,8 +568,10 @@ public class DefaultModelBuilder } catch ( InvalidRepositoryException e ) { - problems.add( Severity.ERROR, "Invalid repository " + repository.getId() + ": " + e.getMessage(), - repository.getLocation( "" ), e ); + problems.add( new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE) + .setMessage( "Invalid repository " + repository.getId() + ": " + e.getMessage()) + .setLocation(repository.getLocation( "" )) + .setException(e) ); } } } @@ -615,8 +623,9 @@ public class DefaultModelBuilder if ( versions.get( key ) == null && managedVersions.get( key ) == null ) { InputLocation location = plugins.get( key ).getLocation( "" ); - problems.add( Severity.WARNING, "'build.plugins.plugin.version' for " + key + " is missing.", location, - null ); + problems.add( new ModelProblemCollectorRequest(Severity.WARNING, Version.V20) + .setMessage( "'build.plugins.plugin.version' for " + key + " is missing.") + .setLocation(location)); } } } @@ -691,9 +700,10 @@ public class DefaultModelBuilder if ( !"pom".equals( parentModel.getPackaging() ) ) { - problems.add( Severity.ERROR, "Invalid packaging for parent POM " - + ModelProblemUtils.toSourceHint( parentModel ) + ", must be \"pom\" but is \"" - + parentModel.getPackaging() + "\"", parentModel.getLocation( "packaging" ), null ); + problems.add( new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE) + .setMessage( "Invalid packaging for parent POM " + ModelProblemUtils.toSourceHint( parentModel ) + ", must be \"pom\" but is \"" + + parentModel.getPackaging() + "\"") + .setLocation(parentModel.getLocation( "packaging" ))); } } else @@ -745,7 +755,9 @@ public class DefaultModelBuilder buffer.append( ", please verify your project structure" ); problems.setSource( childModel ); - problems.add( Severity.WARNING, buffer.toString(), parent.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.BASE) + .setMessage( buffer.toString()) + .setLocation( parent.getLocation( "" ))); return null; } if ( version == null || !version.equals( parent.getVersion() ) ) @@ -837,7 +849,10 @@ public class DefaultModelBuilder } } - problems.add( Severity.FATAL, buffer.toString(), parent.getLocation( "" ), e ); + problems.add( new ModelProblemCollectorRequest(Severity.FATAL, Version.BASE) + .setMessage( buffer.toString()) + .setLocation(parent.getLocation( "" )) + .setException(e)); throw problems.newModelBuildingException(); } @@ -903,20 +918,23 @@ public class DefaultModelBuilder if ( groupId == null || groupId.length() <= 0 ) { - problems.add( Severity.ERROR, "'dependencyManagement.dependencies.dependency.groupId' for " - + dependency.getManagementKey() + " is missing.", dependency.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest(Severity.ERROR, Version.BASE) + .setMessage( "'dependencyManagement.dependencies.dependency.groupId' for " + dependency.getManagementKey() + " is missing.") + .setLocation( dependency.getLocation( "" ))); continue; } if ( artifactId == null || artifactId.length() <= 0 ) { - problems.add( Severity.ERROR, "'dependencyManagement.dependencies.dependency.artifactId' for " - + dependency.getManagementKey() + " is missing.", dependency.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "'dependencyManagement.dependencies.dependency.artifactId' for " + dependency.getManagementKey() + " is missing.") + .setLocation( dependency.getLocation( "" ))); continue; } if ( version == null || version.length() <= 0 ) { - problems.add( Severity.ERROR, "'dependencyManagement.dependencies.dependency.version' for " - + dependency.getManagementKey() + " is missing.", dependency.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "'dependencyManagement.dependencies.dependency.version' for " + dependency.getManagementKey() + " is missing.") + .setLocation( dependency.getLocation( "" ))); continue; } @@ -930,7 +948,7 @@ public class DefaultModelBuilder message += modelId + " -> "; } message += imported; - problems.add( Severity.ERROR, message, null, null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( message )); continue; } @@ -962,7 +980,10 @@ public class DefaultModelBuilder } buffer.append( ": " ).append( e.getMessage() ); - problems.add( Severity.ERROR, buffer.toString(), dependency.getLocation( "" ), e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ) + .setMessage( buffer.toString() ) + .setLocation( dependency.getLocation( "" )) + .setException( e )); continue; } @@ -1061,4 +1082,25 @@ public class DefaultModelBuilder && ( version == null || message.contains( version ) ); } + protected boolean hasModelErrors(ModelProblemCollectorExt problems) { + if (problems instanceof DefaultModelProblemCollector) { + return ((DefaultModelProblemCollector)problems).hasErrors(); + } else { + //the default execution path only knows the DefaultModelProblemCollector, + // only reason it's not in signature is because it's package private + throw new IllegalStateException(); + } + + } + + protected boolean hasFatalErrors(ModelProblemCollectorExt problems) { + if (problems instanceof DefaultModelProblemCollector) { + return ((DefaultModelProblemCollector)problems).hasFatalErrors(); + } else { + //the default execution path only knows the DefaultModelProblemCollector, + // only reason it's not in signature is because it's package private + throw new IllegalStateException(); + } + } + } 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -46,6 +46,9 @@ public class DefaultModelProblem private final Severity severity; + private final Version version; + + /** * Creates a new problem with the specified message and exception. * @@ -57,10 +60,11 @@ public class DefaultModelProblem * @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, int lineNumber, int columnNumber, + //mkleint: does this need to be public? + public DefaultModelProblem( String message, Severity severity, Version version, Model source, int lineNumber, int columnNumber, Exception exception ) { - this( message, severity, ModelProblemUtils.toPath( source ), lineNumber, columnNumber, + this( message, severity, version, ModelProblemUtils.toPath( source ), lineNumber, columnNumber, ModelProblemUtils.toId( source ), exception ); } @@ -70,13 +74,15 @@ public class DefaultModelProblem * @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 ModelProblem.Severity#ERROR}. + * @param version The version since the problem is relevant * @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, int lineNumber, int columnNumber, + //mkleint: does this need to be public? + public DefaultModelProblem( String message, Severity severity, Version version, String source, int lineNumber, int columnNumber, String modelId, Exception exception ) { this.message = message; @@ -86,6 +92,7 @@ public class DefaultModelProblem this.columnNumber = columnNumber; this.modelId = ( modelId != null ) ? modelId : ""; this.exception = exception; + this.version = version; } public String getSource() @@ -139,6 +146,11 @@ public class DefaultModelProblem return severity; } + public Version getVersion() { + return version; + } + + @Override public String 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.maven.model.InputLocation; import org.apache.maven.model.Model; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; import org.apache.maven.model.io.ModelParseException; /** @@ -38,7 +39,7 @@ import org.apache.maven.model.io.ModelPa * @author Benjamin Bentmann */ class DefaultModelProblemCollector - implements ModelProblemCollector + implements ModelProblemCollectorExt { private final ModelBuildingResult result; @@ -142,21 +143,21 @@ class DefaultModelProblemCollector } } - public void add( Severity severity, String message, InputLocation location, Exception cause ) + public void add( ModelProblemCollectorRequest req ) { int line = -1; int column = -1; String source = null; String modelId = null; - if ( location != null ) + if ( req.getLocation() != null ) { - line = location.getLineNumber(); - column = location.getColumnNumber(); - if ( location.getSource() != null ) + line = req.getLocation().getLineNumber(); + column = req.getLocation().getColumnNumber(); + if ( req.getLocation().getSource() != null ) { - modelId = location.getSource().getModelId(); - source = location.getSource().getLocation(); + modelId = req.getLocation().getSource().getModelId(); + source = req.getLocation().getSource().getLocation(); } } @@ -166,14 +167,14 @@ class DefaultModelProblemCollector source = getSource(); } - if ( line <= 0 && column <= 0 && cause instanceof ModelParseException ) + if ( line <= 0 && column <= 0 && req.getException() instanceof ModelParseException ) { - ModelParseException e = (ModelParseException) cause; + ModelParseException e = (ModelParseException) req.getException(); line = e.getLineNumber(); column = e.getColumnNumber(); } - ModelProblem problem = new DefaultModelProblem( message, severity, source, line, column, modelId, cause ); + ModelProblem problem = new DefaultModelProblem( req.getMessage(), req.getSeverity(), req.getVersion(), source, line, column, modelId, req.getException() ); add( problem ); } 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -41,6 +41,14 @@ public interface ModelProblem } + enum Version { + //based on ModeBuildingResult.validationLevel + BASE, + V20, + V30, + V31 + } + /** * 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 @@ -99,4 +107,10 @@ public interface ModelProblem */ Severity getSeverity(); + /** + * Gets the applicable maven version/validation level of this problem + * @return The version, never {@code null}. + */ + Version getVersion(); + } 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=1357589&r1=1357588&r2=1357589&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 Thu Jul 5 13:11:15 2012 @@ -19,6 +19,7 @@ package org.apache.maven.model.building; * under the License. */ +import java.util.List; import org.apache.maven.model.InputLocation; /** @@ -36,11 +37,8 @@ public interface ModelProblemCollector /** * Adds the specified problem. * - * @param severity The severity of the problem, must not be {@code null}. - * @param message The detail message of the problem, may be {@code null}. - * @param location The location of the problem, may be {@code null}. - * @param cause The cause of the problem, may be {@code null}. + * @param req must not be null */ - void add( ModelProblem.Severity severity, String message, InputLocation location, Exception cause ); + void add( ModelProblemCollectorRequest req ); } Added: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java?rev=1357589&view=auto ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java (added) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java Thu Jul 5 13:11:15 2012 @@ -0,0 +1,37 @@ +package org.apache.maven.model.building; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.List; + +/** + * Extends the ModelproblemCollector by the capacity of returning the collected problems. + * @author Milos Kleint + */ +public interface ModelProblemCollectorExt extends ModelProblemCollector +{ + + /** + * The collected problems. + * @return a list of model problems encountered, never {@code null} + */ + List<ModelProblem> getProblems(); + +} Propchange: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java?rev=1357589&view=auto ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java (added) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java Thu Jul 5 13:11:15 2012 @@ -0,0 +1,97 @@ +/* + * Copyright 2012 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.maven.model.building; + +import org.apache.maven.model.InputLocation; +import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; + +/** + * Class to wrap request parameters to ModelProblemCollector.addProblem + * + * @author mkleint + */ +public final class ModelProblemCollectorRequest +{ + + private final ModelProblem.Severity severity; + private final ModelProblem.Version version; + private Exception exception; + private String message; + private InputLocation location; + + /** + * Create a new request with mandatory parameters. + * @param severity + * @param version + */ + public ModelProblemCollectorRequest(Severity severity, Version version) + { + this.severity = severity; + this.version = version; + if (severity == null) + { + throw new IllegalStateException("No severity declared"); + } + if (version == null) + { + throw new IllegalStateException("No version declared."); + } + } + + public Severity getSeverity() + { + return severity; + } + + public Version getVersion() + { + return version; + } + + public Exception getException() + { + return exception; + } + + public ModelProblemCollectorRequest setException(Exception exception) + { + this.exception = exception; + return this; + } + + public String getMessage() + { + return message; + } + + public ModelProblemCollectorRequest setMessage(String message) + { + this.message = message; + return this; + } + + public InputLocation getLocation() + { + return location; + } + + public ModelProblemCollectorRequest setLocation(InputLocation location) + { + this.location = location; + return this; + } +} Propchange: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java Thu Jul 5 13:11:15 2012 @@ -45,6 +45,9 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Properties; +import org.apache.maven.model.building.ModelProblem; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; /** * Use a regular expression search to find and resolve expressions within the POM. @@ -241,7 +244,7 @@ public abstract class AbstractStringBase } catch ( InterpolationException e ) { - problems.add( Severity.ERROR, e.getMessage(), null, e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage( e.getMessage() ).setException( e )); } interpolator.clearFeedback(); Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java Thu Jul 5 13:11:15 2012 @@ -20,9 +20,12 @@ package org.apache.maven.model.interpola */ import java.util.List; +import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.codehaus.plexus.interpolation.ValueSource; /** @@ -62,7 +65,7 @@ class ProblemDetectingValueSource { msg += " Please use ${" + newPrefix + expression.substring( bannedPrefix.length() ) + "} instead."; } - problems.add( Severity.WARNING, msg, null, null ); + problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V20 ).setMessage( msg )); } return value; Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java Thu Jul 5 13:11:15 2012 @@ -41,6 +41,9 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.apache.maven.model.building.ModelProblem; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; @Component( role = ModelInterpolator.class ) public class StringSearchModelInterpolator @@ -191,13 +194,15 @@ public class StringSearchModelInterpolat } catch ( IllegalArgumentException e ) { - problems.add( Severity.ERROR, "Failed to interpolate field3: " + field + " on class: " + cls.getName(), - null, e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Failed to interpolate field3: " + field + " on class: " + cls.getName()) + .setException(e)); } catch ( IllegalAccessException e ) { - problems.add( Severity.ERROR, "Failed to interpolate field4: " + field + " on class: " + cls.getName(), - null, e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Failed to interpolate field4: " + field + " on class: " + cls.getName()) + .setException(e)); } finally { Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java Thu Jul 5 13:11:15 2012 @@ -27,8 +27,11 @@ import org.apache.maven.model.ReportPlug import org.apache.maven.model.ReportSet; import org.apache.maven.model.Reporting; import org.apache.maven.model.building.ModelBuildingRequest; +import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; @@ -105,9 +108,9 @@ public class DefaultReportingConverter && request.getValidationLevel() >= ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 ) { - problems.add( Severity.WARNING, "The <reporting> section is deprecated" - + ", please move the reports to the <configuration> section of the new Maven Site Plugin.", - reporting.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V31) + .setMessage( "The <reporting> section is deprecated, please move the reports to the <configuration> section of the new Maven Site Plugin.") + .setLocation( reporting.getLocation( "" ) )); } for ( ReportPlugin plugin : reporting.getPlugins() ) Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java Thu Jul 5 13:11:15 2012 @@ -26,8 +26,11 @@ import java.util.List; import org.apache.maven.model.Activation; import org.apache.maven.model.Profile; +import org.apache.maven.model.building.ModelProblem; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.model.profile.activation.ProfileActivator; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; @@ -113,8 +116,10 @@ public class DefaultProfileSelector } catch ( RuntimeException e ) { - problems.add( Severity.ERROR, "Failed to determine activation for profile " + profile.getId(), - profile.getLocation( "" ), e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Failed to determine activation for profile " + profile.getId()) + .setLocation( profile.getLocation( "" )) + .setException( e )); return false; } } Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java Thu Jul 5 13:11:15 2012 @@ -26,6 +26,8 @@ import org.apache.maven.model.Activation import org.apache.maven.model.Profile; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.model.path.PathTranslator; import org.apache.maven.model.profile.ProfileActivationContext; import org.codehaus.plexus.component.annotations.Component; @@ -125,8 +127,10 @@ public class FileProfileActivator } catch ( Exception e ) { - problems.add( Severity.ERROR, "Failed to interpolate file location " + path + " for profile " - + profile.getId() + ": " + e.getMessage(), file.getLocation( missing ? "missing" : "exists" ), e ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Failed to interpolate file location " + path + " for profile " + profile.getId() + ": " + e.getMessage()) + .setLocation( file.getLocation( missing ? "missing" : "exists" )) + .setException( e )); return false; } Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java Thu Jul 5 13:11:15 2012 @@ -27,6 +27,8 @@ import org.apache.maven.model.Activation import org.apache.maven.model.Profile; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.model.profile.ProfileActivationContext; import org.codehaus.plexus.component.annotations.Component; @@ -56,8 +58,9 @@ public class JdkVersionProfileActivator if ( version == null || version.length() <= 0 ) { - problems.add( Severity.ERROR, "Failed to determine Java version for profile " + profile.getId(), - activation.getLocation( "jdk" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "Failed to determine Java version for profile " + profile.getId()) + .setLocation(activation.getLocation( "jdk" ))); return false; } Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java?rev=1357589&r1=1357588&r2=1357589&view=diff ============================================================================== --- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java (original) +++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java Thu Jul 5 13:11:15 2012 @@ -24,6 +24,8 @@ import org.apache.maven.model.Activation import org.apache.maven.model.Profile; import org.apache.maven.model.building.ModelProblemCollector; import org.apache.maven.model.building.ModelProblem.Severity; +import org.apache.maven.model.building.ModelProblem.Version; +import org.apache.maven.model.building.ModelProblemCollectorRequest; import org.apache.maven.model.profile.ProfileActivationContext; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.util.StringUtils; @@ -61,8 +63,9 @@ public class PropertyProfileActivator if ( name == null || name.length() <= 0 ) { - problems.add( Severity.ERROR, "The property name is required to activate the profile " - + profile.getId(), property.getLocation( "" ), null ); + problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE) + .setMessage( "The property name is required to activate the profile " + profile.getId()) + .setLocation( property.getLocation( "" ))); return false; }