in extractor/src/main/scala/org/jetbrains/sbt/extractors/RepositoryExtractor.scala [117:164]
private def extractRepositoryData(state: State, options: Options, acceptedProjects: scala.collection.immutable.Seq[ProjectRef]): Task[RepositoryData] = {
def classpathTypes(projectRef: ProjectRef): Set[String] =
(projectRef / Keys.classpathTypes).getValueOrElse(state, Set.empty)
val dependencyConfigurations = StructureKeys.dependencyConfigurations
.forAllProjects(state, acceptedProjects)
.toMap
val classpathConfigurationTask = sbt.Keys.classpathConfiguration
.forAllProjectsAndConfigurations(state, acceptedProjects, dependencyConfigurations)
val updateAllTask: Task[Map[ProjectRef, UpdateReportAdapter]] =
Keys.update
.forAllProjects(state, acceptedProjects)
.map(_.mapValues(new UpdateReportAdapter(_)).toMap)
val updateAllClassifiersTask =
Keys.updateClassifiers
.forAllProjects(state, acceptedProjects)
.map(_.mapValues(new UpdateReportAdapter(_)))
.onlyIf(options.resolveSourceClassifiers || options.resolveJavadocClassifiers)
for {
updateReports <- updateAllTask
updateClassifiersReports <- updateAllClassifiersTask
classpathConfiguration <- classpathConfigurationTask
} yield {
val projectToClasspathConfig: Map[ProjectRef, Seq[Configuration]] =
classpathConfiguration.groupBy(_._1._1)
.mapValues(_.map { case ((_, _), c2) => c2 })
.toMap
val classpathAndDependencyConfigs = projectToClasspathConfig.map { case (project, configs) =>
val projectDependencyConfigs = dependencyConfigurations.getOrElse(project, Seq.empty)
val uniqueConfigNames = (projectDependencyConfigs ++ configs).groupBy(_.name).keys.toSeq
project -> uniqueConfigNames
}
val extractor = new RepositoryExtractor(
acceptedProjects,
updateReports.apply,
updateClassifiersReports.map(_.apply),
ref => classpathTypes(ref),
classpathAndDependencyConfigs
)
extractor.extract
}
}