@@ -32,26 +32,25 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
32
32
33
33
override def transformPhase (using Context ): Phase = this .next
34
34
35
- override protected def newTransformer (using Context ): Transformer =
36
- new Transformer :
37
- var expressionTree : Tree | Null = null
38
- override def transform (tree : Tree )(using Context ): Tree =
39
- tree match
40
- case PackageDef (pid, stats) =>
41
- val evaluationClassDef =
42
- stats.find(_.symbol == config.expressionClass)
43
- val others = stats.filter(_.symbol != config.expressionClass)
44
- val transformedStats = (others ++ evaluationClassDef).map(transform)
45
- PackageDef (pid, transformedStats)
46
- case tree : ValDef if isExpressionVal(tree.symbol) =>
47
- expressionTree = tree.rhs
48
- expressionStore.store(tree.symbol)
49
- unitLiteral
50
- case tree : DefDef if tree.symbol == config.evaluateMethod =>
51
- val transformedExpr = ExpressionTransformer .transform(expressionTree.nn)
52
- cpy.DefDef (tree)(rhs = transformedExpr)
53
- case tree =>
54
- super .transform(tree)
35
+ override protected def newTransformer (using Context ): Transformer = new ExtractExpressionTransformer
36
+
37
+ private class ExtractExpressionTransformer extends Transformer :
38
+ private var expressionTree : Tree | Null = null
39
+ override def transform (tree : Tree )(using Context ): Tree =
40
+ tree match
41
+ case PackageDef (pid, stats) =>
42
+ val (evaluationClassDef, others) = stats.partition(_.symbol == config.expressionClass)
43
+ val transformedStats = (others ++ evaluationClassDef).map(transform)
44
+ cpy.PackageDef (tree)(pid, transformedStats)
45
+ case tree : ValDef if isExpressionVal(tree.symbol) =>
46
+ expressionTree = tree.rhs
47
+ expressionStore.store(tree.symbol)
48
+ unitLiteral
49
+ case tree : DefDef if tree.symbol == config.evaluateMethod =>
50
+ val transformedExpr = ExpressionTransformer .transform(expressionTree.nn)
51
+ cpy.DefDef (tree)(rhs = transformedExpr)
52
+ case tree =>
53
+ super .transform(tree)
55
54
56
55
private object ExpressionTransformer extends TreeMap :
57
56
override def transform (tree : Tree )(using Context ): Tree =
@@ -73,7 +72,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
73
72
74
73
// non-static object
75
74
case tree : (Ident | Select ) if isNonStaticObject(tree.symbol) =>
76
- callMethod(tree)(getTransformedQualifier(tree), tree.symbol.asTerm, List .empty )
75
+ callMethod(tree)(getTransformedQualifier(tree), tree.symbol.asTerm, Nil )
77
76
78
77
// local variable
79
78
case tree : Ident if isLocalVariable(tree.symbol) =>
@@ -141,7 +140,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
141
140
142
141
private def getTransformedArgs (tree : Tree )(using Context ): List [Tree ] =
143
142
tree match
144
- case _ : (Ident | Select ) => List .empty
143
+ case _ : (Ident | Select ) => Nil
145
144
case Apply (fun, args) => getTransformedArgs(fun) ++ args.map(transform)
146
145
case TypeApply (fun, _) => getTransformedArgs(fun)
147
146
@@ -197,20 +196,20 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
197
196
else nullLiteral
198
197
199
198
private def getThis (tree : Tree )(cls : ClassSymbol )(using Context ): Tree =
200
- reflectEval(tree)(nullLiteral, ReflectEvalStrategy .This (cls), List .empty )
199
+ reflectEval(tree)(nullLiteral, ReflectEvalStrategy .This (cls), Nil )
201
200
202
201
private def getLocalOuter (tree : Tree )(outerCls : ClassSymbol )(using Context ): Tree =
203
202
val strategy = ReflectEvalStrategy .LocalOuter (outerCls)
204
- reflectEval(tree)(nullLiteral, strategy, List .empty )
203
+ reflectEval(tree)(nullLiteral, strategy, Nil )
205
204
206
205
private def getOuter (tree : Tree )(qualifier : Tree , outerCls : ClassSymbol )(using Context ): Tree =
207
206
val strategy = ReflectEvalStrategy .Outer (outerCls)
208
- reflectEval(tree)(qualifier, strategy, List .empty )
207
+ reflectEval(tree)(qualifier, strategy, Nil )
209
208
210
209
private def getLocalValue (tree : Tree )(variable : Symbol )(using Context ): Tree =
211
210
val isByName = isByNameParam(variable.info)
212
211
val strategy = ReflectEvalStrategy .LocalValue (variable.asTerm, isByName)
213
- reflectEval(tree)(nullLiteral, strategy, List .empty )
212
+ reflectEval(tree)(nullLiteral, strategy, Nil )
214
213
215
214
private def isByNameParam (tpe : Type )(using Context ): Boolean =
216
215
tpe match
@@ -226,7 +225,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
226
225
val byName = isByNameParam(variable.info)
227
226
val strategy = ReflectEvalStrategy .ClassCapture (variable.asTerm, cls, byName)
228
227
val qualifier = thisOrOuterValue(tree)(cls)
229
- reflectEval(tree)(qualifier, strategy, List .empty )
228
+ reflectEval(tree)(qualifier, strategy, Nil )
230
229
231
230
private def setClassCapture (tree : Tree )(variable : Symbol , cls : ClassSymbol , value : Tree )(using Context ) =
232
231
val strategy = ReflectEvalStrategy .ClassCaptureAssign (variable.asTerm, cls)
@@ -237,7 +236,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
237
236
val isByName = isByNameParam(variable.info)
238
237
val strategy =
239
238
ReflectEvalStrategy .MethodCapture (variable.asTerm, method.asTerm, isByName)
240
- reflectEval(tree)(nullLiteral, strategy, List .empty )
239
+ reflectEval(tree)(nullLiteral, strategy, Nil )
241
240
242
241
private def setMethodCapture (tree : Tree )(variable : Symbol , method : Symbol , value : Tree )(using Context ) =
243
242
val strategy =
@@ -246,12 +245,12 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
246
245
247
246
private def getStaticObject (tree : Tree )(obj : Symbol )(using ctx : Context ): Tree =
248
247
val strategy = ReflectEvalStrategy .StaticObject (obj.asClass)
249
- reflectEval(tree)(nullLiteral, strategy, List .empty )
248
+ reflectEval(tree)(nullLiteral, strategy, Nil )
250
249
251
250
private def getField (tree : Tree )(qualifier : Tree , field : TermSymbol )(using Context ): Tree =
252
251
val byName = isByNameParam(field.info)
253
252
val strategy = ReflectEvalStrategy .Field (field, byName)
254
- reflectEval(tree)(qualifier, strategy, List .empty )
253
+ reflectEval(tree)(qualifier, strategy, Nil )
255
254
256
255
private def setField (tree : Tree )(qualifier : Tree , field : TermSymbol , rhs : Tree )(using Context ): Tree =
257
256
val strategy = ReflectEvalStrategy .FieldAssign (field)
@@ -272,7 +271,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
272
271
)(using Context ): Tree =
273
272
val evalArgs = List (
274
273
qualifier,
275
- Literal (Constant (strategy.toString)),
274
+ Literal (Constant (strategy.toString)), // only useful for debugging, when printing trees
276
275
JavaSeqLiteral (args, TypeTree (ctx.definitions.ObjectType ))
277
276
)
278
277
cpy
@@ -318,4 +317,4 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
318
317
symbol.ownersIterator.exists(_ == evaluateMethod)
319
318
320
319
private object ExtractExpression :
321
- val name : String = " extract-expression "
320
+ val name : String = " extractExpression "
0 commit comments