@@ -550,19 +550,28 @@ class OverloadedFuncDef(FuncBase, SymbolNode, Statement):
550
550
Overloaded variants must be consecutive in the source file.
551
551
"""
552
552
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
+ )
554
561
555
562
items : list [OverloadPart ]
556
563
unanalyzed_items : list [OverloadPart ]
557
564
impl : OverloadPart | None
558
565
deprecated : str | None
566
+ setter_index : int | None
559
567
560
568
def __init__ (self , items : list [OverloadPart ]) -> None :
561
569
super ().__init__ ()
562
570
self .items = items
563
571
self .unanalyzed_items = items .copy ()
564
572
self .impl = None
565
573
self .deprecated = None
574
+ self .setter_index = None
566
575
self ._is_trivial_self : bool | None = None
567
576
if items :
568
577
# 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:
598
607
self ._is_trivial_self = True
599
608
return True
600
609
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
+
601
621
def accept (self , visitor : StatementVisitor [T ]) -> T :
602
622
return visitor .visit_overloaded_func_def (self )
603
623
@@ -610,6 +630,7 @@ def serialize(self) -> JsonDict:
610
630
"impl" : None if self .impl is None else self .impl .serialize (),
611
631
"flags" : get_flags (self , FUNCBASE_FLAGS ),
612
632
"deprecated" : self .deprecated ,
633
+ "setter_index" : self .setter_index ,
613
634
}
614
635
615
636
@classmethod
@@ -630,6 +651,7 @@ def deserialize(cls, data: JsonDict) -> OverloadedFuncDef:
630
651
res ._fullname = data ["fullname" ]
631
652
set_flags (res , data ["flags" ])
632
653
res .deprecated = data ["deprecated" ]
654
+ res .setter_index = data ["setter_index" ]
633
655
# NOTE: res.info will be set in the fixup phase.
634
656
return res
635
657
0 commit comments