@@ -538,19 +538,28 @@ class OverloadedFuncDef(FuncBase, SymbolNode, Statement):
538538 Overloaded variants must be consecutive in the source file.
539539 """
540540
541- __slots__ = ("items" , "unanalyzed_items" , "impl" , "deprecated" , "_is_trivial_self" )
541+ __slots__ = (
542+ "items" ,
543+ "unanalyzed_items" ,
544+ "impl" ,
545+ "deprecated" ,
546+ "setter_index" ,
547+ "_is_trivial_self" ,
548+ )
542549
543550 items : list [OverloadPart ]
544551 unanalyzed_items : list [OverloadPart ]
545552 impl : OverloadPart | None
546553 deprecated : str | None
554+ setter_index : int | None
547555
548556 def __init__ (self , items : list [OverloadPart ]) -> None :
549557 super ().__init__ ()
550558 self .items = items
551559 self .unanalyzed_items = items .copy ()
552560 self .impl = None
553561 self .deprecated = None
562+ self .setter_index = None
554563 self ._is_trivial_self : bool | None = None
555564 if items :
556565 # TODO: figure out how to reliably set end position (we don't know the impl here).
@@ -586,6 +595,17 @@ def is_trivial_self(self) -> bool:
586595 self ._is_trivial_self = True
587596 return True
588597
598+ @property
599+ def setter (self ) -> Decorator :
600+ # Do some consistency checks first.
601+ first_item = self .items [0 ]
602+ assert isinstance (first_item , Decorator )
603+ assert first_item .var .is_settable_property
604+ assert self .setter_index is not None
605+ item = self .items [self .setter_index ]
606+ assert isinstance (item , Decorator )
607+ return item
608+
589609 def accept (self , visitor : StatementVisitor [T ]) -> T :
590610 return visitor .visit_overloaded_func_def (self )
591611
@@ -598,6 +618,7 @@ def serialize(self) -> JsonDict:
598618 "impl" : None if self .impl is None else self .impl .serialize (),
599619 "flags" : get_flags (self , FUNCBASE_FLAGS ),
600620 "deprecated" : self .deprecated ,
621+ "setter_index" : self .setter_index ,
601622 }
602623
603624 @classmethod
@@ -618,6 +639,7 @@ def deserialize(cls, data: JsonDict) -> OverloadedFuncDef:
618639 res ._fullname = data ["fullname" ]
619640 set_flags (res , data ["flags" ])
620641 res .deprecated = data ["deprecated" ]
642+ res .setter_index = data ["setter_index" ]
621643 # NOTE: res.info will be set in the fixup phase.
622644 return res
623645
0 commit comments