@@ -981,6 +981,9 @@ object Trees {
981
981
protected def postProcess (tree : Tree , copied : untpd.Tree ): copied.ThisTree [T ]
982
982
protected def postProcess (tree : Tree , copied : untpd.MemberDef ): copied.ThisTree [T ]
983
983
984
+ /** Soucre of the copied tree */
985
+ protected def sourceFile (tree : Tree ): SourceFile = tree.source
986
+
984
987
protected def finalize (tree : Tree , copied : untpd.Tree ): copied.ThisTree [T ] =
985
988
postProcess(tree, copied.withSpan(tree.span).withAttachmentsFrom(tree))
986
989
@@ -990,187 +993,187 @@ object Trees {
990
993
def Ident (tree : Tree )(name : Name )(implicit ctx : Context ): Ident = tree match {
991
994
case tree : BackquotedIdent =>
992
995
if (name == tree.name) tree
993
- else finalize(tree, new BackquotedIdent (name)(tree.source ))
996
+ else finalize(tree, new BackquotedIdent (name)(sourceFile( tree) ))
994
997
case tree : Ident if name == tree.name => tree
995
- case _ => finalize(tree, untpd.Ident (name)(tree.source ))
998
+ case _ => finalize(tree, untpd.Ident (name)(sourceFile( tree) ))
996
999
}
997
1000
def Select (tree : Tree )(qualifier : Tree , name : Name )(implicit ctx : Context ): Select = tree match {
998
1001
case tree : SelectWithSig =>
999
1002
if ((qualifier eq tree.qualifier) && (name == tree.name)) tree
1000
- else finalize(tree, new SelectWithSig (qualifier, name, tree.sig)(tree.source ))
1003
+ else finalize(tree, new SelectWithSig (qualifier, name, tree.sig)(sourceFile( tree) ))
1001
1004
case tree : Select if (qualifier eq tree.qualifier) && (name == tree.name) => tree
1002
- case _ => finalize(tree, untpd.Select (qualifier, name)(tree.source ))
1005
+ case _ => finalize(tree, untpd.Select (qualifier, name)(sourceFile( tree) ))
1003
1006
}
1004
1007
/** Copy Ident or Select trees */
1005
1008
def Ref (tree : RefTree )(name : Name )(implicit ctx : Context ): RefTree = tree match {
1006
1009
case Ident (_) => Ident (tree)(name)
1007
1010
case Select (qual, _) => Select (tree)(qual, name)
1008
1011
}
1009
1012
def This (tree : Tree )(qual : untpd.Ident )(implicit ctx : Context ): This = tree match {
1010
- case tree : This if qual eq tree.qual => tree
1011
- case _ => finalize(tree, untpd.This (qual)(tree.source ))
1013
+ case tree : This if ( qual eq tree.qual) => tree
1014
+ case _ => finalize(tree, untpd.This (qual)(sourceFile( tree) ))
1012
1015
}
1013
1016
def Super (tree : Tree )(qual : Tree , mix : untpd.Ident )(implicit ctx : Context ): Super = tree match {
1014
1017
case tree : Super if (qual eq tree.qual) && (mix eq tree.mix) => tree
1015
- case _ => finalize(tree, untpd.Super (qual, mix)(tree.source ))
1018
+ case _ => finalize(tree, untpd.Super (qual, mix)(sourceFile( tree) ))
1016
1019
}
1017
1020
def Apply (tree : Tree )(fun : Tree , args : List [Tree ])(implicit ctx : Context ): Apply = tree match {
1018
1021
case tree : Apply if (fun eq tree.fun) && (args eq tree.args) => tree
1019
- case _ => finalize(tree, untpd.Apply (fun, args)(tree.source ))
1022
+ case _ => finalize(tree, untpd.Apply (fun, args)(sourceFile( tree) ))
1020
1023
}
1021
1024
def TypeApply (tree : Tree )(fun : Tree , args : List [Tree ])(implicit ctx : Context ): TypeApply = tree match {
1022
1025
case tree : TypeApply if (fun eq tree.fun) && (args eq tree.args) => tree
1023
- case _ => finalize(tree, untpd.TypeApply (fun, args)(tree.source ))
1026
+ case _ => finalize(tree, untpd.TypeApply (fun, args)(sourceFile( tree) ))
1024
1027
}
1025
1028
def Literal (tree : Tree )(const : Constant )(implicit ctx : Context ): Literal = tree match {
1026
1029
case tree : Literal if const == tree.const => tree
1027
- case _ => finalize(tree, untpd.Literal (const)(tree.source ))
1030
+ case _ => finalize(tree, untpd.Literal (const)(sourceFile( tree) ))
1028
1031
}
1029
1032
def New (tree : Tree )(tpt : Tree )(implicit ctx : Context ): New = tree match {
1030
- case tree : New if tpt eq tree.tpt => tree
1031
- case _ => finalize(tree, untpd.New (tpt)(tree.source ))
1033
+ case tree : New if ( tpt eq tree.tpt) => tree
1034
+ case _ => finalize(tree, untpd.New (tpt)(sourceFile( tree) ))
1032
1035
}
1033
1036
def Typed (tree : Tree )(expr : Tree , tpt : Tree )(implicit ctx : Context ): Typed = tree match {
1034
1037
case tree : Typed if (expr eq tree.expr) && (tpt eq tree.tpt) => tree
1035
- case tree => finalize(tree, untpd.Typed (expr, tpt)(tree.source ))
1038
+ case tree => finalize(tree, untpd.Typed (expr, tpt)(sourceFile( tree) ))
1036
1039
// .ensuring(res => res.uniqueId != 1471, s"source = $tree, ${tree.uniqueId}")
1037
1040
}
1038
1041
def NamedArg (tree : Tree )(name : Name , arg : Tree )(implicit ctx : Context ): NamedArg = tree match {
1039
1042
case tree : NamedArg if (name == tree.name) && (arg eq tree.arg) => tree
1040
- case _ => finalize(tree, untpd.NamedArg (name, arg)(tree.source ))
1043
+ case _ => finalize(tree, untpd.NamedArg (name, arg)(sourceFile( tree) ))
1041
1044
}
1042
1045
def Assign (tree : Tree )(lhs : Tree , rhs : Tree )(implicit ctx : Context ): Assign = tree match {
1043
1046
case tree : Assign if (lhs eq tree.lhs) && (rhs eq tree.rhs) => tree
1044
- case _ => finalize(tree, untpd.Assign (lhs, rhs)(tree.source ))
1047
+ case _ => finalize(tree, untpd.Assign (lhs, rhs)(sourceFile( tree) ))
1045
1048
}
1046
1049
def Block (tree : Tree )(stats : List [Tree ], expr : Tree )(implicit ctx : Context ): Block = tree match {
1047
1050
case tree : Block if (stats eq tree.stats) && (expr eq tree.expr) => tree
1048
- case _ => finalize(tree, untpd.Block (stats, expr)(tree.source ))
1051
+ case _ => finalize(tree, untpd.Block (stats, expr)(sourceFile( tree) ))
1049
1052
}
1050
1053
def If (tree : Tree )(cond : Tree , thenp : Tree , elsep : Tree )(implicit ctx : Context ): If = tree match {
1051
1054
case tree : If if (cond eq tree.cond) && (thenp eq tree.thenp) && (elsep eq tree.elsep) => tree
1052
- case tree : InlineIf => finalize(tree, untpd.InlineIf (cond, thenp, elsep)(tree.source ))
1053
- case _ => finalize(tree, untpd.If (cond, thenp, elsep)(tree.source ))
1055
+ case tree : InlineIf => finalize(tree, untpd.InlineIf (cond, thenp, elsep)(sourceFile( tree) ))
1056
+ case _ => finalize(tree, untpd.If (cond, thenp, elsep)(sourceFile( tree) ))
1054
1057
}
1055
1058
def Closure (tree : Tree )(env : List [Tree ], meth : Tree , tpt : Tree )(implicit ctx : Context ): Closure = tree match {
1056
1059
case tree : Closure if (env eq tree.env) && (meth eq tree.meth) && (tpt eq tree.tpt) => tree
1057
- case _ => finalize(tree, untpd.Closure (env, meth, tpt)(tree.source ))
1060
+ case _ => finalize(tree, untpd.Closure (env, meth, tpt)(sourceFile( tree) ))
1058
1061
}
1059
1062
def Match (tree : Tree )(selector : Tree , cases : List [CaseDef ])(implicit ctx : Context ): Match = tree match {
1060
1063
case tree : Match if (selector eq tree.selector) && (cases eq tree.cases) => tree
1061
- case tree : InlineMatch => finalize(tree, untpd.InlineMatch (selector, cases)(tree.source ))
1062
- case _ => finalize(tree, untpd.Match (selector, cases)(tree.source ))
1064
+ case tree : InlineMatch => finalize(tree, untpd.InlineMatch (selector, cases)(sourceFile( tree) ))
1065
+ case _ => finalize(tree, untpd.Match (selector, cases)(sourceFile( tree) ))
1063
1066
}
1064
1067
def CaseDef (tree : Tree )(pat : Tree , guard : Tree , body : Tree )(implicit ctx : Context ): CaseDef = tree match {
1065
1068
case tree : CaseDef if (pat eq tree.pat) && (guard eq tree.guard) && (body eq tree.body) => tree
1066
- case _ => finalize(tree, untpd.CaseDef (pat, guard, body)(tree.source ))
1069
+ case _ => finalize(tree, untpd.CaseDef (pat, guard, body)(sourceFile( tree) ))
1067
1070
}
1068
1071
def Labeled (tree : Tree )(bind : Bind , expr : Tree )(implicit ctx : Context ): Labeled = tree match {
1069
1072
case tree : Labeled if (bind eq tree.bind) && (expr eq tree.expr) => tree
1070
- case _ => finalize(tree, untpd.Labeled (bind, expr)(tree.source ))
1073
+ case _ => finalize(tree, untpd.Labeled (bind, expr)(sourceFile( tree) ))
1071
1074
}
1072
1075
def Return (tree : Tree )(expr : Tree , from : Tree )(implicit ctx : Context ): Return = tree match {
1073
1076
case tree : Return if (expr eq tree.expr) && (from eq tree.from) => tree
1074
- case _ => finalize(tree, untpd.Return (expr, from)(tree.source ))
1077
+ case _ => finalize(tree, untpd.Return (expr, from)(sourceFile( tree) ))
1075
1078
}
1076
1079
def WhileDo (tree : Tree )(cond : Tree , body : Tree )(implicit ctx : Context ): WhileDo = tree match {
1077
1080
case tree : WhileDo if (cond eq tree.cond) && (body eq tree.body) => tree
1078
- case _ => finalize(tree, untpd.WhileDo (cond, body)(tree.source ))
1081
+ case _ => finalize(tree, untpd.WhileDo (cond, body)(sourceFile( tree) ))
1079
1082
}
1080
1083
def Try (tree : Tree )(expr : Tree , cases : List [CaseDef ], finalizer : Tree )(implicit ctx : Context ): Try = tree match {
1081
1084
case tree : Try if (expr eq tree.expr) && (cases eq tree.cases) && (finalizer eq tree.finalizer) => tree
1082
- case _ => finalize(tree, untpd.Try (expr, cases, finalizer)(tree.source ))
1085
+ case _ => finalize(tree, untpd.Try (expr, cases, finalizer)(sourceFile( tree) ))
1083
1086
}
1084
1087
def SeqLiteral (tree : Tree )(elems : List [Tree ], elemtpt : Tree )(implicit ctx : Context ): SeqLiteral = tree match {
1085
1088
case tree : JavaSeqLiteral =>
1086
1089
if ((elems eq tree.elems) && (elemtpt eq tree.elemtpt)) tree
1087
- else finalize(tree, new JavaSeqLiteral (elems, elemtpt))
1090
+ else finalize(tree, untpd. JavaSeqLiteral (elems, elemtpt))
1088
1091
case tree : SeqLiteral if (elems eq tree.elems) && (elemtpt eq tree.elemtpt) => tree
1089
- case _ => finalize(tree, untpd.SeqLiteral (elems, elemtpt)(tree.source ))
1092
+ case _ => finalize(tree, untpd.SeqLiteral (elems, elemtpt)(sourceFile( tree) ))
1090
1093
}
1091
1094
def Inlined (tree : Tree )(call : tpd.Tree , bindings : List [MemberDef ], expansion : Tree )(implicit ctx : Context ): Inlined = tree match {
1092
1095
case tree : Inlined if (call eq tree.call) && (bindings eq tree.bindings) && (expansion eq tree.expansion) => tree
1093
- case _ => finalize(tree, untpd.Inlined (call, bindings, expansion)(tree.source ))
1096
+ case _ => finalize(tree, untpd.Inlined (call, bindings, expansion)(sourceFile( tree) ))
1094
1097
}
1095
1098
def SingletonTypeTree (tree : Tree )(ref : Tree )(implicit ctx : Context ): SingletonTypeTree = tree match {
1096
- case tree : SingletonTypeTree if ref eq tree.ref => tree
1097
- case _ => finalize(tree, untpd.SingletonTypeTree (ref)(tree.source ))
1099
+ case tree : SingletonTypeTree if ( ref eq tree.ref) => tree
1100
+ case _ => finalize(tree, untpd.SingletonTypeTree (ref)(sourceFile( tree) ))
1098
1101
}
1099
1102
def AndTypeTree (tree : Tree )(left : Tree , right : Tree )(implicit ctx : Context ): AndTypeTree = tree match {
1100
1103
case tree : AndTypeTree if (left eq tree.left) && (right eq tree.right) => tree
1101
- case _ => finalize(tree, untpd.AndTypeTree (left, right)(tree.source ))
1104
+ case _ => finalize(tree, untpd.AndTypeTree (left, right)(sourceFile( tree) ))
1102
1105
}
1103
1106
def OrTypeTree (tree : Tree )(left : Tree , right : Tree )(implicit ctx : Context ): OrTypeTree = tree match {
1104
1107
case tree : OrTypeTree if (left eq tree.left) && (right eq tree.right) => tree
1105
- case _ => finalize(tree, untpd.OrTypeTree (left, right)(tree.source ))
1108
+ case _ => finalize(tree, untpd.OrTypeTree (left, right)(sourceFile( tree) ))
1106
1109
}
1107
1110
def RefinedTypeTree (tree : Tree )(tpt : Tree , refinements : List [Tree ])(implicit ctx : Context ): RefinedTypeTree = tree match {
1108
1111
case tree : RefinedTypeTree if (tpt eq tree.tpt) && (refinements eq tree.refinements) => tree
1109
- case _ => finalize(tree, untpd.RefinedTypeTree (tpt, refinements)(tree.source ))
1112
+ case _ => finalize(tree, untpd.RefinedTypeTree (tpt, refinements)(sourceFile( tree) ))
1110
1113
}
1111
1114
def AppliedTypeTree (tree : Tree )(tpt : Tree , args : List [Tree ])(implicit ctx : Context ): AppliedTypeTree = tree match {
1112
1115
case tree : AppliedTypeTree if (tpt eq tree.tpt) && (args eq tree.args) => tree
1113
- case _ => finalize(tree, untpd.AppliedTypeTree (tpt, args)(tree.source ))
1116
+ case _ => finalize(tree, untpd.AppliedTypeTree (tpt, args)(sourceFile( tree) ))
1114
1117
}
1115
1118
def LambdaTypeTree (tree : Tree )(tparams : List [TypeDef ], body : Tree )(implicit ctx : Context ): LambdaTypeTree = tree match {
1116
1119
case tree : LambdaTypeTree if (tparams eq tree.tparams) && (body eq tree.body) => tree
1117
- case _ => finalize(tree, untpd.LambdaTypeTree (tparams, body)(tree.source ))
1120
+ case _ => finalize(tree, untpd.LambdaTypeTree (tparams, body)(sourceFile( tree) ))
1118
1121
}
1119
1122
def MatchTypeTree (tree : Tree )(bound : Tree , selector : Tree , cases : List [CaseDef ])(implicit ctx : Context ): MatchTypeTree = tree match {
1120
1123
case tree : MatchTypeTree if (bound eq tree.bound) && (selector eq tree.selector) && (cases eq tree.cases) => tree
1121
- case _ => finalize(tree, untpd.MatchTypeTree (bound, selector, cases)(tree.source ))
1124
+ case _ => finalize(tree, untpd.MatchTypeTree (bound, selector, cases)(sourceFile( tree) ))
1122
1125
}
1123
1126
def ByNameTypeTree (tree : Tree )(result : Tree )(implicit ctx : Context ): ByNameTypeTree = tree match {
1124
- case tree : ByNameTypeTree if result eq tree.result => tree
1125
- case _ => finalize(tree, untpd.ByNameTypeTree (result)(tree.source ))
1127
+ case tree : ByNameTypeTree if ( result eq tree.result) => tree
1128
+ case _ => finalize(tree, untpd.ByNameTypeTree (result)(sourceFile( tree) ))
1126
1129
}
1127
1130
def TypeBoundsTree (tree : Tree )(lo : Tree , hi : Tree )(implicit ctx : Context ): TypeBoundsTree = tree match {
1128
1131
case tree : TypeBoundsTree if (lo eq tree.lo) && (hi eq tree.hi) => tree
1129
- case _ => finalize(tree, untpd.TypeBoundsTree (lo, hi)(tree.source ))
1132
+ case _ => finalize(tree, untpd.TypeBoundsTree (lo, hi)(sourceFile( tree) ))
1130
1133
}
1131
1134
def Bind (tree : Tree )(name : Name , body : Tree )(implicit ctx : Context ): Bind = tree match {
1132
1135
case tree : Bind if (name eq tree.name) && (body eq tree.body) => tree
1133
- case _ => finalize(tree, untpd.Bind (name, body)(tree.source ))
1136
+ case _ => finalize(tree, untpd.Bind (name, body)(sourceFile( tree) ))
1134
1137
}
1135
1138
def Alternative (tree : Tree )(trees : List [Tree ])(implicit ctx : Context ): Alternative = tree match {
1136
- case tree : Alternative if trees eq tree.trees => tree
1137
- case _ => finalize(tree, untpd.Alternative (trees)(tree.source ))
1139
+ case tree : Alternative if ( trees eq tree.trees) => tree
1140
+ case _ => finalize(tree, untpd.Alternative (trees)(sourceFile( tree) ))
1138
1141
}
1139
1142
def UnApply (tree : Tree )(fun : Tree , implicits : List [Tree ], patterns : List [Tree ])(implicit ctx : Context ): UnApply = tree match {
1140
1143
case tree : UnApply if (fun eq tree.fun) && (implicits eq tree.implicits) && (patterns eq tree.patterns) => tree
1141
- case _ => finalize(tree, untpd.UnApply (fun, implicits, patterns)(tree.source ))
1144
+ case _ => finalize(tree, untpd.UnApply (fun, implicits, patterns)(sourceFile( tree) ))
1142
1145
}
1143
1146
def ValDef (tree : Tree )(name : TermName , tpt : Tree , rhs : LazyTree )(implicit ctx : Context ): ValDef = tree match {
1144
1147
case tree : ValDef if (name == tree.name) && (tpt eq tree.tpt) && (rhs eq tree.unforcedRhs) => tree
1145
- case _ => finalize(tree, untpd.ValDef (name, tpt, rhs)(tree.source ))
1148
+ case _ => finalize(tree, untpd.ValDef (name, tpt, rhs)(sourceFile( tree) ))
1146
1149
}
1147
1150
def DefDef (tree : Tree )(name : TermName , tparams : List [TypeDef ], vparamss : List [List [ValDef ]], tpt : Tree , rhs : LazyTree )(implicit ctx : Context ): DefDef = tree match {
1148
1151
case tree : DefDef if (name == tree.name) && (tparams eq tree.tparams) && (vparamss eq tree.vparamss) && (tpt eq tree.tpt) && (rhs eq tree.unforcedRhs) => tree
1149
- case _ => finalize(tree, untpd.DefDef (name, tparams, vparamss, tpt, rhs)(tree.source ))
1152
+ case _ => finalize(tree, untpd.DefDef (name, tparams, vparamss, tpt, rhs)(sourceFile( tree) ))
1150
1153
}
1151
1154
def TypeDef (tree : Tree )(name : TypeName , rhs : Tree )(implicit ctx : Context ): TypeDef = tree match {
1152
1155
case tree : TypeDef if (name == tree.name) && (rhs eq tree.rhs) => tree
1153
- case _ => finalize(tree, untpd.TypeDef (name, rhs)(tree.source ))
1156
+ case _ => finalize(tree, untpd.TypeDef (name, rhs)(sourceFile( tree) ))
1154
1157
}
1155
1158
def Template (tree : Tree )(constr : DefDef , parents : List [Tree ], derived : List [untpd.Tree ], self : ValDef , body : LazyTreeList )(implicit ctx : Context ): Template = tree match {
1156
1159
case tree : Template if (constr eq tree.constr) && (parents eq tree.parents) && (derived eq tree.derived) && (self eq tree.self) && (body eq tree.unforcedBody) => tree
1157
- case tree => finalize(tree, untpd.Template (constr, parents, derived, self, body)(tree.source ))
1160
+ case tree => finalize(tree, untpd.Template (constr, parents, derived, self, body)(sourceFile( tree) ))
1158
1161
}
1159
1162
def Import (tree : Tree )(impliedOnly : Boolean , expr : Tree , selectors : List [untpd.Tree ])(implicit ctx : Context ): Import = tree match {
1160
1163
case tree : Import if (impliedOnly == tree.impliedOnly) && (expr eq tree.expr) && (selectors eq tree.selectors) => tree
1161
- case _ => finalize(tree, untpd.Import (impliedOnly, expr, selectors)(tree.source ))
1164
+ case _ => finalize(tree, untpd.Import (impliedOnly, expr, selectors)(sourceFile( tree) ))
1162
1165
}
1163
1166
def PackageDef (tree : Tree )(pid : RefTree , stats : List [Tree ])(implicit ctx : Context ): PackageDef = tree match {
1164
1167
case tree : PackageDef if (pid eq tree.pid) && (stats eq tree.stats) => tree
1165
- case _ => finalize(tree, untpd.PackageDef (pid, stats)(tree.source ))
1168
+ case _ => finalize(tree, untpd.PackageDef (pid, stats)(sourceFile( tree) ))
1166
1169
}
1167
1170
def Annotated (tree : Tree )(arg : Tree , annot : Tree )(implicit ctx : Context ): Annotated = tree match {
1168
1171
case tree : Annotated if (arg eq tree.arg) && (annot eq tree.annot) => tree
1169
- case _ => finalize(tree, untpd.Annotated (arg, annot)(tree.source ))
1172
+ case _ => finalize(tree, untpd.Annotated (arg, annot)(sourceFile( tree) ))
1170
1173
}
1171
1174
def Thicket (tree : Tree )(trees : List [Tree ])(implicit ctx : Context ): Thicket = tree match {
1172
- case tree : Thicket if trees eq tree.trees => tree
1173
- case _ => finalize(tree, untpd.Thicket (trees)(tree.source ))
1175
+ case tree : Thicket if ( trees eq tree.trees) => tree
1176
+ case _ => finalize(tree, untpd.Thicket (trees)(sourceFile( tree) ))
1174
1177
}
1175
1178
1176
1179
// Copier methods with default arguments; these demand that the original tree
0 commit comments