@@ -620,9 +620,11 @@ pub fn get_interface_extra_docs(trait_name: &str) -> Option<&'static str> {
620
620
}
621
621
622
622
#[ cfg( before_api = "4.4" ) ]
623
- pub fn is_virtual_method_required ( class_name : & str , method : & str ) -> bool {
624
- match ( class_name, method) {
625
- ( "ScriptLanguageExtension" , _) => method != "get_doc_comment_delimiters" ,
623
+ pub fn is_virtual_method_required ( class_name : & TyName , rust_method_name : & str ) -> bool {
624
+ // Do not call is_derived_virtual_method_required() here; that is handled in virtual_traits.rs.
625
+
626
+ match ( class_name. godot_ty . as_str ( ) , rust_method_name) {
627
+ ( "ScriptLanguageExtension" , method) => method != "get_doc_comment_delimiters" ,
626
628
627
629
( "ScriptExtension" , "editor_can_reload_from_file" )
628
630
| ( "ScriptExtension" , "can_instantiate" )
@@ -660,7 +662,7 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
660
662
| ( "EditorExportPlugin" , "customize_scene" )
661
663
| ( "EditorExportPlugin" , "get_customization_configuration_hash" )
662
664
| ( "EditorExportPlugin" , "get_name" )
663
- | ( "EditorVcsInterface " , _)
665
+ | ( "EditorVCSInterface " , _)
664
666
| ( "MovieWriter" , _)
665
667
| ( "TextServerExtension" , "has_feature" )
666
668
| ( "TextServerExtension" , "get_name" )
@@ -766,23 +768,23 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
766
768
| ( "PacketPeerExtension" , "get_available_packet_count" )
767
769
| ( "PacketPeerExtension" , "get_max_packet_size" )
768
770
| ( "StreamPeerExtension" , "get_available_bytes" )
769
- | ( "WebRtcDataChannelExtension " , "poll" )
770
- | ( "WebRtcDataChannelExtension " , "close" )
771
- | ( "WebRtcDataChannelExtension " , "set_write_mode" )
772
- | ( "WebRtcDataChannelExtension " , "get_write_mode" )
773
- | ( "WebRtcDataChannelExtension " , "was_string_packet" )
774
- | ( "WebRtcDataChannelExtension " , "get_ready_state" )
775
- | ( "WebRtcDataChannelExtension " , "get_label" )
776
- | ( "WebRtcDataChannelExtension " , "is_ordered" )
777
- | ( "WebRtcDataChannelExtension " , "get_id" )
778
- | ( "WebRtcDataChannelExtension " , "get_max_packet_life_time" )
779
- | ( "WebRtcDataChannelExtension " , "get_max_retransmits" )
780
- | ( "WebRtcDataChannelExtension " , "get_protocol" )
781
- | ( "WebRtcDataChannelExtension " , "is_negotiated" )
782
- | ( "WebRtcDataChannelExtension " , "get_buffered_amount" )
783
- | ( "WebRtcDataChannelExtension " , "get_available_packet_count" )
784
- | ( "WebRtcDataChannelExtension " , "get_max_packet_size" )
785
- | ( "WebRtcPeerConnectionExtension " , _)
771
+ | ( "WebRTCDataChannelExtension " , "poll" )
772
+ | ( "WebRTCDataChannelExtension " , "close" )
773
+ | ( "WebRTCDataChannelExtension " , "set_write_mode" )
774
+ | ( "WebRTCDataChannelExtension " , "get_write_mode" )
775
+ | ( "WebRTCDataChannelExtension " , "was_string_packet" )
776
+ | ( "WebRTCDataChannelExtension " , "get_ready_state" )
777
+ | ( "WebRTCDataChannelExtension " , "get_label" )
778
+ | ( "WebRTCDataChannelExtension " , "is_ordered" )
779
+ | ( "WebRTCDataChannelExtension " , "get_id" )
780
+ | ( "WebRTCDataChannelExtension " , "get_max_packet_life_time" )
781
+ | ( "WebRTCDataChannelExtension " , "get_max_retransmits" )
782
+ | ( "WebRTCDataChannelExtension " , "get_protocol" )
783
+ | ( "WebRTCDataChannelExtension " , "is_negotiated" )
784
+ | ( "WebRTCDataChannelExtension " , "get_buffered_amount" )
785
+ | ( "WebRTCDataChannelExtension " , "get_available_packet_count" )
786
+ | ( "WebRTCDataChannelExtension " , "get_max_packet_size" )
787
+ | ( "WebRTCPeerConnectionExtension " , _)
786
788
| ( "MultiplayerPeerExtension" , "get_available_packet_count" )
787
789
| ( "MultiplayerPeerExtension" , "get_max_packet_size" )
788
790
| ( "MultiplayerPeerExtension" , "set_transfer_channel" )
@@ -800,7 +802,18 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
800
802
| ( "MultiplayerPeerExtension" , "get_unique_id" )
801
803
| ( "MultiplayerPeerExtension" , "get_connection_status" ) => true ,
802
804
803
- ( _, _) => false ,
805
+ _ => false ,
806
+ }
807
+ }
808
+
809
+ // Adjustments for Godot 4.4+, where a virtual method is no longer needed (e.g. in a derived class).
810
+ #[ rustfmt:: skip]
811
+ pub fn is_derived_virtual_method_required ( class_name : & TyName , rust_method_name : & str ) -> Option < bool > {
812
+ match ( class_name. godot_ty . as_str ( ) , rust_method_name) {
813
+ // Required in base class, no longer in derived; https://github.com/godot-rust/gdext/issues/1133.
814
+ | ( "AudioStreamPlaybackResampled" , "mix" )
815
+
816
+ => Some ( false ) , _ => None
804
817
}
805
818
}
806
819
0 commit comments