aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java200
1 files changed, 200 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
new file mode 100644
index 00000000..89d5cb21
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java
@@ -0,0 +1,200 @@
+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.EnumSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.ModelParseException;
+
+/**
+ * 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
+ */
+class DefaultModelProblemCollector
+ implements ModelProblemCollectorExt
+{
+
+ private final ModelBuildingResult result;
+
+ private List<ModelProblem> problems;
+
+ private String source;
+
+ private Model sourceModel;
+
+ private Model rootModel;
+
+ private Set<ModelProblem.Severity> severities = EnumSet.noneOf( ModelProblem.Severity.class );
+
+ public DefaultModelProblemCollector( ModelBuildingResult result )
+ {
+ this.result = result;
+ this.problems = result.getProblems();
+
+ for ( ModelProblem problem : this.problems )
+ {
+ severities.add( problem.getSeverity() );
+ }
+ }
+
+ public boolean hasFatalErrors()
+ {
+ return severities.contains( ModelProblem.Severity.FATAL );
+ }
+
+ public boolean hasErrors()
+ {
+ return severities.contains( ModelProblem.Severity.ERROR ) || severities.contains( ModelProblem.Severity.FATAL );
+ }
+
+ @Override
+ public List<ModelProblem> getProblems()
+ {
+ return problems;
+ }
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ this.sourceModel = null;
+ }
+
+ public void setSource( Model source )
+ {
+ this.sourceModel = source;
+ this.source = null;
+
+ if ( rootModel == null )
+ {
+ rootModel = source;
+ }
+ }
+
+ private String getSource()
+ {
+ if ( source == null && sourceModel != null )
+ {
+ source = ModelProblemUtils.toPath( sourceModel );
+ }
+ return source;
+ }
+
+ private String getModelId()
+ {
+ return ModelProblemUtils.toId( sourceModel );
+ }
+
+ public void setRootModel( Model rootModel )
+ {
+ this.rootModel = rootModel;
+ }
+
+ public Model getRootModel()
+ {
+ return rootModel;
+ }
+
+ public String getRootModelId()
+ {
+ return ModelProblemUtils.toId( rootModel );
+ }
+
+ public void add( ModelProblem problem )
+ {
+ problems.add( problem );
+
+ severities.add( problem.getSeverity() );
+ }
+
+ public void addAll( List<ModelProblem> problems )
+ {
+ this.problems.addAll( problems );
+
+ for ( ModelProblem problem : problems )
+ {
+ severities.add( problem.getSeverity() );
+ }
+ }
+
+ @Override
+ public void add( ModelProblemCollectorRequest req )
+ {
+ int line = -1;
+ int column = -1;
+ String source = null;
+ String modelId = null;
+
+ if ( req.getLocation() != null )
+ {
+ line = req.getLocation().getLineNumber();
+ column = req.getLocation().getColumnNumber();
+ if ( req.getLocation().getSource() != null )
+ {
+ modelId = req.getLocation().getSource().getModelId();
+ source = req.getLocation().getSource().getLocation();
+ }
+ }
+
+ if ( modelId == null )
+ {
+ modelId = getModelId();
+ source = getSource();
+ }
+
+ if ( line <= 0 && column <= 0 && req.getException() instanceof ModelParseException )
+ {
+ ModelParseException e = (ModelParseException) req.getException();
+ line = e.getLineNumber();
+ column = e.getColumnNumber();
+ }
+
+ ModelProblem problem =
+ new DefaultModelProblem( req.getMessage(), req.getSeverity(), req.getVersion(), source, line, column,
+ modelId, req.getException() );
+
+ add( problem );
+ }
+
+ public ModelBuildingException newModelBuildingException()
+ {
+ ModelBuildingResult result = this.result;
+ if ( result.getModelIds().isEmpty() )
+ {
+ DefaultModelBuildingResult tmp = new DefaultModelBuildingResult();
+ tmp.setEffectiveModel( result.getEffectiveModel() );
+ tmp.setProblems( getProblems() );
+ tmp.setActiveExternalProfiles( result.getActiveExternalProfiles() );
+ String id = getRootModelId();
+ tmp.addModelId( id );
+ tmp.setRawModel( id, getRootModel() );
+ result = tmp;
+ }
+ return new ModelBuildingException( result );
+ }
+
+}