@@ -1235,111 +1235,116 @@ object Trees {
1235
1235
protected def inlineContext (call : Tree )(implicit ctx : Context ): Context = ctx
1236
1236
1237
1237
abstract class TreeMap (val cpy : TreeCopier = inst.cpy) { self =>
1238
- def transform (tree : Tree )(implicit ctxLowPrio : Context ): Tree = {
1239
- implicit val ctx : Context =
1240
- if (tree.source != ctxLowPrio.source && tree.source.exists)
1241
- ctxLowPrio.withSource(tree.source)
1242
- else ctxLowPrio
1243
-
1244
- Stats .record(s " TreeMap.transform/ $getClass" )
1245
- def localCtx =
1246
- if (tree.hasType && tree.symbol.exists) ctx.withOwner(tree.symbol) else ctx
1247
-
1248
- if (skipTransform(tree)) tree
1249
- else tree match {
1250
- case Ident (name) =>
1251
- tree
1252
- case Select (qualifier, name) =>
1253
- cpy.Select (tree)(transform(qualifier), name)
1254
- case This (qual) =>
1255
- tree
1256
- case Super (qual, mix) =>
1257
- cpy.Super (tree)(transform(qual), mix)
1258
- case Apply (fun, args) =>
1259
- cpy.Apply (tree)(transform(fun), transform(args))
1260
- case TypeApply (fun, args) =>
1261
- cpy.TypeApply (tree)(transform(fun), transform(args))
1262
- case Literal (const) =>
1263
- tree
1264
- case New (tpt) =>
1265
- cpy.New (tree)(transform(tpt))
1266
- case Typed (expr, tpt) =>
1267
- cpy.Typed (tree)(transform(expr), transform(tpt))
1268
- case NamedArg (name, arg) =>
1269
- cpy.NamedArg (tree)(name, transform(arg))
1270
- case Assign (lhs, rhs) =>
1271
- cpy.Assign (tree)(transform(lhs), transform(rhs))
1272
- case Block (stats, expr) =>
1273
- cpy.Block (tree)(transformStats(stats), transform(expr))
1274
- case If (cond, thenp, elsep) =>
1275
- cpy.If (tree)(transform(cond), transform(thenp), transform(elsep))
1276
- case Closure (env, meth, tpt) =>
1277
- cpy.Closure (tree)(transform(env), transform(meth), transform(tpt))
1278
- case Match (selector, cases) =>
1279
- cpy.Match (tree)(transform(selector), transformSub(cases))
1280
- case CaseDef (pat, guard, body) =>
1281
- cpy.CaseDef (tree)(transform(pat), transform(guard), transform(body))
1282
- case Labeled (bind, expr) =>
1283
- cpy.Labeled (tree)(transformSub(bind), transform(expr))
1284
- case Return (expr, from) =>
1285
- cpy.Return (tree)(transform(expr), transformSub(from))
1286
- case WhileDo (cond, body) =>
1287
- cpy.WhileDo (tree)(transform(cond), transform(body))
1288
- case Try (block, cases, finalizer) =>
1289
- cpy.Try (tree)(transform(block), transformSub(cases), transform(finalizer))
1290
- case SeqLiteral (elems, elemtpt) =>
1291
- cpy.SeqLiteral (tree)(transform(elems), transform(elemtpt))
1292
- case Inlined (call, bindings, expansion) =>
1293
- cpy.Inlined (tree)(call, transformSub(bindings), transform(expansion)(inlineContext(call)))
1294
- case TypeTree () =>
1295
- tree
1296
- case SingletonTypeTree (ref) =>
1297
- cpy.SingletonTypeTree (tree)(transform(ref))
1298
- case RefinedTypeTree (tpt, refinements) =>
1299
- cpy.RefinedTypeTree (tree)(transform(tpt), transformSub(refinements))
1300
- case AppliedTypeTree (tpt, args) =>
1301
- cpy.AppliedTypeTree (tree)(transform(tpt), transform(args))
1302
- case LambdaTypeTree (tparams, body) =>
1303
- implicit val ctx = localCtx
1304
- cpy.LambdaTypeTree (tree)(transformSub(tparams), transform(body))
1305
- case MatchTypeTree (bound, selector, cases) =>
1306
- cpy.MatchTypeTree (tree)(transform(bound), transform(selector), transformSub(cases))
1307
- case ByNameTypeTree (result) =>
1308
- cpy.ByNameTypeTree (tree)(transform(result))
1309
- case TypeBoundsTree (lo, hi, alias) =>
1310
- cpy.TypeBoundsTree (tree)(transform(lo), transform(hi), transform(alias))
1311
- case Bind (name, body) =>
1312
- cpy.Bind (tree)(name, transform(body))
1313
- case Alternative (trees) =>
1314
- cpy.Alternative (tree)(transform(trees))
1315
- case UnApply (fun, implicits, patterns) =>
1316
- cpy.UnApply (tree)(transform(fun), transform(implicits), transform(patterns))
1317
- case EmptyValDef =>
1318
- tree
1319
- case tree @ ValDef (name, tpt, _) =>
1320
- implicit val ctx = localCtx
1321
- val tpt1 = transform(tpt)
1322
- val rhs1 = transform(tree.rhs)
1323
- cpy.ValDef (tree)(name, tpt1, rhs1)
1324
- case tree @ DefDef (name, tparams, vparamss, tpt, _) =>
1325
- implicit val ctx = localCtx
1326
- cpy.DefDef (tree)(name, transformSub(tparams), vparamss mapConserve (transformSub(_)), transform(tpt), transform(tree.rhs))
1327
- case tree @ TypeDef (name, rhs) =>
1328
- implicit val ctx = localCtx
1329
- cpy.TypeDef (tree)(name, transform(rhs))
1330
- case tree @ Template (constr, parents, self, _) if tree.derived.isEmpty =>
1331
- cpy.Template (tree)(transformSub(constr), transform(tree.parents), Nil , transformSub(self), transformStats(tree.body))
1332
- case Import (expr, selectors) =>
1333
- cpy.Import (tree)(transform(expr), selectors)
1334
- case PackageDef (pid, stats) =>
1335
- cpy.PackageDef (tree)(transformSub(pid), transformStats(stats)(localCtx))
1336
- case Annotated (arg, annot) =>
1337
- cpy.Annotated (tree)(transform(arg), transform(annot))
1338
- case Thicket (trees) =>
1339
- val trees1 = transform(trees)
1340
- if (trees1 eq trees) tree else Thicket (trees1)
1341
- case _ =>
1342
- transformMoreCases(tree)
1238
+ def transform (tree : Tree )(using Context ): Tree = {
1239
+ withContext(
1240
+ if tree.source != ctx.source && tree.source.exists
1241
+ then ctx.withSource(tree.source)
1242
+ else ctx
1243
+ ){
1244
+ Stats .record(s " TreeMap.transform/ $getClass" )
1245
+ def localCtx =
1246
+ if (tree.hasType && tree.symbol.exists) ctx.withOwner(tree.symbol) else ctx
1247
+
1248
+ if (skipTransform(tree)) tree
1249
+ else tree match {
1250
+ case Ident (name) =>
1251
+ tree
1252
+ case Select (qualifier, name) =>
1253
+ cpy.Select (tree)(transform(qualifier), name)
1254
+ case This (qual) =>
1255
+ tree
1256
+ case Super (qual, mix) =>
1257
+ cpy.Super (tree)(transform(qual), mix)
1258
+ case Apply (fun, args) =>
1259
+ cpy.Apply (tree)(transform(fun), transform(args))
1260
+ case TypeApply (fun, args) =>
1261
+ cpy.TypeApply (tree)(transform(fun), transform(args))
1262
+ case Literal (const) =>
1263
+ tree
1264
+ case New (tpt) =>
1265
+ cpy.New (tree)(transform(tpt))
1266
+ case Typed (expr, tpt) =>
1267
+ cpy.Typed (tree)(transform(expr), transform(tpt))
1268
+ case NamedArg (name, arg) =>
1269
+ cpy.NamedArg (tree)(name, transform(arg))
1270
+ case Assign (lhs, rhs) =>
1271
+ cpy.Assign (tree)(transform(lhs), transform(rhs))
1272
+ case Block (stats, expr) =>
1273
+ cpy.Block (tree)(transformStats(stats), transform(expr))
1274
+ case If (cond, thenp, elsep) =>
1275
+ cpy.If (tree)(transform(cond), transform(thenp), transform(elsep))
1276
+ case Closure (env, meth, tpt) =>
1277
+ cpy.Closure (tree)(transform(env), transform(meth), transform(tpt))
1278
+ case Match (selector, cases) =>
1279
+ cpy.Match (tree)(transform(selector), transformSub(cases))
1280
+ case CaseDef (pat, guard, body) =>
1281
+ cpy.CaseDef (tree)(transform(pat), transform(guard), transform(body))
1282
+ case Labeled (bind, expr) =>
1283
+ cpy.Labeled (tree)(transformSub(bind), transform(expr))
1284
+ case Return (expr, from) =>
1285
+ cpy.Return (tree)(transform(expr), transformSub(from))
1286
+ case WhileDo (cond, body) =>
1287
+ cpy.WhileDo (tree)(transform(cond), transform(body))
1288
+ case Try (block, cases, finalizer) =>
1289
+ cpy.Try (tree)(transform(block), transformSub(cases), transform(finalizer))
1290
+ case SeqLiteral (elems, elemtpt) =>
1291
+ cpy.SeqLiteral (tree)(transform(elems), transform(elemtpt))
1292
+ case Inlined (call, bindings, expansion) =>
1293
+ cpy.Inlined (tree)(call, transformSub(bindings), transform(expansion)(using inlineContext(call)))
1294
+ case TypeTree () =>
1295
+ tree
1296
+ case SingletonTypeTree (ref) =>
1297
+ cpy.SingletonTypeTree (tree)(transform(ref))
1298
+ case RefinedTypeTree (tpt, refinements) =>
1299
+ cpy.RefinedTypeTree (tree)(transform(tpt), transformSub(refinements))
1300
+ case AppliedTypeTree (tpt, args) =>
1301
+ cpy.AppliedTypeTree (tree)(transform(tpt), transform(args))
1302
+ case LambdaTypeTree (tparams, body) =>
1303
+ withContext(localCtx) {
1304
+ cpy.LambdaTypeTree (tree)(transformSub(tparams), transform(body))
1305
+ }
1306
+ case MatchTypeTree (bound, selector, cases) =>
1307
+ cpy.MatchTypeTree (tree)(transform(bound), transform(selector), transformSub(cases))
1308
+ case ByNameTypeTree (result) =>
1309
+ cpy.ByNameTypeTree (tree)(transform(result))
1310
+ case TypeBoundsTree (lo, hi, alias) =>
1311
+ cpy.TypeBoundsTree (tree)(transform(lo), transform(hi), transform(alias))
1312
+ case Bind (name, body) =>
1313
+ cpy.Bind (tree)(name, transform(body))
1314
+ case Alternative (trees) =>
1315
+ cpy.Alternative (tree)(transform(trees))
1316
+ case UnApply (fun, implicits, patterns) =>
1317
+ cpy.UnApply (tree)(transform(fun), transform(implicits), transform(patterns))
1318
+ case EmptyValDef =>
1319
+ tree
1320
+ case tree @ ValDef (name, tpt, _) =>
1321
+ withContext(localCtx) {
1322
+ val tpt1 = transform(tpt)
1323
+ val rhs1 = transform(tree.rhs)
1324
+ cpy.ValDef (tree)(name, tpt1, rhs1)
1325
+ }
1326
+ case tree @ DefDef (name, tparams, vparamss, tpt, _) =>
1327
+ withContext(localCtx) {
1328
+ cpy.DefDef (tree)(name, transformSub(tparams), vparamss mapConserve (transformSub(_)), transform(tpt), transform(tree.rhs))
1329
+ }
1330
+ case tree @ TypeDef (name, rhs) =>
1331
+ withContext(localCtx) {
1332
+ cpy.TypeDef (tree)(name, transform(rhs))
1333
+ }
1334
+ case tree @ Template (constr, parents, self, _) if tree.derived.isEmpty =>
1335
+ cpy.Template (tree)(transformSub(constr), transform(tree.parents), Nil , transformSub(self), transformStats(tree.body))
1336
+ case Import (expr, selectors) =>
1337
+ cpy.Import (tree)(transform(expr), selectors)
1338
+ case PackageDef (pid, stats) =>
1339
+ cpy.PackageDef (tree)(transformSub(pid), transformStats(stats)(localCtx))
1340
+ case Annotated (arg, annot) =>
1341
+ cpy.Annotated (tree)(transform(arg), transform(annot))
1342
+ case Thicket (trees) =>
1343
+ val trees1 = transform(trees)
1344
+ if (trees1 eq trees) tree else Thicket (trees1)
1345
+ case _ =>
1346
+ transformMoreCases(tree)
1347
+ }
1343
1348
}
1344
1349
}
1345
1350
@@ -1424,8 +1429,9 @@ object Trees {
1424
1429
case AppliedTypeTree (tpt, args) =>
1425
1430
this (this (x, tpt), args)
1426
1431
case LambdaTypeTree (tparams, body) =>
1427
- implicit val ctx = localCtx
1428
- this (this (x, tparams), body)
1432
+ withContext(localCtx) {
1433
+ this (this (x, tparams), body)
1434
+ }
1429
1435
case MatchTypeTree (bound, selector, cases) =>
1430
1436
this (this (this (x, bound), selector), cases)
1431
1437
case ByNameTypeTree (result) =>
0 commit comments