@@ -1226,14 +1226,18 @@ trait Applications extends Compatibility {
12261226 }
12271227 val dummyArg = dummyTreeOfType(ownType)
12281228 val unapplyApp = typedExpr(untpd.TypedSplice (Apply (unapplyFn, dummyArg :: Nil )))
1229- def unapplyImplicits (unapp : Tree ): List [Tree ] = unapp match {
1230- case Apply (Apply (unapply, `dummyArg` :: Nil ), args2) => assert(args2.nonEmpty); args2
1231- case Apply (unapply, `dummyArg` :: Nil ) => Nil
1232- case Inlined (u, _, _) => unapplyImplicits(u)
1233- case DynamicUnapply (_) =>
1234- ctx.error(" Structural unapply is not supported" , unapplyFn.sourcePos)
1235- Nil
1236- case _ => Nil .assertingErrorsReported
1229+ def unapplyImplicits (unapp : Tree ): List [List [Tree ]] = {
1230+ val res = List .newBuilder[List [Tree ]]
1231+ def loop (unapp : Tree ): Unit = unapp match {
1232+ case Apply (Apply (unapply, `dummyArg` :: Nil ), args2) => assert(args2.nonEmpty); res += args2
1233+ case Apply (unapply, `dummyArg` :: Nil ) =>
1234+ case Inlined (u, _, _) => loop(u)
1235+ case DynamicUnapply (_) => ctx.error(" Structural unapply is not supported" , unapplyFn.sourcePos)
1236+ case Apply (fn, args) => assert(args.nonEmpty); loop(fn); res += args
1237+ case _ => ().assertingErrorsReported
1238+ }
1239+ loop(unapp)
1240+ res.result()
12371241 }
12381242
12391243 var argTypes = unapplyArgs(unapplyApp.tpe, unapplyFn, args, tree.sourcePos)
@@ -1250,7 +1254,7 @@ trait Applications extends Compatibility {
12501254 List .fill(argTypes.length - args.length)(WildcardType )
12511255 }
12521256 val unapplyPatterns = bunchedArgs.lazyZip(argTypes) map (typed(_, _))
1253- val result = assignType(cpy.UnApply (tree)(unapplyFn, unapplyImplicits(unapplyApp), unapplyPatterns), ownType)
1257+ val result = assignType(cpy.UnApply (tree)(unapplyFn, unapplyImplicits(unapplyApp).flatten , unapplyPatterns), ownType)
12541258 unapp.println(s " unapply patterns = $unapplyPatterns" )
12551259 if ((ownType eq selType) || ownType.isError) result
12561260 else tryWithClassTag(Typed (result, TypeTree (ownType)), selType)
0 commit comments