@@ -161,7 +161,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
161161 // If a type argument is not given in the path, then we use the default for
162162 // the type parameter if one exists for the type.
163163 not exists ( this .getPositionalTypeArgument0 ( i ) ) and
164- result = this .resolveType ( ) .getTypeParameterDefault ( i ) and
164+ result = this .resolveRootType ( ) .getTypeParameterDefault ( i ) and
165165 // Defaults only apply to type mentions in type annotations
166166 this = any ( PathTypeRepr ptp ) .getPath ( ) .getQualifier * ( )
167167 }
@@ -171,7 +171,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
171171 private TypeMention getTypeMentionForTypeParameter ( TypeParameter tp ) {
172172 exists ( int i |
173173 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 ) )
175175 )
176176 or
177177 exists ( TypeAlias alias |
@@ -205,25 +205,27 @@ class NonAliasPathTypeMention extends PathTypeMention {
205205 )
206206 }
207207
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+
208226 override Type resolveTypeAt ( TypePath typePath ) {
209227 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 ( )
227229 or
228230 exists ( TypeParameter tp , TypePath suffix |
229231 result = this .getTypeMentionForTypeParameter ( tp ) .resolveTypeAt ( suffix ) and
0 commit comments