diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 1d2ba94df..16fb80673 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -250,6 +250,7 @@ object Defaults extends BuildCommon { lazy val configTasks = docTaskSettings(doc) ++ inTask(compile)(compileInputsSettings) ++ configGlobal ++ compileAnalysisSettings ++ Seq( compile <<= compileTask, + manipulateBytecode := compileIncremental.value, compileIncremental <<= compileIncrementalTask tag (Tags.Compile, Tags.CPU), printWarnings <<= printWarningsTask, compileAnalysisFilename := { @@ -781,10 +782,19 @@ object Defaults extends BuildCommon { @deprecated("Use inTask(compile)(compileInputsSettings)", "0.13.0") def compileTaskSettings: Seq[Setting[_]] = inTask(compile)(compileInputsSettings) - def compileTask: Initialize[Task[inc.Analysis]] = Def.task { saveAnalysis.value } + def compileTask: Initialize[Task[inc.Analysis]] = Def.task { + val setup: Compiler.IncSetup = compileIncSetup.value + // TODO - expose bytecode manipulation phase. + val analysisResult: Compiler.CompileResult = manipulateBytecode.value + if (analysisResult.hasModified) { + val store = MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile) + store.set(analysisResult.analysis, analysisResult.setup) + } + analysisResult.analysis + } def compileIncrementalTask = Def.task { // TODO - Should readAnalysis + saveAnalysis be scoped by the compile task too? - compileIncrementalTaskImpl(streams.value, (compileInputs in compile).value, readAnalysis.value, (compilerReporter in compile).value) + compileIncrementalTaskImpl(streams.value, (compileInputs in compile).value, previousCompile.value, (compilerReporter in compile).value) } private[this] def compileIncrementalTaskImpl(s: TaskStreams, ci: Compiler.Inputs, previous: Compiler.PreviousAnalysis, reporter: Option[xsbti.Reporter]): Compiler.CompileResult = { @@ -815,22 +825,13 @@ object Defaults extends BuildCommon { }, compilerReporter := None) def compileAnalysisSettings: Seq[Setting[_]] = Seq( - readAnalysis := { + previousCompile := { val setup: Compiler.IncSetup = compileIncSetup.value val store = MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile) store.get() match { case Some((an, setup)) => Compiler.PreviousAnalysis(an, Some(setup)) case None => Compiler.PreviousAnalysis(Analysis.empty(nameHashing = setup.incOptions.nameHashing), None) } - }, - saveAnalysis := { - val setup: Compiler.IncSetup = compileIncSetup.value - val analysisResult: Compiler.CompileResult = compileIncremental.value - if (analysisResult.hasModified) { - val store = MixedAnalyzingCompiler.staticCachedStore(setup.cacheFile) - store.set(analysisResult.analysis, analysisResult.setup) - } - analysisResult.analysis } ) diff --git a/main/src/main/scala/sbt/Keys.scala b/main/src/main/scala/sbt/Keys.scala index 53ce20f87..66171fdcd 100644 --- a/main/src/main/scala/sbt/Keys.scala +++ b/main/src/main/scala/sbt/Keys.scala @@ -142,9 +142,9 @@ object Keys { val consoleQuick = TaskKey[Unit]("console-quick", "Starts the Scala interpreter with the project dependencies on the classpath.", ATask, console) val consoleProject = TaskKey[Unit]("console-project", "Starts the Scala interpreter with the sbt and the build definition on the classpath and useful imports.", AMinusTask) val compile = TaskKey[Analysis]("compile", "Compiles sources.", APlusTask) + val manipulateBytecode = TaskKey[Compiler.CompileResult]("manipulateBytecode", "Manipulates generated bytecode", BTask) val compileIncremental = TaskKey[Compiler.CompileResult]("compileIncremental", "Actually runs the incremental compliation", DTask) - val readAnalysis = TaskKey[Compiler.PreviousAnalysis]("readAnalysis", "Read the incremental compiler analysis from disk", DTask) - val saveAnalysis = TaskKey[Analysis]("saveAnalysis", "Save the incremental compiler analysis to disk", DTask) + val previousCompile = TaskKey[Compiler.PreviousAnalysis]("readAnalysis", "Read the incremental compiler analysis from disk", DTask) val compilers = TaskKey[Compiler.Compilers]("compilers", "Defines the Scala and Java compilers to use for compilation.", DTask) val compileAnalysisFilename = TaskKey[String]("compileAnalysisFilename", "Defines the filename used to store the incremental compiler analysis file (inside the streams cacheDirectory).", DTask) val compileIncSetup = TaskKey[Compiler.IncSetup]("inc-compile-setup", "Configures aspects of incremental compilation.", DTask)