@@ -32,26 +32,25 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
3232
3333 override def transformPhase (using Context ): Phase = this .next
3434
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)
5554
5655 private object ExpressionTransformer extends TreeMap :
5756 override def transform (tree : Tree )(using Context ): Tree =
@@ -73,7 +72,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
7372
7473 // non-static object
7574 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 )
7776
7877 // local variable
7978 case tree : Ident if isLocalVariable(tree.symbol) =>
@@ -141,7 +140,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
141140
142141 private def getTransformedArgs (tree : Tree )(using Context ): List [Tree ] =
143142 tree match
144- case _ : (Ident | Select ) => List .empty
143+ case _ : (Ident | Select ) => Nil
145144 case Apply (fun, args) => getTransformedArgs(fun) ++ args.map(transform)
146145 case TypeApply (fun, _) => getTransformedArgs(fun)
147146
@@ -197,20 +196,20 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
197196 else nullLiteral
198197
199198 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 )
201200
202201 private def getLocalOuter (tree : Tree )(outerCls : ClassSymbol )(using Context ): Tree =
203202 val strategy = ReflectEvalStrategy .LocalOuter (outerCls)
204- reflectEval(tree)(nullLiteral, strategy, List .empty )
203+ reflectEval(tree)(nullLiteral, strategy, Nil )
205204
206205 private def getOuter (tree : Tree )(qualifier : Tree , outerCls : ClassSymbol )(using Context ): Tree =
207206 val strategy = ReflectEvalStrategy .Outer (outerCls)
208- reflectEval(tree)(qualifier, strategy, List .empty )
207+ reflectEval(tree)(qualifier, strategy, Nil )
209208
210209 private def getLocalValue (tree : Tree )(variable : Symbol )(using Context ): Tree =
211210 val isByName = isByNameParam(variable.info)
212211 val strategy = ReflectEvalStrategy .LocalValue (variable.asTerm, isByName)
213- reflectEval(tree)(nullLiteral, strategy, List .empty )
212+ reflectEval(tree)(nullLiteral, strategy, Nil )
214213
215214 private def isByNameParam (tpe : Type )(using Context ): Boolean =
216215 tpe match
@@ -226,7 +225,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
226225 val byName = isByNameParam(variable.info)
227226 val strategy = ReflectEvalStrategy .ClassCapture (variable.asTerm, cls, byName)
228227 val qualifier = thisOrOuterValue(tree)(cls)
229- reflectEval(tree)(qualifier, strategy, List .empty )
228+ reflectEval(tree)(qualifier, strategy, Nil )
230229
231230 private def setClassCapture (tree : Tree )(variable : Symbol , cls : ClassSymbol , value : Tree )(using Context ) =
232231 val strategy = ReflectEvalStrategy .ClassCaptureAssign (variable.asTerm, cls)
@@ -237,7 +236,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
237236 val isByName = isByNameParam(variable.info)
238237 val strategy =
239238 ReflectEvalStrategy .MethodCapture (variable.asTerm, method.asTerm, isByName)
240- reflectEval(tree)(nullLiteral, strategy, List .empty )
239+ reflectEval(tree)(nullLiteral, strategy, Nil )
241240
242241 private def setMethodCapture (tree : Tree )(variable : Symbol , method : Symbol , value : Tree )(using Context ) =
243242 val strategy =
@@ -246,12 +245,12 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
246245
247246 private def getStaticObject (tree : Tree )(obj : Symbol )(using ctx : Context ): Tree =
248247 val strategy = ReflectEvalStrategy .StaticObject (obj.asClass)
249- reflectEval(tree)(nullLiteral, strategy, List .empty )
248+ reflectEval(tree)(nullLiteral, strategy, Nil )
250249
251250 private def getField (tree : Tree )(qualifier : Tree , field : TermSymbol )(using Context ): Tree =
252251 val byName = isByNameParam(field.info)
253252 val strategy = ReflectEvalStrategy .Field (field, byName)
254- reflectEval(tree)(qualifier, strategy, List .empty )
253+ reflectEval(tree)(qualifier, strategy, Nil )
255254
256255 private def setField (tree : Tree )(qualifier : Tree , field : TermSymbol , rhs : Tree )(using Context ): Tree =
257256 val strategy = ReflectEvalStrategy .FieldAssign (field)
@@ -272,7 +271,7 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
272271 )(using Context ): Tree =
273272 val evalArgs = List (
274273 qualifier,
275- Literal (Constant (strategy.toString)),
274+ Literal (Constant (strategy.toString)), // only useful for debugging, when printing trees
276275 JavaSeqLiteral (args, TypeTree (ctx.definitions.ObjectType ))
277276 )
278277 cpy
@@ -318,4 +317,4 @@ private class ExtractExpression(config: ExpressionCompilerConfig, expressionStor
318317 symbol.ownersIterator.exists(_ == evaluateMethod)
319318
320319private object ExtractExpression :
321- val name : String = " extract-expression "
320+ val name : String = " extractExpression "
0 commit comments