@@ -218,7 +218,7 @@ object TreeTransforms {
218
218
* i <= j
219
219
* j == transforms.length || transform(j) defines a non-default method with given `name`
220
220
*/
221
- private def index (transformations : Array [TreeTransform ], name : String ): Array [Int ] = {
221
+ private def index (transformations : Array [Class [_ <: TreeTransform ] ], name : String ): Array [Int ] = {
222
222
val len = transformations.length
223
223
val next = new Array [Int ](len + 1 )
224
224
var nextTransform : Int = len
@@ -231,7 +231,7 @@ object TreeTransforms {
231
231
var i = len - 1
232
232
while (i >= 0 ) {
233
233
// update nextTransform if this phase redefines the method
234
- if (hasRedefinedMethod(transformations(i).getClass , name)) {
234
+ if (hasRedefinedMethod(transformations(i), name)) {
235
235
nextTransform = i
236
236
}
237
237
next(i) = nextTransform
@@ -240,8 +240,8 @@ object TreeTransforms {
240
240
next
241
241
}
242
242
243
- private def indexUpdate (prev : Array [Int ], changedTansformation : TreeTransform , index : Int , name : String , copy : Boolean = true ) = {
244
- val isDefinedNow = hasRedefinedMethod(changedTansformation.getClass , name)
243
+ private def indexUpdate (prev : Array [Int ], changedTansformation : Class [_ <: TreeTransform ] , index : Int , name : String , copy : Boolean = true ) = {
244
+ val isDefinedNow = hasRedefinedMethod(changedTansformation, name)
245
245
val wasDefinedBefore = prev(index) == index
246
246
if (isDefinedNow == wasDefinedBefore) prev
247
247
else {
@@ -259,7 +259,7 @@ object TreeTransforms {
259
259
}
260
260
}
261
261
262
- def this (transformations : Array [TreeTransform ]) = {
262
+ def this (transformations : Array [Class [_ <: TreeTransform ] ]) = {
263
263
this ()
264
264
nxPrepIdent = index(transformations, " prepareForIdent" )
265
265
nxPrepSelect = index(transformations, " prepareForSelect" )
@@ -329,73 +329,78 @@ object TreeTransforms {
329
329
nxTransOther = index(transformations, " transformOther" )
330
330
}
331
331
332
+ def this (transformations : Array [TreeTransform ]) = {
333
+ this (transformations.map(_.getClass))
334
+ }
335
+
332
336
def this (prev : NXTransformations , changedTansformation : TreeTransform , transformationIndex : Int , reuse : Boolean = false ) = {
333
337
this ()
334
338
val copy = ! reuse
335
- nxPrepIdent = indexUpdate(prev.nxPrepIdent, changedTansformation, transformationIndex, " prepareForIdent" , copy)
336
- nxPrepSelect = indexUpdate(prev.nxPrepSelect, changedTansformation, transformationIndex, " prepareForSelect" , copy)
337
- nxPrepThis = indexUpdate(prev.nxPrepThis, changedTansformation, transformationIndex, " prepareForThis" , copy)
338
- nxPrepSuper = indexUpdate(prev.nxPrepSuper, changedTansformation, transformationIndex, " prepareForSuper" , copy)
339
- nxPrepApply = indexUpdate(prev.nxPrepApply, changedTansformation, transformationIndex, " prepareForApply" , copy)
340
- nxPrepTypeApply = indexUpdate(prev.nxPrepTypeApply, changedTansformation, transformationIndex, " prepareForTypeApply" , copy)
341
- nxPrepLiteral = indexUpdate(prev.nxPrepLiteral, changedTansformation, transformationIndex, " prepareForLiteral" , copy)
342
- nxPrepNew = indexUpdate(prev.nxPrepNew, changedTansformation, transformationIndex, " prepareForNew" , copy)
343
- nxPrepPair = indexUpdate(prev.nxPrepPair, changedTansformation, transformationIndex, " prepareForPair" , copy)
344
- nxPrepTyped = indexUpdate(prev.nxPrepTyped, changedTansformation, transformationIndex, " prepareForTyped" , copy)
345
- nxPrepAssign = indexUpdate(prev.nxPrepAssign, changedTansformation, transformationIndex, " prepareForAssign" , copy)
346
- nxPrepBlock = indexUpdate(prev.nxPrepBlock, changedTansformation, transformationIndex, " prepareForBlock" , copy)
347
- nxPrepIf = indexUpdate(prev.nxPrepIf, changedTansformation, transformationIndex, " prepareForIf" , copy)
348
- nxPrepClosure = indexUpdate(prev.nxPrepClosure, changedTansformation, transformationIndex, " prepareForClosure" , copy)
349
- nxPrepMatch = indexUpdate(prev.nxPrepMatch, changedTansformation, transformationIndex, " prepareForMatch" , copy)
350
- nxPrepCaseDef = indexUpdate(prev.nxPrepCaseDef, changedTansformation, transformationIndex, " prepareForCaseDef" , copy)
351
- nxPrepReturn = indexUpdate(prev.nxPrepReturn, changedTansformation, transformationIndex, " prepareForReturn" , copy)
352
- nxPrepTry = indexUpdate(prev.nxPrepTry, changedTansformation, transformationIndex, " prepareForTry" , copy)
353
- nxPrepThrow = indexUpdate(prev.nxPrepThrow, changedTansformation, transformationIndex, " prepareForThrow" , copy)
354
- nxPrepSeqLiteral = indexUpdate(prev.nxPrepSeqLiteral, changedTansformation, transformationIndex, " prepareForSeqLiteral" , copy)
355
- nxPrepTypeTree = indexUpdate(prev.nxPrepTypeTree, changedTansformation, transformationIndex, " prepareForTypeTree" , copy)
356
- nxPrepSelectFromTypeTree = indexUpdate(prev.nxPrepSelectFromTypeTree, changedTansformation, transformationIndex, " prepareForSelectFromTypeTree" , copy)
357
- nxPrepBind = indexUpdate(prev.nxPrepBind, changedTansformation, transformationIndex, " prepareForBind" , copy)
358
- nxPrepAlternative = indexUpdate(prev.nxPrepAlternative, changedTansformation, transformationIndex, " prepareForAlternative" , copy)
359
- nxPrepUnApply = indexUpdate(prev.nxPrepUnApply, changedTansformation, transformationIndex, " prepareForUnApply" , copy)
360
- nxPrepValDef = indexUpdate(prev.nxPrepValDef, changedTansformation, transformationIndex, " prepareForValDef" , copy)
361
- nxPrepDefDef = indexUpdate(prev.nxPrepDefDef, changedTansformation, transformationIndex, " prepareForDefDef" , copy)
362
- nxPrepTypeDef = indexUpdate(prev.nxPrepTypeDef, changedTansformation, transformationIndex, " prepareForTypeDef" , copy)
363
- nxPrepTemplate = indexUpdate(prev.nxPrepTemplate, changedTansformation, transformationIndex, " prepareForTemplate" , copy)
364
- nxPrepPackageDef = indexUpdate(prev.nxPrepPackageDef, changedTansformation, transformationIndex, " prepareForPackageDef" , copy)
365
- nxPrepStats = indexUpdate(prev.nxPrepStats, changedTansformation, transformationIndex, " prepareForStats" , copy)
366
-
367
- nxTransIdent = indexUpdate(prev.nxTransIdent, changedTansformation, transformationIndex, " transformIdent" , copy)
368
- nxTransSelect = indexUpdate(prev.nxTransSelect, changedTansformation, transformationIndex, " transformSelect" , copy)
369
- nxTransThis = indexUpdate(prev.nxTransThis, changedTansformation, transformationIndex, " transformThis" , copy)
370
- nxTransSuper = indexUpdate(prev.nxTransSuper, changedTansformation, transformationIndex, " transformSuper" , copy)
371
- nxTransApply = indexUpdate(prev.nxTransApply, changedTansformation, transformationIndex, " transformApply" , copy)
372
- nxTransTypeApply = indexUpdate(prev.nxTransTypeApply, changedTansformation, transformationIndex, " transformTypeApply" , copy)
373
- nxTransLiteral = indexUpdate(prev.nxTransLiteral, changedTansformation, transformationIndex, " transformLiteral" , copy)
374
- nxTransNew = indexUpdate(prev.nxTransNew, changedTansformation, transformationIndex, " transformNew" , copy)
375
- nxTransPair = indexUpdate(prev.nxTransPair, changedTansformation, transformationIndex, " transformPair" , copy)
376
- nxTransTyped = indexUpdate(prev.nxTransTyped, changedTansformation, transformationIndex, " transformTyped" , copy)
377
- nxTransAssign = indexUpdate(prev.nxTransAssign, changedTansformation, transformationIndex, " transformAssign" , copy)
378
- nxTransBlock = indexUpdate(prev.nxTransBlock, changedTansformation, transformationIndex, " transformBlock" , copy)
379
- nxTransIf = indexUpdate(prev.nxTransIf, changedTansformation, transformationIndex, " transformIf" , copy)
380
- nxTransClosure = indexUpdate(prev.nxTransClosure, changedTansformation, transformationIndex, " transformClosure" , copy)
381
- nxTransMatch = indexUpdate(prev.nxTransMatch, changedTansformation, transformationIndex, " transformMatch" , copy)
382
- nxTransCaseDef = indexUpdate(prev.nxTransCaseDef, changedTansformation, transformationIndex, " transformCaseDef" , copy)
383
- nxTransReturn = indexUpdate(prev.nxTransReturn, changedTansformation, transformationIndex, " transformReturn" , copy)
384
- nxTransTry = indexUpdate(prev.nxTransTry, changedTansformation, transformationIndex, " transformTry" , copy)
385
- nxTransThrow = indexUpdate(prev.nxTransThrow, changedTansformation, transformationIndex, " transformThrow" , copy)
386
- nxTransSeqLiteral = indexUpdate(prev.nxTransSeqLiteral, changedTansformation, transformationIndex, " transformSeqLiteral" , copy)
387
- nxTransTypeTree = indexUpdate(prev.nxTransTypeTree, changedTansformation, transformationIndex, " transformTypeTree" , copy)
388
- nxTransSelectFromTypeTree = indexUpdate(prev.nxTransSelectFromTypeTree, changedTansformation, transformationIndex, " transformSelectFromTypeTree" , copy)
389
- nxTransBind = indexUpdate(prev.nxTransBind, changedTansformation, transformationIndex, " transformBind" , copy)
390
- nxTransAlternative = indexUpdate(prev.nxTransAlternative, changedTansformation, transformationIndex, " transformAlternative" , copy)
391
- nxTransUnApply = indexUpdate(prev.nxTransUnApply, changedTansformation, transformationIndex, " transformUnApply" , copy)
392
- nxTransValDef = indexUpdate(prev.nxTransValDef, changedTansformation, transformationIndex, " transformValDef" , copy)
393
- nxTransDefDef = indexUpdate(prev.nxTransDefDef, changedTansformation, transformationIndex, " transformDefDef" , copy)
394
- nxTransTypeDef = indexUpdate(prev.nxTransTypeDef, changedTansformation, transformationIndex, " transformTypeDef" , copy)
395
- nxTransTemplate = indexUpdate(prev.nxTransTemplate, changedTansformation, transformationIndex, " transformTemplate" , copy)
396
- nxTransPackageDef = indexUpdate(prev.nxTransPackageDef, changedTansformation, transformationIndex, " transformPackageDef" , copy)
397
- nxTransStats = indexUpdate(prev.nxTransStats, changedTansformation, transformationIndex, " transformStats" , copy)
398
- nxTransOther = indexUpdate(prev.nxTransOther, changedTansformation, transformationIndex, " transformOther" , copy)
339
+ val changedTransformationClass = changedTansformation.getClass
340
+ nxPrepIdent = indexUpdate(prev.nxPrepIdent, changedTransformationClass, transformationIndex, " prepareForIdent" , copy)
341
+ nxPrepSelect = indexUpdate(prev.nxPrepSelect, changedTransformationClass, transformationIndex, " prepareForSelect" , copy)
342
+ nxPrepThis = indexUpdate(prev.nxPrepThis, changedTransformationClass, transformationIndex, " prepareForThis" , copy)
343
+ nxPrepSuper = indexUpdate(prev.nxPrepSuper, changedTransformationClass, transformationIndex, " prepareForSuper" , copy)
344
+ nxPrepApply = indexUpdate(prev.nxPrepApply, changedTransformationClass, transformationIndex, " prepareForApply" , copy)
345
+ nxPrepTypeApply = indexUpdate(prev.nxPrepTypeApply, changedTransformationClass, transformationIndex, " prepareForTypeApply" , copy)
346
+ nxPrepLiteral = indexUpdate(prev.nxPrepLiteral, changedTransformationClass, transformationIndex, " prepareForLiteral" , copy)
347
+ nxPrepNew = indexUpdate(prev.nxPrepNew, changedTransformationClass, transformationIndex, " prepareForNew" , copy)
348
+ nxPrepPair = indexUpdate(prev.nxPrepPair, changedTransformationClass, transformationIndex, " prepareForPair" , copy)
349
+ nxPrepTyped = indexUpdate(prev.nxPrepTyped, changedTransformationClass, transformationIndex, " prepareForTyped" , copy)
350
+ nxPrepAssign = indexUpdate(prev.nxPrepAssign, changedTransformationClass, transformationIndex, " prepareForAssign" , copy)
351
+ nxPrepBlock = indexUpdate(prev.nxPrepBlock, changedTransformationClass, transformationIndex, " prepareForBlock" , copy)
352
+ nxPrepIf = indexUpdate(prev.nxPrepIf, changedTransformationClass, transformationIndex, " prepareForIf" , copy)
353
+ nxPrepClosure = indexUpdate(prev.nxPrepClosure, changedTransformationClass, transformationIndex, " prepareForClosure" , copy)
354
+ nxPrepMatch = indexUpdate(prev.nxPrepMatch, changedTransformationClass, transformationIndex, " prepareForMatch" , copy)
355
+ nxPrepCaseDef = indexUpdate(prev.nxPrepCaseDef, changedTransformationClass, transformationIndex, " prepareForCaseDef" , copy)
356
+ nxPrepReturn = indexUpdate(prev.nxPrepReturn, changedTransformationClass, transformationIndex, " prepareForReturn" , copy)
357
+ nxPrepTry = indexUpdate(prev.nxPrepTry, changedTransformationClass, transformationIndex, " prepareForTry" , copy)
358
+ nxPrepThrow = indexUpdate(prev.nxPrepThrow, changedTransformationClass, transformationIndex, " prepareForThrow" , copy)
359
+ nxPrepSeqLiteral = indexUpdate(prev.nxPrepSeqLiteral, changedTransformationClass, transformationIndex, " prepareForSeqLiteral" , copy)
360
+ nxPrepTypeTree = indexUpdate(prev.nxPrepTypeTree, changedTransformationClass, transformationIndex, " prepareForTypeTree" , copy)
361
+ nxPrepSelectFromTypeTree = indexUpdate(prev.nxPrepSelectFromTypeTree, changedTransformationClass, transformationIndex, " prepareForSelectFromTypeTree" , copy)
362
+ nxPrepBind = indexUpdate(prev.nxPrepBind, changedTransformationClass, transformationIndex, " prepareForBind" , copy)
363
+ nxPrepAlternative = indexUpdate(prev.nxPrepAlternative, changedTransformationClass, transformationIndex, " prepareForAlternative" , copy)
364
+ nxPrepUnApply = indexUpdate(prev.nxPrepUnApply, changedTransformationClass, transformationIndex, " prepareForUnApply" , copy)
365
+ nxPrepValDef = indexUpdate(prev.nxPrepValDef, changedTransformationClass, transformationIndex, " prepareForValDef" , copy)
366
+ nxPrepDefDef = indexUpdate(prev.nxPrepDefDef, changedTransformationClass, transformationIndex, " prepareForDefDef" , copy)
367
+ nxPrepTypeDef = indexUpdate(prev.nxPrepTypeDef, changedTransformationClass, transformationIndex, " prepareForTypeDef" , copy)
368
+ nxPrepTemplate = indexUpdate(prev.nxPrepTemplate, changedTransformationClass, transformationIndex, " prepareForTemplate" , copy)
369
+ nxPrepPackageDef = indexUpdate(prev.nxPrepPackageDef, changedTransformationClass, transformationIndex, " prepareForPackageDef" , copy)
370
+ nxPrepStats = indexUpdate(prev.nxPrepStats, changedTransformationClass, transformationIndex, " prepareForStats" , copy)
371
+
372
+ nxTransIdent = indexUpdate(prev.nxTransIdent, changedTransformationClass, transformationIndex, " transformIdent" , copy)
373
+ nxTransSelect = indexUpdate(prev.nxTransSelect, changedTransformationClass, transformationIndex, " transformSelect" , copy)
374
+ nxTransThis = indexUpdate(prev.nxTransThis, changedTransformationClass, transformationIndex, " transformThis" , copy)
375
+ nxTransSuper = indexUpdate(prev.nxTransSuper, changedTransformationClass, transformationIndex, " transformSuper" , copy)
376
+ nxTransApply = indexUpdate(prev.nxTransApply, changedTransformationClass, transformationIndex, " transformApply" , copy)
377
+ nxTransTypeApply = indexUpdate(prev.nxTransTypeApply, changedTransformationClass, transformationIndex, " transformTypeApply" , copy)
378
+ nxTransLiteral = indexUpdate(prev.nxTransLiteral, changedTransformationClass, transformationIndex, " transformLiteral" , copy)
379
+ nxTransNew = indexUpdate(prev.nxTransNew, changedTransformationClass, transformationIndex, " transformNew" , copy)
380
+ nxTransPair = indexUpdate(prev.nxTransPair, changedTransformationClass, transformationIndex, " transformPair" , copy)
381
+ nxTransTyped = indexUpdate(prev.nxTransTyped, changedTransformationClass, transformationIndex, " transformTyped" , copy)
382
+ nxTransAssign = indexUpdate(prev.nxTransAssign, changedTransformationClass, transformationIndex, " transformAssign" , copy)
383
+ nxTransBlock = indexUpdate(prev.nxTransBlock, changedTransformationClass, transformationIndex, " transformBlock" , copy)
384
+ nxTransIf = indexUpdate(prev.nxTransIf, changedTransformationClass, transformationIndex, " transformIf" , copy)
385
+ nxTransClosure = indexUpdate(prev.nxTransClosure, changedTransformationClass, transformationIndex, " transformClosure" , copy)
386
+ nxTransMatch = indexUpdate(prev.nxTransMatch, changedTransformationClass, transformationIndex, " transformMatch" , copy)
387
+ nxTransCaseDef = indexUpdate(prev.nxTransCaseDef, changedTransformationClass, transformationIndex, " transformCaseDef" , copy)
388
+ nxTransReturn = indexUpdate(prev.nxTransReturn, changedTransformationClass, transformationIndex, " transformReturn" , copy)
389
+ nxTransTry = indexUpdate(prev.nxTransTry, changedTransformationClass, transformationIndex, " transformTry" , copy)
390
+ nxTransThrow = indexUpdate(prev.nxTransThrow, changedTransformationClass, transformationIndex, " transformThrow" , copy)
391
+ nxTransSeqLiteral = indexUpdate(prev.nxTransSeqLiteral, changedTransformationClass, transformationIndex, " transformSeqLiteral" , copy)
392
+ nxTransTypeTree = indexUpdate(prev.nxTransTypeTree, changedTransformationClass, transformationIndex, " transformTypeTree" , copy)
393
+ nxTransSelectFromTypeTree = indexUpdate(prev.nxTransSelectFromTypeTree, changedTransformationClass, transformationIndex, " transformSelectFromTypeTree" , copy)
394
+ nxTransBind = indexUpdate(prev.nxTransBind, changedTransformationClass, transformationIndex, " transformBind" , copy)
395
+ nxTransAlternative = indexUpdate(prev.nxTransAlternative, changedTransformationClass, transformationIndex, " transformAlternative" , copy)
396
+ nxTransUnApply = indexUpdate(prev.nxTransUnApply, changedTransformationClass, transformationIndex, " transformUnApply" , copy)
397
+ nxTransValDef = indexUpdate(prev.nxTransValDef, changedTransformationClass, transformationIndex, " transformValDef" , copy)
398
+ nxTransDefDef = indexUpdate(prev.nxTransDefDef, changedTransformationClass, transformationIndex, " transformDefDef" , copy)
399
+ nxTransTypeDef = indexUpdate(prev.nxTransTypeDef, changedTransformationClass, transformationIndex, " transformTypeDef" , copy)
400
+ nxTransTemplate = indexUpdate(prev.nxTransTemplate, changedTransformationClass, transformationIndex, " transformTemplate" , copy)
401
+ nxTransPackageDef = indexUpdate(prev.nxTransPackageDef, changedTransformationClass, transformationIndex, " transformPackageDef" , copy)
402
+ nxTransStats = indexUpdate(prev.nxTransStats, changedTransformationClass, transformationIndex, " transformStats" , copy)
403
+ nxTransOther = indexUpdate(prev.nxTransOther, changedTransformationClass, transformationIndex, " transformOther" , copy)
399
404
}
400
405
401
406
/** Those arrays are used as "execution plan" in order to only execute non-tivial transformations\preparations
0 commit comments