@@ -68,13 +68,6 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
68
68
69
69
override def changesMembers : Boolean = true // the phase adds super accessors and synthetic members
70
70
71
- override def run (using Context ): Unit =
72
- val unit = ctx.compilationUnit
73
- if unit.isJava then
74
- AppliedTypeChecker ().traverse(unit.tpdTree)
75
- else
76
- super .run
77
-
78
71
override def transformPhase (using Context ): Phase = thisPhase.next
79
72
80
73
protected def newTransformer (using Context ): Transformer =
@@ -92,53 +85,6 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
92
85
// TODO fill in
93
86
}
94
87
95
- private def normalizeTypeArgs (tree : TypeApply )(using Context ): TypeApply = tree.tpe match
96
- case pt : PolyType => // wait for more arguments coming
97
- tree
98
- case _ =>
99
- def decompose (tree : TypeApply ): (Tree , List [Tree ]) = tree.fun match
100
- case fun : TypeApply =>
101
- val (tycon, args) = decompose(fun)
102
- (tycon, args ++ tree.args)
103
- case _ =>
104
- (tree.fun, tree.args)
105
- end decompose
106
- def reorderArgs (pnames : List [Name ], namedArgs : List [NamedArg ], otherArgs : List [Tree ]): List [Tree ] = pnames match
107
- case pname :: pnames1 =>
108
- namedArgs.partition(_.name == pname) match
109
- case (NamedArg (_, arg) :: _, namedArgs1) =>
110
- arg :: reorderArgs(pnames1, namedArgs1, otherArgs)
111
- case _ =>
112
- val otherArg :: otherArgs1 = otherArgs
113
- otherArg :: reorderArgs(pnames1, namedArgs, otherArgs1)
114
- case nil =>
115
- assert(namedArgs.isEmpty && otherArgs.isEmpty)
116
- Nil
117
- end reorderArgs
118
-
119
- val (tycon, args) = decompose(tree)
120
- tycon.tpe.widen match
121
- case tp : PolyType if args.exists(isNamedArg) =>
122
- val (namedArgs, otherArgs) = args.partition(isNamedArg)
123
- val args1 = reorderArgs(tp.paramNames, namedArgs.asInstanceOf [List [NamedArg ]], otherArgs)
124
- TypeApply (tycon, args1).withSpan(tree.span).withType(tree.tpe)
125
- case _ =>
126
- tree
127
- end normalizeTypeArgs
128
-
129
- private class AppliedTypeChecker extends TreeTraverser {
130
- /** Scan a tree and check all the AppliedTypeTrees in it. */
131
- def traverse (tree : Tree )(using Context ): Unit = tree match
132
- case tpt : TypeTree =>
133
- Checking .checkAppliedTypesIn(tpt)
134
- case tree : AppliedTypeTree =>
135
- Checking .checkAppliedType(tree, EmptyTree )
136
- case tree : TypeApply =>
137
- traverseChildren(normalizeTypeArgs(tree))
138
- case _ =>
139
- traverseChildren(tree)
140
- }
141
-
142
88
class PostTyperTransformer extends Transformer {
143
89
144
90
private var inJavaAnnot : Boolean = false
@@ -218,21 +164,54 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
218
164
=> Checking .checkAppliedTypesIn(tree)
219
165
case _ =>
220
166
221
- private def transformSelect (tree : Select , targs : List [Tree ])(using Context ): Tree = {
167
+ private def transformSelect (tree : Select , targs : List [Tree ])(using Context ): Tree =
222
168
val qual = tree.qualifier
223
- qual.symbol.moduleClass.denot match {
169
+ qual.symbol.moduleClass.denot match
224
170
case pkg : PackageClassDenotation =>
225
171
val pobj = pkg.packageObjFor(tree.symbol)
226
- if ( pobj.exists)
172
+ if pobj.exists then
227
173
return transformSelect(cpy.Select (tree)(qual.select(pobj).withSpan(qual.span), tree.name), targs)
228
174
case _ =>
229
- }
175
+
230
176
val tree1 = super .transform(tree)
231
- constToLiteral(tree1) match {
177
+ constToLiteral(tree1) match
232
178
case _ : Literal => tree1
233
179
case _ => superAcc.transformSelect(tree1, targs)
234
- }
235
- }
180
+
181
+ private def normalizeTypeArgs (tree : TypeApply )(using Context ): TypeApply = tree.tpe match
182
+ case pt : PolyType => // wait for more arguments coming
183
+ tree
184
+ case _ =>
185
+ def decompose (tree : TypeApply ): (Tree , List [Tree ]) = tree.fun match
186
+ case fun : TypeApply =>
187
+ val (tycon, args) = decompose(fun)
188
+ (tycon, args ++ tree.args)
189
+ case _ =>
190
+ (tree.fun, tree.args)
191
+ end decompose
192
+
193
+ def reorderArgs (pnames : List [Name ], namedArgs : List [NamedArg ], otherArgs : List [Tree ]): List [Tree ] = pnames match
194
+ case pname :: pnames1 =>
195
+ namedArgs.partition(_.name == pname) match
196
+ case (NamedArg (_, arg) :: _, namedArgs1) =>
197
+ arg :: reorderArgs(pnames1, namedArgs1, otherArgs)
198
+ case _ =>
199
+ val otherArg :: otherArgs1 = otherArgs
200
+ otherArg :: reorderArgs(pnames1, namedArgs, otherArgs1)
201
+ case nil =>
202
+ assert(namedArgs.isEmpty && otherArgs.isEmpty)
203
+ Nil
204
+ end reorderArgs
205
+
206
+ val (tycon, args) = decompose(tree)
207
+ tycon.tpe.widen match
208
+ case tp : PolyType if args.exists(isNamedArg) =>
209
+ val (namedArgs, otherArgs) = args.partition(isNamedArg)
210
+ val args1 = reorderArgs(tp.paramNames, namedArgs.asInstanceOf [List [NamedArg ]], otherArgs)
211
+ TypeApply (tycon, args1).withSpan(tree.span).withType(tree.tpe)
212
+ case _ =>
213
+ tree
214
+ end normalizeTypeArgs
236
215
237
216
private object dropInlines extends TreeMap {
238
217
override def transform (tree : Tree )(using Context ): Tree = tree match {
0 commit comments