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