diff --git a/main/src/main/scala/sbt/ConsoleProject.scala b/main/src/main/scala/sbt/ConsoleProject.scala index bf297d2de..a3bf84381 100644 --- a/main/src/main/scala/sbt/ConsoleProject.scala +++ b/main/src/main/scala/sbt/ConsoleProject.scala @@ -10,7 +10,9 @@ object ConsoleProject def apply(state: State, extra: String, cleanupCommands: String = "", options: Seq[String] = Nil)(implicit log: Logger) { val extracted = Project extract state - val bindings = ("currentState" -> state) :: ("extracted" -> extracted ) :: Nil + val cpImports = new Imports(extracted, state) + + val bindings = ("currentState" -> state) :: ("extracted" -> extracted ) :: ("cpHelpers" -> cpImports) :: Nil val unit = extracted.currentUnit val compiler = Compiler.compilers(ClasspathOptions.repl)(state.configuration, log).scalac val imports = BuildUtil.getImports(unit.unit) ++ BuildUtil.importAll(bindings.map(_._1)) @@ -18,4 +20,12 @@ object ConsoleProject val initCommands = importString + extra (new Console(compiler))(unit.classpath, options, initCommands, cleanupCommands)(Some(unit.loader), bindings) } + /** Conveniences for consoleProject that shouldn't normally be used for builds. */ + final class Imports private[sbt](extracted: Extracted, state: State) + { + import extracted._ + implicit def taskKeyEvaluate[T](t: TaskKey[T]): Evaluate[T] = new Evaluate(runTask(t, state)._2) + implicit def settingKeyEvaluate[T](s: SettingKey[T]): Evaluate[T] = new Evaluate(get(s)) + } + final class Evaluate[T] private[sbt](val eval: T) }