in extractor/src/main/scala/org/jetbrains/sbt/extractors/ProjectExtractor.scala [144:184]
private def extractConfiguration(
ideConfig: String,
toExclude: Seq[File] = Nil
)(configuration: sbt.Configuration): Option[ConfigurationData] =
classDirectory(configuration).map { sbtOutput =>
def filterAndMap(dirs: Seq[File], managed: Boolean): Seq[DirectoryData] =
dirs
.filterNot(toExclude.contains)
.map(DirectoryData(_, managed = managed))
val sources = {
val managed = managedSourceDirectories(configuration)
val unmanaged = unmanagedSourceDirectories(configuration)
filterAndMap(managed, managed = true) ++
filterAndMap(unmanaged, managed = false)
}
val resources = {
val managed = managedResourceDirectories(configuration)
val unmanaged = unmanagedResourceDirectories(configuration)
filterAndMap(managed, managed = true) ++
filterAndMap(unmanaged, managed = false)
}
val output = ideOutputDirectory(configuration).getOrElse(sbtOutput)
/*
* IntelliJ has a more limited model of configuration than sbt/ivy, so we need to map them to one of the types
* we can handle: Test or Compile. This is the `ideConfig`
* This mapping is not perfect because we depend on the configuration extension mechanism to detect what is a test
* config, and IntelliJ can not model config dependencies fully. The aim is to reduce amount of "red code" that
* hampers productivity.
*/
ConfigurationData(
ideConfig,
sources,
resources,
excludedDirectories,
output
)
}