@@ -404,11 +404,17 @@ fn find_generic_members(
404404 infer_guard : & InferGuardRef ,
405405 filter : & FindMemberFilter ,
406406) -> FindMembersResult {
407- let base_type = generic_type. get_base_type ( ) ;
408- let mut members = find_members_guard ( db, & base_type, infer_guard, filter) ?;
409-
407+ let base_ref_id = generic_type. get_base_type_id_ref ( ) ;
410408 let generic_params = generic_type. get_params ( ) ;
411409 let substitutor = TypeSubstitutor :: from_type_array ( generic_params. clone ( ) ) ;
410+ let type_decl = db. get_type_index ( ) . get_type_decl ( & base_ref_id) ?;
411+ if let Some ( origin) = type_decl. get_alias_origin ( db, Some ( & substitutor) ) {
412+ return find_members_guard ( db, & origin, infer_guard, filter) ;
413+ }
414+
415+ let mut members =
416+ find_members_guard ( db, & LuaType :: Ref ( base_ref_id. clone ( ) ) , infer_guard, filter) ?;
417+
412418 for info in members. iter_mut ( ) {
413419 info. typ = instantiate_type_generic ( db, & info. typ , & substitutor) ;
414420 }
@@ -417,15 +423,14 @@ fn find_generic_members(
417423 // like `---@class box<T>: T`. Should be rewritten: generic types should
418424 // be passed to the called instantiate_type_generic() in some kind of a
419425 // context.
420- if let LuaType :: Ref ( base_type_decl_id) = base_type {
421- members. extend ( find_generic_members_from_super_generics (
422- db,
423- & base_type_decl_id,
424- & substitutor,
425- infer_guard,
426- filter,
427- ) )
428- } ;
426+
427+ members. extend ( find_generic_members_from_super_generics (
428+ db,
429+ & base_ref_id,
430+ & substitutor,
431+ infer_guard,
432+ filter,
433+ ) ) ;
429434
430435 Some ( members)
431436}
0 commit comments