@@ -538,19 +538,28 @@ class OverloadedFuncDef(FuncBase, SymbolNode, Statement):
538
538
Overloaded variants must be consecutive in the source file.
539
539
"""
540
540
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
+ )
542
549
543
550
items : list [OverloadPart ]
544
551
unanalyzed_items : list [OverloadPart ]
545
552
impl : OverloadPart | None
546
553
deprecated : str | None
554
+ setter_index : int | None
547
555
548
556
def __init__ (self , items : list [OverloadPart ]) -> None :
549
557
super ().__init__ ()
550
558
self .items = items
551
559
self .unanalyzed_items = items .copy ()
552
560
self .impl = None
553
561
self .deprecated = None
562
+ self .setter_index = None
554
563
self ._is_trivial_self : bool | None = None
555
564
if items :
556
565
# 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:
586
595
self ._is_trivial_self = True
587
596
return True
588
597
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
+
589
609
def accept (self , visitor : StatementVisitor [T ]) -> T :
590
610
return visitor .visit_overloaded_func_def (self )
591
611
@@ -598,6 +618,7 @@ def serialize(self) -> JsonDict:
598
618
"impl" : None if self .impl is None else self .impl .serialize (),
599
619
"flags" : get_flags (self , FUNCBASE_FLAGS ),
600
620
"deprecated" : self .deprecated ,
621
+ "setter_index" : self .setter_index ,
601
622
}
602
623
603
624
@classmethod
@@ -618,6 +639,7 @@ def deserialize(cls, data: JsonDict) -> OverloadedFuncDef:
618
639
res ._fullname = data ["fullname" ]
619
640
set_flags (res , data ["flags" ])
620
641
res .deprecated = data ["deprecated" ]
642
+ res .setter_index = data ["setter_index" ]
621
643
# NOTE: res.info will be set in the fixup phase.
622
644
return res
623
645
0 commit comments