@@ -314,6 +314,7 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
314314 visibility : vis,
315315 deprecated : None ,
316316 flags : ClassEltFlags :: new ( flag_args) ,
317+ sealed_allowlist : None ,
317318 sort_text : None ,
318319 overlapping_tparams : None ,
319320 } ;
@@ -354,6 +355,7 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
354355 visibility : vis,
355356 deprecated : None ,
356357 flags : ClassEltFlags :: new ( flag_args) ,
358+ sealed_allowlist : None ,
357359 sort_text : None ,
358360 overlapping_tparams : None ,
359361 } ;
@@ -389,6 +391,8 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
389391 ( _, v) => self . visibility ( cls, self . child . module . as_ref ( ) . map ( Positioned :: id) , v) ,
390392 } ;
391393
394+ let sealed_allowlist = self . get_method_sealed_allowlist ( sm) ;
395+
392396 let sort_text = match sm. sort_text . to_owned ( ) {
393397 Some ( text) => Some ( text) ,
394398 _ => match methods. get ( & meth) {
@@ -429,6 +433,7 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
429433 visibility : vis,
430434 deprecated : sm. deprecated ,
431435 flags : ClassEltFlags :: new ( flag_args) ,
436+ sealed_allowlist,
432437 sort_text,
433438 overlapping_tparams : self . get_overlapping_tparams ( sm) ,
434439 } ;
@@ -477,6 +482,7 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
477482 visibility : vis,
478483 deprecated : sm. deprecated ,
479484 flags : ClassEltFlags :: new ( flag_args) ,
485+ sealed_allowlist : None ,
480486 sort_text : sm. sort_text . to_owned ( ) ,
481487 overlapping_tparams : None ,
482488 }
@@ -823,12 +829,20 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
823829 }
824830 }
825831
826- fn get_sealed_whitelist ( & self ) -> Option < IndexSet < TypeName > > {
832+ fn get_class_sealed_whitelist ( & self ) -> Option < IndexSet < TypeName > > {
827833 ( self . child . user_attributes . iter ( ) )
828834 . find ( |ua| ua. name . id ( ) == * sn:: user_attributes:: uaSealed)
829835 . map ( |ua| ua. classname_params ( ) . iter ( ) . copied ( ) . collect ( ) )
830836 }
831837
838+ fn get_method_sealed_allowlist ( & self , method : & ShallowMethod < R > ) -> Option < IndexSet < TypeName > > {
839+ method
840+ . attributes
841+ . iter ( )
842+ . find ( |ua| ua. name . id ( ) == * sn:: user_attributes:: uaSealed)
843+ . map ( |ua| ua. classname_params ( ) . iter ( ) . copied ( ) . collect ( ) )
844+ }
845+
832846 fn get_overlapping_tparams ( & self , method : & ShallowMethod < R > ) -> Option < IndexSet < Symbol > > {
833847 method
834848 . attributes
@@ -974,7 +988,7 @@ impl<'a, R: Reason> DeclFolder<'a, R> {
974988 } ) ;
975989 self . rewrite_class_consts_for_enum ( enum_inner_ty, & ancestors, & mut consts) ;
976990
977- let sealed_whitelist = self . get_sealed_whitelist ( ) ;
991+ let sealed_whitelist = self . get_class_sealed_whitelist ( ) ;
978992
979993 let deferred_init_members = self . get_deferred_init_members ( & constructor. elt ) ;
980994
0 commit comments