@@ -550,19 +550,28 @@ class OverloadedFuncDef(FuncBase, SymbolNode, Statement):
550550 Overloaded variants must be consecutive in the source file.
551551 """
552552
553- __slots__ = ("items" , "unanalyzed_items" , "impl" , "deprecated" , "_is_trivial_self" )
553+ __slots__ = (
554+ "items" ,
555+ "unanalyzed_items" ,
556+ "impl" ,
557+ "deprecated" ,
558+ "setter_index" ,
559+ "_is_trivial_self" ,
560+ )
554561
555562 items : list [OverloadPart ]
556563 unanalyzed_items : list [OverloadPart ]
557564 impl : OverloadPart | None
558565 deprecated : str | None
566+ setter_index : int | None
559567
560568 def __init__ (self , items : list [OverloadPart ]) -> None :
561569 super ().__init__ ()
562570 self .items = items
563571 self .unanalyzed_items = items .copy ()
564572 self .impl = None
565573 self .deprecated = None
574+ self .setter_index = None
566575 self ._is_trivial_self : bool | None = None
567576 if items :
568577 # TODO: figure out how to reliably set end position (we don't know the impl here).
@@ -598,6 +607,17 @@ def is_trivial_self(self) -> bool:
598607 self ._is_trivial_self = True
599608 return True
600609
610+ @property
611+ def setter (self ) -> Decorator :
612+ # Do some consistency checks first.
613+ first_item = self .items [0 ]
614+ assert isinstance (first_item , Decorator )
615+ assert first_item .var .is_settable_property
616+ assert self .setter_index is not None
617+ item = self .items [self .setter_index ]
618+ assert isinstance (item , Decorator )
619+ return item
620+
601621 def accept (self , visitor : StatementVisitor [T ]) -> T :
602622 return visitor .visit_overloaded_func_def (self )
603623
@@ -610,6 +630,7 @@ def serialize(self) -> JsonDict:
610630 "impl" : None if self .impl is None else self .impl .serialize (),
611631 "flags" : get_flags (self , FUNCBASE_FLAGS ),
612632 "deprecated" : self .deprecated ,
633+ "setter_index" : self .setter_index ,
613634 }
614635
615636 @classmethod
@@ -630,6 +651,7 @@ def deserialize(cls, data: JsonDict) -> OverloadedFuncDef:
630651 res ._fullname = data ["fullname" ]
631652 set_flags (res , data ["flags" ])
632653 res .deprecated = data ["deprecated" ]
654+ res .setter_index = data ["setter_index" ]
633655 # NOTE: res.info will be set in the fixup phase.
634656 return res
635657
0 commit comments