117117    TypeAlias ,
118118    TypeAliasStmt ,
119119    TypeInfo ,
120-     TypeVarExpr ,
121120    UnaryExpr ,
122121    Var ,
123122    WhileStmt ,
@@ -697,11 +696,9 @@ def _visit_overloaded_func_def(self, defn: OverloadedFuncDef) -> None:
697696            assert  isinstance (defn .items [0 ], Decorator )
698697            self .visit_decorator (defn .items [0 ])
699698            if  defn .items [0 ].var .is_settable_property :
700-                 # TODO: here and elsewhere we assume setter immediately follows getter. 
701-                 assert  isinstance (defn .items [1 ], Decorator )
702699                # Perform a reduced visit just to infer the actual setter type. 
703-                 self .visit_decorator_inner (defn .items [ 1 ] , skip_first_item = True )
704-                 setter_type  =  defn .items [ 1 ] .var .type 
700+                 self .visit_decorator_inner (defn .setter , skip_first_item = True )
701+                 setter_type  =  defn .setter .var .type 
705702                # Check if the setter can accept two positional arguments. 
706703                any_type  =  AnyType (TypeOfAny .special_form )
707704                fallback_setter_type  =  CallableType (
@@ -712,7 +709,7 @@ def _visit_overloaded_func_def(self, defn: OverloadedFuncDef) -> None:
712709                    fallback = self .named_type ("builtins.function" ),
713710                )
714711                if  setter_type  and  not  is_subtype (setter_type , fallback_setter_type ):
715-                     self .fail ("Invalid property setter signature" , defn .items [ 1 ] .func )
712+                     self .fail ("Invalid property setter signature" , defn .setter .func )
716713                setter_type  =  self .extract_callable_type (setter_type , defn )
717714                if  not  isinstance (setter_type , CallableType ) or  len (setter_type .arg_types ) !=  2 :
718715                    # TODO: keep precise type for callables with tricky but valid signatures. 
@@ -2171,7 +2168,7 @@ def check_setter_type_override(self, defn: OverloadedFuncDef, base: TypeInfo) ->
21712168        assert  typ  is  not   None  and  original_type  is  not   None 
21722169
21732170        if  not  is_subtype (original_type , typ ):
2174-             self .msg .incompatible_setter_override (defn .items [ 1 ] , typ , original_type , base )
2171+             self .msg .incompatible_setter_override (defn .setter , typ , original_type , base )
21752172
21762173    def  check_method_override_for_base_with_name (
21772174        self , defn : FuncDef  |  OverloadedFuncDef  |  Decorator , name : str , base : TypeInfo 
@@ -2860,29 +2857,6 @@ def check_multiple_inheritance(self, typ: TypeInfo) -> None:
28602857                if  name  in  base2 .names  and  base2  not  in   base .mro :
28612858                    self .check_compatibility (name , base , base2 , typ )
28622859
2863-     def  determine_type_of_member (self , sym : SymbolTableNode ) ->  Type  |  None :
2864-         # TODO: this duplicates both checkmember.py and analyze_ref_expr(), delete. 
2865-         if  sym .type  is  not   None :
2866-             return  sym .type 
2867-         if  isinstance (sym .node , SYMBOL_FUNCBASE_TYPES ):
2868-             return  self .function_type (sym .node )
2869-         if  isinstance (sym .node , TypeInfo ):
2870-             if  sym .node .typeddict_type :
2871-                 # We special-case TypedDict, because they don't define any constructor. 
2872-                 return  self .expr_checker .typeddict_callable (sym .node )
2873-             else :
2874-                 return  type_object_type (sym .node , self .named_type )
2875-         if  isinstance (sym .node , TypeVarExpr ):
2876-             # Use of TypeVars is rejected in an expression/runtime context, so 
2877-             # we don't need to check supertype compatibility for them. 
2878-             return  AnyType (TypeOfAny .special_form )
2879-         if  isinstance (sym .node , TypeAlias ):
2880-             with  self .msg .filter_errors ():
2881-                 # Suppress any errors, they will be given when analyzing the corresponding node. 
2882-                 # Here we may have incorrect options and location context. 
2883-                 return  self .expr_checker .alias_type_in_runtime_context (sym .node , ctx = sym .node )
2884-         return  None 
2885- 
28862860    def  check_compatibility (
28872861        self , name : str , base1 : TypeInfo , base2 : TypeInfo , ctx : TypeInfo 
28882862    ) ->  None :
0 commit comments