@Override
  public void addMarkers(IResource pomResource, String type, MavenExecutionResult result) {
    SourceLocation defaultSourceLocation = new SourceLocation(1, 0, 0);
    List<MavenProblemInfo> allProblems = new ArrayList<MavenProblemInfo>();

    allProblems.addAll(
        toMavenProblemInfos(pomResource, defaultSourceLocation, result.getExceptions()));

    MavenProject mavenProject = result.getProject();
    DependencyResolutionResult resolutionResult = result.getDependencyResolutionResult();
    if (resolutionResult != null) {
      allProblems.addAll(
          toMavenProblemInfos(
              pomResource, defaultSourceLocation, resolutionResult.getCollectionErrors()));
      for (org.eclipse.aether.graph.Dependency dependency :
          resolutionResult.getUnresolvedDependencies()) {
        List<Exception> exceptions = resolutionResult.getResolutionErrors(dependency);
        if (exceptions != null && exceptions.size() > 0) {
          SourceLocation sourceLocation =
              SourceLocationHelper.findLocation(mavenProject, dependency);
          allProblems.addAll(toMavenProblemInfos(pomResource, sourceLocation, exceptions));
        }
      }
    }

    if (mavenProject != null) {
      addMissingArtifactProblemInfos(mavenProject, defaultSourceLocation, allProblems);
    }

    addErrorMarkers(pomResource, type, allProblems);
  }
  private List<MavenProblemInfo> toMavenProblemInfos(
      IResource pomResource, SourceLocation location, List<? extends Throwable> exceptions) {
    List<MavenProblemInfo> result = new ArrayList<MavenProblemInfo>();
    if (exceptions == null) {
      return result;
    }

    for (Throwable ex : exceptions) {
      if (ex instanceof org.eclipse.aether.transfer.ArtifactNotFoundException) {
        org.eclipse.aether.transfer.ArtifactNotFoundException artifactNotFoundException =
            (org.eclipse.aether.transfer.ArtifactNotFoundException) ex;
        ArtifactNotFoundProblemInfo problem =
            new ArtifactNotFoundProblemInfo(
                artifactNotFoundException.getArtifact(), mavenConfiguration.isOffline(), location);
        result.add(problem);
      } else if (ex instanceof AbstractArtifactResolutionException) {
        AbstractArtifactResolutionException abstractArtifactResolutionException =
            (AbstractArtifactResolutionException) ex;
        String errorMessage =
            getArtifactId(abstractArtifactResolutionException)
                + " "
                + getRootErrorMessage(ex); // $NON-NLS-1$
        result.add(new MavenProblemInfo(errorMessage, location));
      } else if (ex instanceof ProjectBuildingException) {
        Throwable cause = ex.getCause();
        if (cause instanceof ModelBuildingException) {
          ModelBuildingException mbe = (ModelBuildingException) cause;
          for (ModelProblem problem : mbe.getProblems()) {
            String message = NLS.bind(Messages.pluginMarkerBuildError, problem.getMessage());
            int severity =
                (Severity.WARNING == problem.getSeverity())
                    ? IMarker.SEVERITY_WARNING
                    : IMarker.SEVERITY_ERROR;
            SourceLocation problemLocation =
                SourceLocationHelper.findLocation(pomResource, problem);
            result.add(new MavenProblemInfo(message, severity, problemLocation));
          }
        } else {
          result.add(new MavenProblemInfo(getErrorMessage(ex), location));
        }
      } else {
        result.add(new MavenProblemInfo(getErrorMessage(ex), location));
      }
    }

    return result;
  }