2
0
Эх сурвалжийг харах

Editor: Hide GDScript internal functions from method selectors

Danil Alexeev 1 жил өмнө
parent
commit
ae737d8cd9

+ 9 - 0
editor/connections_dialog.cpp

@@ -294,6 +294,13 @@ List<MethodInfo> ConnectDialog::_filter_method_list(const List<MethodInfo> &p_me
 	}
 	}
 
 
 	for (const MethodInfo &mi : p_methods) {
 	for (const MethodInfo &mi : p_methods) {
+		if (mi.name.begins_with("@")) {
+			// GH-92782. GDScript inline setters/getters are historically present in `get_method_list()`
+			// and can be called using `Object.call()`. However, these functions are meant to be internal
+			// and their names are not valid identifiers, so let's hide them from the user.
+			continue;
+		}
+
 		if (!p_search_string.is_empty() && !mi.name.containsn(p_search_string)) {
 		if (!p_search_string.is_empty() && !mi.name.containsn(p_search_string)) {
 			continue;
 			continue;
 		}
 		}
@@ -324,8 +331,10 @@ List<MethodInfo> ConnectDialog::_filter_method_list(const List<MethodInfo> &p_me
 				continue;
 				continue;
 			}
 			}
 		}
 		}
+
 		ret.push_back(mi);
 		ret.push_back(mi);
 	}
 	}
+
 	return ret;
 	return ret;
 }
 }
 
 

+ 15 - 2
editor/property_selector.cpp

@@ -225,11 +225,24 @@ void PropertySelector::_update_search() {
 		} else {
 		} else {
 			Ref<Script> script_ref = Object::cast_to<Script>(ObjectDB::get_instance(script));
 			Ref<Script> script_ref = Object::cast_to<Script>(ObjectDB::get_instance(script));
 			if (script_ref.is_valid()) {
 			if (script_ref.is_valid()) {
-				methods.push_back(MethodInfo("*Script Methods"));
 				if (script_ref->is_built_in()) {
 				if (script_ref->is_built_in()) {
 					script_ref->reload(true);
 					script_ref->reload(true);
 				}
 				}
-				script_ref->get_script_method_list(&methods);
+
+				List<MethodInfo> script_methods;
+				script_ref->get_script_method_list(&script_methods);
+
+				methods.push_back(MethodInfo("*Script Methods")); // TODO: Split by inheritance.
+
+				for (const MethodInfo &mi : script_methods) {
+					if (mi.name.begins_with("@")) {
+						// GH-92782. GDScript inline setters/getters are historically present in `get_method_list()`
+						// and can be called using `Object.call()`. However, these functions are meant to be internal
+						// and their names are not valid identifiers, so let's hide them from the user.
+						continue;
+					}
+					methods.push_back(mi);
+				}
 			}
 			}
 
 
 			StringName base = base_type;
 			StringName base = base_type;