@@ -161,7 +161,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
161
161
// If a type argument is not given in the path, then we use the default for
162
162
// the type parameter if one exists for the type.
163
163
not exists ( this .getPositionalTypeArgument0 ( i ) ) and
164
- result = this .resolveType ( ) .getTypeParameterDefault ( i ) and
164
+ result = this .resolveRootType ( ) .getTypeParameterDefault ( i ) and
165
165
// Defaults only apply to type mentions in type annotations
166
166
this = any ( PathTypeRepr ptp ) .getPath ( ) .getQualifier * ( )
167
167
}
@@ -171,7 +171,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
171
171
private TypeMention getTypeMentionForTypeParameter ( TypeParameter tp ) {
172
172
exists ( int i |
173
173
result = this .getPositionalTypeArgument ( pragma [ only_bind_into ] ( i ) ) and
174
- tp = this .resolveType ( ) .getTypeParameter ( pragma [ only_bind_into ] ( i ) )
174
+ tp = this .resolveRootType ( ) .getTypeParameter ( pragma [ only_bind_into ] ( i ) )
175
175
)
176
176
or
177
177
exists ( TypeAlias alias |
@@ -205,25 +205,27 @@ class NonAliasPathTypeMention extends PathTypeMention {
205
205
)
206
206
}
207
207
208
+ Type resolveRootType ( ) {
209
+ result = TStruct ( resolved )
210
+ or
211
+ result = TEnum ( resolved )
212
+ or
213
+ exists ( TraitItemNode trait | trait = resolved |
214
+ // If this is a `Self` path, then it resolves to the implicit `Self`
215
+ // type parameter, otherwise it is a trait bound.
216
+ if this = trait .getASelfPath ( )
217
+ then result = TSelfTypeParameter ( trait )
218
+ else result = TTrait ( trait )
219
+ )
220
+ or
221
+ result = TTypeParamTypeParameter ( resolved )
222
+ or
223
+ result = TAssociatedTypeTypeParameter ( resolved )
224
+ }
225
+
208
226
override Type resolveTypeAt ( TypePath typePath ) {
209
227
typePath .isEmpty ( ) and
210
- (
211
- result = TStruct ( resolved )
212
- or
213
- result = TEnum ( resolved )
214
- or
215
- exists ( TraitItemNode trait | trait = resolved |
216
- // If this is a `Self` path, then it resolves to the implicit `Self`
217
- // type parameter, otherwise it is a trait bound.
218
- if this = trait .getASelfPath ( )
219
- then result = TSelfTypeParameter ( trait )
220
- else result = TTrait ( trait )
221
- )
222
- or
223
- result = TTypeParamTypeParameter ( resolved )
224
- or
225
- result = TAssociatedTypeTypeParameter ( resolved )
226
- )
228
+ result = this .resolveRootType ( )
227
229
or
228
230
exists ( TypeParameter tp , TypePath suffix |
229
231
result = this .getTypeMentionForTypeParameter ( tp ) .resolveTypeAt ( suffix ) and
0 commit comments