@@ -659,9 +659,11 @@ pub fn get_interface_extra_docs(trait_name: &str) -> Option<&'static str> {
659
659
}
660
660
661
661
#[ cfg( before_api = "4.4" ) ]
662
- pub fn is_virtual_method_required ( class_name : & str , method : & str ) -> bool {
663
- match ( class_name, method) {
664
- ( "ScriptLanguageExtension" , _) => method != "get_doc_comment_delimiters" ,
662
+ pub fn is_virtual_method_required ( class_name : & TyName , rust_method_name : & str ) -> bool {
663
+ // Do not call is_derived_virtual_method_required() here; that is handled in virtual_traits.rs.
664
+
665
+ match ( class_name. godot_ty . as_str ( ) , rust_method_name) {
666
+ ( "ScriptLanguageExtension" , method) => method != "get_doc_comment_delimiters" ,
665
667
666
668
( "ScriptExtension" , "editor_can_reload_from_file" )
667
669
| ( "ScriptExtension" , "can_instantiate" )
@@ -699,7 +701,7 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
699
701
| ( "EditorExportPlugin" , "customize_scene" )
700
702
| ( "EditorExportPlugin" , "get_customization_configuration_hash" )
701
703
| ( "EditorExportPlugin" , "get_name" )
702
- | ( "EditorVcsInterface " , _)
704
+ | ( "EditorVCSInterface " , _)
703
705
| ( "MovieWriter" , _)
704
706
| ( "TextServerExtension" , "has_feature" )
705
707
| ( "TextServerExtension" , "get_name" )
@@ -805,23 +807,23 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
805
807
| ( "PacketPeerExtension" , "get_available_packet_count" )
806
808
| ( "PacketPeerExtension" , "get_max_packet_size" )
807
809
| ( "StreamPeerExtension" , "get_available_bytes" )
808
- | ( "WebRtcDataChannelExtension " , "poll" )
809
- | ( "WebRtcDataChannelExtension " , "close" )
810
- | ( "WebRtcDataChannelExtension " , "set_write_mode" )
811
- | ( "WebRtcDataChannelExtension " , "get_write_mode" )
812
- | ( "WebRtcDataChannelExtension " , "was_string_packet" )
813
- | ( "WebRtcDataChannelExtension " , "get_ready_state" )
814
- | ( "WebRtcDataChannelExtension " , "get_label" )
815
- | ( "WebRtcDataChannelExtension " , "is_ordered" )
816
- | ( "WebRtcDataChannelExtension " , "get_id" )
817
- | ( "WebRtcDataChannelExtension " , "get_max_packet_life_time" )
818
- | ( "WebRtcDataChannelExtension " , "get_max_retransmits" )
819
- | ( "WebRtcDataChannelExtension " , "get_protocol" )
820
- | ( "WebRtcDataChannelExtension " , "is_negotiated" )
821
- | ( "WebRtcDataChannelExtension " , "get_buffered_amount" )
822
- | ( "WebRtcDataChannelExtension " , "get_available_packet_count" )
823
- | ( "WebRtcDataChannelExtension " , "get_max_packet_size" )
824
- | ( "WebRtcPeerConnectionExtension " , _)
810
+ | ( "WebRTCDataChannelExtension " , "poll" )
811
+ | ( "WebRTCDataChannelExtension " , "close" )
812
+ | ( "WebRTCDataChannelExtension " , "set_write_mode" )
813
+ | ( "WebRTCDataChannelExtension " , "get_write_mode" )
814
+ | ( "WebRTCDataChannelExtension " , "was_string_packet" )
815
+ | ( "WebRTCDataChannelExtension " , "get_ready_state" )
816
+ | ( "WebRTCDataChannelExtension " , "get_label" )
817
+ | ( "WebRTCDataChannelExtension " , "is_ordered" )
818
+ | ( "WebRTCDataChannelExtension " , "get_id" )
819
+ | ( "WebRTCDataChannelExtension " , "get_max_packet_life_time" )
820
+ | ( "WebRTCDataChannelExtension " , "get_max_retransmits" )
821
+ | ( "WebRTCDataChannelExtension " , "get_protocol" )
822
+ | ( "WebRTCDataChannelExtension " , "is_negotiated" )
823
+ | ( "WebRTCDataChannelExtension " , "get_buffered_amount" )
824
+ | ( "WebRTCDataChannelExtension " , "get_available_packet_count" )
825
+ | ( "WebRTCDataChannelExtension " , "get_max_packet_size" )
826
+ | ( "WebRTCPeerConnectionExtension " , _)
825
827
| ( "MultiplayerPeerExtension" , "get_available_packet_count" )
826
828
| ( "MultiplayerPeerExtension" , "get_max_packet_size" )
827
829
| ( "MultiplayerPeerExtension" , "set_transfer_channel" )
@@ -839,7 +841,18 @@ pub fn is_virtual_method_required(class_name: &str, method: &str) -> bool {
839
841
| ( "MultiplayerPeerExtension" , "get_unique_id" )
840
842
| ( "MultiplayerPeerExtension" , "get_connection_status" ) => true ,
841
843
842
- ( _, _) => false ,
844
+ _ => false ,
845
+ }
846
+ }
847
+
848
+ // Adjustments for Godot 4.4+, where a virtual method is no longer needed (e.g. in a derived class).
849
+ #[ rustfmt:: skip]
850
+ pub fn is_derived_virtual_method_required ( class_name : & TyName , rust_method_name : & str ) -> Option < bool > {
851
+ match ( class_name. godot_ty . as_str ( ) , rust_method_name) {
852
+ // Required in base class, no longer in derived; https://github.com/godot-rust/gdext/issues/1133.
853
+ | ( "AudioStreamPlaybackResampled" , "mix" )
854
+
855
+ => Some ( false ) , _ => None
843
856
}
844
857
}
845
858
0 commit comments