@@ -112,7 +112,7 @@ class PickleQuotes extends MacroTransform {
112
112
assert(isTerm)
113
113
assert(! content.isEmpty)
114
114
holeContents += content
115
- val holeType = getTermHoleType (tree.tpe)
115
+ val holeType = avoidNonStaticTypes (tree.tpe)
116
116
val hole = untpd.cpy.Hole (tree)(content = EmptyTree ).withType(holeType)
117
117
cpy.Inlined (tree)(EmptyTree , Nil , hole)
118
118
case tree : DefTree =>
@@ -134,19 +134,6 @@ class PickleQuotes extends MacroTransform {
134
134
}
135
135
}
136
136
137
- /** Remove references to local types that will not be defined in this quote */
138
- private def getTermHoleType (using Context ) = new TypeMap () {
139
- override def apply (tp : Type ): Type = tp match
140
- case tp @ TypeRef (NoPrefix , _) =>
141
- // reference to term with a type defined in outer quote
142
- getTypeHoleType(tp)
143
- case tp @ TermRef (NoPrefix , _) =>
144
- // widen term refs to terms defined in outer quote
145
- apply(tp.widenTermRefExpr)
146
- case tp =>
147
- mapOver(tp)
148
- }
149
-
150
137
/** Get the holeContents of the transformed tree */
151
138
def getContents () =
152
139
val res = holeContents.result
@@ -196,11 +183,11 @@ class PickleQuotes extends MacroTransform {
196
183
cpy.Quote (quote)(Block (tdefs, body1), quote.tags)
197
184
198
185
private def mkTagSymbolAndAssignType (typeArg : Tree , idx : Int )(using Context ): TypeDef = {
199
- val holeType = getTypeHoleType (typeArg.tpe.select(tpnme.Underlying ))
186
+ val holeType = avoidNonStaticTypes (typeArg.tpe.select(tpnme.Underlying ))
200
187
val hole = untpd.cpy.Hole (typeArg)(isTerm = false , idx, Nil , EmptyTree ).withType(holeType)
201
188
val local = newSymbol(
202
189
owner = ctx.owner,
203
- name = UniqueName .fresh(hole.tpe.dealias.typeSymbol .name.toTypeName),
190
+ name = UniqueName .fresh(typeArg.symbol .name.toTypeName),
204
191
flags = Synthetic ,
205
192
info = TypeAlias (typeArg.tpe.select(tpnme.Underlying )),
206
193
coord = typeArg.span
@@ -209,25 +196,10 @@ class PickleQuotes extends MacroTransform {
209
196
ctx.typeAssigner.assignType(untpd.TypeDef (local.name, hole), local).withSpan(typeArg.span)
210
197
}
211
198
212
- /** Remove references to local types that will not be defined in this quote */
213
- private def getTypeHoleType (using Context ) = new TypeMap () {
214
- override def apply (tp : Type ): Type = tp match
215
- case tp : TypeRef if tp.typeSymbol.isTypeSplice =>
216
- apply(tp.dealias)
217
- case tp @ TypeRef (pre, _) if isLocalPath(pre) =>
218
- val hiBound = tp.typeSymbol.info match
219
- case info : ClassInfo => info.parents.reduce(_ & _)
220
- case info => info.hiBound
221
- apply(hiBound)
222
- case tp =>
223
- mapOver(tp)
224
-
225
- private def isLocalPath (tp : Type ): Boolean = tp match
226
- case NoPrefix => true
227
- case tp : TermRef if ! tp.symbol.is(Package ) => isLocalPath(tp.prefix)
228
- case tp => false
229
- }
230
-
199
+ private def avoidNonStaticTypes (tpe : Type )(using Context ) =
200
+ new TypeOps .AvoidMap {
201
+ def toAvoid (tp : NamedType ) = ! isStaticPrefix(tp)
202
+ }.apply(tpe)
231
203
}
232
204
233
205
object PickleQuotes {
0 commit comments