@@ -152,23 +152,38 @@ object SymOps:
152
152
153
153
def splitExtensionParamList : (List [reflect.ParamClause ], List [reflect.ParamClause ]) =
154
154
import reflect .*
155
- val method = sym.tree.asInstanceOf [DefDef ]
156
- (for {
157
- defPosition <- method.symbol.pos
158
- defStart <- scala.util.Try (defPosition.start).toOption
159
- } yield {
160
- method.paramss.partition(_.params.headOption.flatMap(_.symbol.pos.map(_.start < defStart)).getOrElse(false ))
161
- }).getOrElse(List .empty, List .empty)
155
+
156
+ def getPositionStartOption (pos : Option [Position ]): Option [Int ] = pos.flatMap {
157
+ case dotty.tools.dotc.util.NoSourcePosition => None
158
+ case pos : Position => Some (pos.start)
159
+ }
160
+
161
+ def comparePositionStarts (posA : Option [Position ], posB : Option [Position ]): Option [Boolean ] =
162
+ for {
163
+ startA <- getPositionStartOption(posA)
164
+ startB <- getPositionStartOption(posB)
165
+ } yield {
166
+ startA < startB
167
+ }
168
+
169
+ sym.tree match
170
+ case tree : DefDef =>
171
+ tree.paramss.partition(_.params.headOption.flatMap(param =>
172
+ comparePositionStarts(param.symbol.pos, tree.symbol.pos)).getOrElse(false )
173
+ )
174
+ case _ => Nil -> Nil
162
175
163
176
def extendedTypeParams : List [reflect.TypeDef ] =
164
177
import reflect .*
165
- val method = sym.tree.asInstanceOf [DefDef ]
166
- method.leadingTypeParams
178
+ sym.tree match
179
+ case tree : DefDef =>
180
+ tree.leadingTypeParams
181
+ case _ => Nil
167
182
168
183
def extendedTermParamLists : List [reflect.TermParamClause ] =
169
184
import reflect .*
170
- sym.splitExtensionParamList._1.collect {
171
- case tpc : TermParamClause => tpc
185
+ sym.splitExtensionParamList._1.collect {
186
+ case tpc : TermParamClause => tpc
172
187
}
173
188
174
189
def nonExtensionTermParamLists : List [reflect.TermParamClause ] =
0 commit comments