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