def classDirectory()

in extractor-legacy-0.13/src/main/scala/org/jetbrains/sbt/extractors/ProjectExtractor.scala [311:436]


    def classDirectory(conf: sbt.Configuration) =
      Keys.classDirectory.in(projectRef, conf).find(state)

    val excludedDirectories =
      SettingKeys.ideExcludedDirectories
        .in(projectRef)
        .find(state)
        .orElse(
          SettingKeys.sbtIdeaExcludeFolders
            .in(projectRef)
            .find(state)
            .map(_.map(file))
        )
        .getOrElse(Seq.empty)

    def ideOutputDirectory(conf: sbt.Configuration) =
      SettingKeys.ideOutputDirectory.in(projectRef, conf).find(state).flatten

    val options = StructureKeys.sbtStructureOpts.value

    val managedSourceDirsInConfig =
      settingInConfiguration(Keys.managedSourceDirectories)
    val unmanagedSourceDirsInConfig =
      settingInConfiguration(Keys.unmanagedSourceDirectories)
    val managedResourceDirsInConfig =
      settingInConfiguration(Keys.managedResourceDirectories)
    val unmanagedResourceDirsInConfig =
      settingInConfiguration(Keys.unmanagedResourceDirectories)

    Def.taskDyn {
      val scalaOrganization =
        Keys.scalaOrganization.in(projectRef, Compile).value
      val scalaInstance =
        taskInCompile(Keys.scalaInstance).onlyIf(options.download).value

      def mapToCompilerOptions(configToOptions: Seq[(Configuration, Seq[String])]) = {
        configToOptions.collect { case(config, options) if options.nonEmpty =>
          CompilerOptions(config, options)
        }
      }

      val scalacOptions = mapToCompilerOptions(
        Seq(
          (Configuration.Compile, taskInConfig(Keys.scalacOptions, Compile).onlyIf(options.download).value.getOrElse(Seq.empty)),
          (Configuration.Test, taskInConfig(Keys.scalacOptions, Test).onlyIf(options.download).value.getOrElse(Seq.empty))
        )
      )

      val javacOptions = mapToCompilerOptions(
        Seq(
          (Configuration.Compile, taskInConfig(Keys.javacOptions, Compile).onlyIf(options.download).value.getOrElse(Seq.empty)),
          (Configuration.Test, taskInConfig(Keys.javacOptions, Test).onlyIf(options.download).value.getOrElse(Seq.empty))
        )
      )

      val name = Keys.name.in(projectRef, Compile).value
      val organization = Keys.organization.in(projectRef, Compile).value
      val version = Keys.version.in(projectRef, Compile).value
      val base = Keys.baseDirectory.in(projectRef, Compile).value
      val target = Keys.target.in(projectRef, Compile).value
      val javaHome = Keys.javaHome.in(projectRef, Compile).value
      val compileOrder = Keys.compileOrder.in(projectRef, Compile).value

      val sourceConfigurations = StructureKeys.sourceConfigurations.value
      val testConfigurations = StructureKeys.testConfigurations.value

      val mainSourceDirectories = Keys.sourceDirectory.in(projectRef)
        .forAllConfigurations(state, sourceConfigurations)
        .map(_._2).distinct
      val testSourceDirectories = Keys.sourceDirectory.in(projectRef)
        .forAllConfigurations(state, testConfigurations)
        .map(_._2).distinct

      val projectData = new ProjectExtractor(
        projectRef,
        name,
        organization,
        version,
        base,
        target,
        idePackagePrefix,
        basePackages,
        Keys.fullResolvers.value,
        classDirectory,
        managedSourceDirsInConfig,
        unmanagedSourceDirsInConfig,
        managedResourceDirsInConfig,
        unmanagedResourceDirsInConfig,
        excludedDirectories,
        ideOutputDirectory,
        scalaOrganization,
        scalaInstance,
        scalaCompilerBridgeBinaryJar = None,
        scalacOptions,
        javaHome,
        javacOptions,
        compileOrder,
        StructureKeys.sourceConfigurations.value,
        StructureKeys.testConfigurations.value,
        StructureKeys.extractDependencies.value,
        StructureKeys.extractPlay2.value,
        StructureKeys.settingData.value,
        StructureKeys.taskData.value,
        StructureKeys.commandData.value.distinct,
        mainSourceDirectories,
        testSourceDirectories
      ).extract

      val runGeneratedManagedSourcesTask = StructureKeys.generateManagedSourcesDuringStructureDump.value
      if (runGeneratedManagedSourcesTask) {
        Def.task {
          val log = Keys.streams.value.log
          val managedSources = generateManagedSourcesTaskDef.result.value match {
            case Inc(cause: Incomplete) =>
              log.warn(s"Generating managed sources failed in $name. Continuing with the project import. The stack trace of the failure is printed below:")
              val trace = stackTraceAsString(cause)
              log.warn(trace)
              Seq.empty
            case Value(sources) => sources
          }
          projectData.copy(generatedManagedSources = managedSources.nonEmpty)
        }
      } else {
        Def.task(projectData)
      }
    }