godot
godot copied to clipboard
Adding extra args in the editor "connect a signal to a method" popup when the method is located on a superclass fails
Tested versions
4.2.1 Stable
System information
Godot v4.2.1.stable - Windows 10.0.22631 - Vulkan (Forward+) - integrated Intel(R) UHD Graphics 620 (Intel Corporation; 30.0.101.1338) - Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz (8 Threads)
Issue description
Just like adding an extra value to a script that is put on a node works, instead directing it onto a method that is in a superclass that is written in GDScript should work.
The picture above shows the setup:
- A scene that has a Line edit node, this node has a script called 'child' attached.
- This class has no methods, and extends a class called parent.
- Parent has a method called 'line_is_edited'
- Connecting the 'text_changed' via the dialog with no extra arguments with this method works fine, as expected (modifying the method signature, removing the second argument)
- However, when you add the extra argument, the editor throws the following error:
Steps to reproduce
- Open MRP
- Open Scene
- Open the 'connect signal' dialog through right clicking the signal 'text_changed' under Node in the inspector
- Pick the superclass method through the 'pick' button.
- Add an extra bool parameter
- Press 'Connect'
- Observe error
Minimal reproduction project (MRP)
So when you press 'Connect' the following chain of events is happening:
-
Object::connect()
checks if the supplied callable is valid. - The object checks if it has this method (
line_is_edited()
). In this case the check is againstObject::script_instance
. - Because you're calling it from the editor and it is not considered the runtime -
Object::script_instance
is instantiated withPlaceHolderScriptInstance
class instance. -
PlaceHolderScriptInstance::has_method()
callshas_method()
on attached script (GDScript
in this case). -
GDScript::has_method()
only checks if it has the supplied method in its own method list and doesn't check its parent methods. And this causes the error.
Marking a script with @tools
helps to execute it in editor and thus - fixes the error. But the bound method is not being called. Whether it is intended - requires further investigation.