From fe0de6ca3098ed96fdea5a4ffe111cf498f3c482 Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Mon, 19 Sep 2022 14:34:32 -0400 Subject: [PATCH] Fix input task macro --- .../scala/sbt/std/InputTaskMacro.scala.scala | 36 +++++++++++-------- main/src/main/scala/sbt/Defaults.scala | 3 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala index 3dbfd4a64..e98522e8b 100644 --- a/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala +++ b/main-settings/src/main/scala/sbt/std/InputTaskMacro.scala.scala @@ -41,14 +41,15 @@ object InputTaskMacro: f: Expr[A1] => Expr[F1[A1]] )(using qctx: Quotes): Expr[Def.Initialize[F1[A1]]] = import qctx.reflect.* - import InputWrapper.* val convert1 = new InputInitConvert(qctx, 0) import convert1.Converted def wrapInitTask[A2: Type](tree: Term): Term = val expr = tree.asExprOf[Def.Initialize[Task[A2]]] '{ - InputWrapper.`wrapTask_\u2603\u2603`[A2](InputWrapper.`wrapInit_\u2603\u2603`[A2]($expr)) + InputWrapper.`wrapTask_\u2603\u2603`[A2]( + InputWrapper.`wrapInit_\u2603\u2603`[Task[A2]]($expr) + ) }.asTerm def wrapInitParser[A2: Type](tree: Term): Term = @@ -61,27 +62,31 @@ object InputTaskMacro: def wrapInitInput[A2: Type](tree: Term): Term = val expr = tree.asExprOf[Def.Initialize[InputTask[A2]]] - wrapInput[A2]('{ - InputWrapper.`wrapInit_\u2603\u2603`[InputTask[A2]]($expr) - }.asTerm) + wrapInput[A2](wrapInit[InputTask[A2]](tree)) def wrapInput[A2: Type](tree: Term): Term = - val expr = tree.asExprOf[InputTask[A1]] + val expr = tree.asExprOf[InputTask[A2]] '{ InputWrapper.`wrapTask_\u2603\u2603`[A2]( ParserInput.`parser_\u2603\u2603`[Task[A2]]($expr.parser) ) }.asTerm - def expand[A](nme: String, tpe: Type[A], tree: Term): Converted = - given Type[A] = tpe + def wrapInit[A2: Type](tree: Term): Term = + val expr = tree.asExpr + '{ + InputWrapper.`wrapInit_\u2603\u2603`[A2]($expr) + }.asTerm + + def expand[A2](nme: String, tpe: Type[A2], tree: Term): Converted = + given Type[A2] = tpe nme match - case WrapInitTaskName => Converted.success(wrapInitTask[A](tree)) - case WrapPreviousName => Converted.success(wrapInitTask[A](tree)) - case ParserInput.WrapInitName => Converted.success(wrapInitParser[A](tree)) - case WrapInitInputName => Converted.success(wrapInitInput[A](tree)) - case WrapInputName => Converted.success(wrapInput[A](tree)) - case _ => Converted.NotApplicable() + case InputWrapper.WrapInitTaskName => Converted.success(wrapInitTask[A2](tree)) + case InputWrapper.WrapPreviousName => Converted.success(wrapInitTask[A2](tree)) + case ParserInput.WrapInitName => Converted.success(wrapInitParser[A2](tree)) + case InputWrapper.WrapInitInputName => Converted.success(wrapInitInput[A2](tree)) + case InputWrapper.WrapInputName => Converted.success(wrapInput[A2](tree)) + case _ => Converted.NotApplicable() def conditionInputTaskTree(t: Term): Term = convert1.transformWrappers( @@ -92,7 +97,8 @@ object InputTaskMacro: ) val inner: convert1.TermTransform[F1] = (in: Term) => f(in.asExprOf[A1]).asTerm - val cond = conditionInputTaskTree(tree.asTerm).asExprOf[A1] + val inlined = convert1.inlineExtensionProxy(tree.asTerm) + val cond = conditionInputTaskTree(inlined).asExprOf[A1] convert1.contMapN[A1, Def.Initialize, F1](cond, convert1.appExpr, inner) private[this] def iParserMacro[F1[_]: Type, A1: Type](tree: Expr[A1])( diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 51af5c84e..83cd0868f 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -2004,10 +2004,11 @@ object Defaults extends BuildCommon { // runMain calls bgRunMain in the background and waits for the result. def foregroundRunMainTask: Initialize[InputTask[Unit]] = - Def.inputTask { + Def.inputTask[Unit] { val handle = bgRunMain.evaluated val service = bgJobService.value service.waitForTry(handle).get + () } // run calls bgRun in the background and waits for the result.