|
1 | 1 | package monocle.internal.focus.features.selectfield |
2 | 2 |
|
3 | 3 | import monocle.internal.focus.FocusBase |
| 4 | +import monocle.internal.focus.features.SelectGeneratorBase |
4 | 5 | import monocle.Lens |
5 | | -import scala.quoted.Quotes |
6 | 6 |
|
7 | 7 | private[focus] trait SelectFieldGenerator { |
8 | | - this: FocusBase => |
| 8 | + this: FocusBase with SelectGeneratorBase => |
9 | 9 |
|
10 | 10 | import macroContext.reflect._ |
11 | 11 |
|
12 | 12 | def generateSelectField(action: FocusAction.SelectField): Term = { |
13 | 13 | import action.{fieldName, fromType, fromTypeArgs, toType} |
14 | 14 |
|
15 | | - def generateGetter(from: Term): Term = |
16 | | - Select.unique(from, fieldName) // o.field |
17 | | - |
18 | 15 | def generateSetter(from: Term, to: Term): Term = |
19 | | - Select.overloaded(from, "copy", fromTypeArgs, NamedArg(fieldName, to) :: Nil) // o.copy(field = value) |
| 16 | + // o.copy(field = value)(implicits)* |
| 17 | + etaExpandIfNecessary(Select.overloaded(from, "copy", fromTypeArgs, NamedArg(fieldName, to) :: Nil)) |
20 | 18 |
|
21 | 19 | (fromType.asType, toType.asType) match { |
22 | 20 | case ('[f], '[t]) => |
23 | 21 | '{ |
24 | | - Lens.apply[f, t]((from: f) => ${ generateGetter('{ from }.asTerm).asExprOf[t] })((to: t) => |
| 22 | + Lens.apply[f, t]((from: f) => ${ generateGetter('{ from }.asTerm, fieldName).asExprOf[t] })((to: t) => |
25 | 23 | (from: f) => ${ generateSetter('{ from }.asTerm, '{ to }.asTerm).asExprOf[f] } |
26 | 24 | ) |
27 | 25 | }.asTerm |
|
0 commit comments