private def extractConfiguration()

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
      )
    }