/**
   * Resolve source artifacts and download them if <code>downloadSources</code> is <code>true</code>
   * . Source and javadocs artifacts will be attached to the <code>IdeDependency</code>
   *
   * @param deps resolved dependencies
   */
  private void resolveSourceArtifacts(IdeDependency[] deps) {

    ArtifactRepository localRepository = getLocalRepository();
    ArtifactResolver artifactResolver = getArtifactResolver();
    ArtifactFactory artifactFactory = getArtifactFactory();

    // if downloadSources is off, just check local repository for reporting missing jars
    List remoteRepos =
        getDownloadSources() ? getRemoteArtifactRepositories() : Collections.EMPTY_LIST;

    for (int j = 0; j < deps.length; j++) {
      IdeDependency dependency = deps[j];

      if (dependency.isReferencedProject() || dependency.isSystemScoped()) {
        // source artifact not needed
        continue;
      }

      // source artifact: use the "sources" classifier added by the source plugin
      Artifact sourceArtifact =
          IdeUtils.resolveArtifactWithClassifier(
              dependency.getGroupId(),
              dependency.getArtifactId(),
              dependency.getVersion(),
              "sources",
              localRepository,
              artifactResolver, //$NON-NLS-1$
              artifactFactory,
              remoteRepos,
              getLog());

      if (sourceArtifact.isResolved()) {
        dependency.setSourceAttachment(sourceArtifact.getFile());
      } else {
        // try using a plain javadoc jar if the source jar is not available
        Artifact javadocArtifact =
            IdeUtils.resolveArtifactWithClassifier(
                dependency.getGroupId(),
                dependency.getArtifactId(),
                dependency.getVersion(),
                "javadoc",
                localRepository,
                artifactResolver, //$NON-NLS-1$
                artifactFactory,
                remoteRepos,
                getLog());

        if (javadocArtifact.isResolved()) {
          dependency.setJavadocAttachment(javadocArtifact.getFile());
        }

        // @todo also report deps without a source attachment but with a javadoc one?
        missingSourceDependencies.add(dependency);
      }
    }
  }