private def lintEvictedDeclaredDependencies()

in multiversion/src/main/scala/multiversion/commands/ExportCommand.scala [426:478]


  private def lintEvictedDeclaredDependencies(
      originalThirdParty: ThirdpartyConfig,
      originalIndex: ResolutionIndex,
      index: ResolutionIndex,
      failOnEvictedDeclared: Boolean
  ): Result[Unit] = {
    def selectedDependencyOf(config: DependencyConfig): Dependency = {
      val originalDependency = config.toCoursierDependency(originalThirdParty.scala)
      // The original dependency could have been evicted after the first resolution already,
      // and not appear in `index` at all.
      val selectedDependency =
        if (index.dependencies.contains(config.id)) originalDependency
        else originalIndex.reconciledDependency(originalDependency)
      index.reconciledDependency(selectedDependency)
    }

    def targetsDependingOn(dep: Dependency): Set[String] = {
      val needleRepr = dep.repr
      val ids = index.dependencies.collect {
        case (id, dependencies) if dependencies.exists(_.repr == needleRepr) => id
      }.toSet
      originalThirdParty.dependencies
        .collect {
          case cfg if ids.contains(cfg.id) =>
            cfg.targets
        }
        .flatten
        .toSet
    }

    val diagnostics =
      for {
        dependency <- originalThirdParty.dependencies
        declaringTargets = dependency.targets
        declaredVersion = dependency.version
        declaredDependency = dependency.toCoursierDependency(originalThirdParty.scala)
        selectedDependency = selectedDependencyOf(dependency)
        if declaredDependency.version != selectedDependency.version && dependency.force
        breakingTargets = targetsDependingOn(selectedDependency) -- declaringTargets
        severity =
          if (dependency.url.isDefined || failOnEvictedDeclared) ErrorSeverity else WarningSeverity
      } yield new EvictedDeclaredDependencyDiagnostic(
        declaredDependency,
        declaringTargets,
        selectedDependency,
        breakingTargets,
        hasUrl = dependency.url.isDefined,
        severity,
        dependency.organization.position
      )

    app.reportOrElse(diagnostics, ())
  }