From 773ee962edb2bb7313323891676ff100c5734293 Mon Sep 17 00:00:00 2001 From: Jan Haller Date: Wed, 15 Apr 2026 00:42:34 +0200 Subject: [PATCH] Use `RequiredParam`/`RequiredResult` in several more APIs --- core/core_bind.cpp | 38 ++++++++++++++++++++++++-------------- core/core_bind.h | 24 ++++++++++++------------ scene/2d/node_2d.cpp | 3 ++- scene/2d/node_2d.h | 2 +- scene/main/scene_tree.cpp | 2 +- scene/main/scene_tree.h | 2 +- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/core/core_bind.cpp b/core/core_bind.cpp index e78b5a5622..587af89e7d 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -94,11 +94,13 @@ Vector ResourceLoader::get_recognized_extensions_for_type(const String & return ret; } -void ResourceLoader::add_resource_format_loader(Ref p_format_loader, bool p_at_front) { +void ResourceLoader::add_resource_format_loader(RequiredParam rp_format_loader, bool p_at_front) { + EXTRACT_PARAM_OR_FAIL(p_format_loader, rp_format_loader); ::ResourceLoader::add_resource_format_loader(p_format_loader, p_at_front); } -void ResourceLoader::remove_resource_format_loader(Ref p_format_loader) { +void ResourceLoader::remove_resource_format_loader(RequiredParam rp_format_loader) { + EXTRACT_PARAM_OR_FAIL(p_format_loader, rp_format_loader); ::ResourceLoader::remove_resource_format_loader(p_format_loader); } @@ -179,7 +181,8 @@ Error ResourceSaver::set_uid(const String &p_path, ResourceUID::ID p_uid) { return ::ResourceSaver::set_uid(p_path, p_uid); } -Vector ResourceSaver::get_recognized_extensions(const Ref &p_resource) { +Vector ResourceSaver::get_recognized_extensions(RequiredParam rp_resource) { + EXTRACT_PARAM_OR_FAIL_V(p_resource, rp_resource, Vector()); List exts; ::ResourceSaver::get_recognized_extensions(p_resource, &exts); Vector ret; @@ -189,11 +192,13 @@ Vector ResourceSaver::get_recognized_extensions(const Ref &p_r return ret; } -void ResourceSaver::add_resource_format_saver(Ref p_format_saver, bool p_at_front) { +void ResourceSaver::add_resource_format_saver(RequiredParam rp_format_saver, bool p_at_front) { + EXTRACT_PARAM_OR_FAIL(p_format_saver, rp_format_saver); ::ResourceSaver::add_resource_format_saver(p_format_saver, p_at_front); } -void ResourceSaver::remove_resource_format_saver(Ref p_format_saver) { +void ResourceSaver::remove_resource_format_saver(RequiredParam rp_format_saver) { + EXTRACT_PARAM_OR_FAIL(p_format_saver, rp_format_saver); ::ResourceSaver::remove_resource_format_saver(p_format_saver); } @@ -708,8 +713,8 @@ String OS::get_unique_id() const { return ::OS::get_singleton()->get_unique_id(); } -void OS::add_logger(const Ref &p_logger) { - ERR_FAIL_COND(p_logger.is_null()); +void OS::add_logger(RequiredParam rp_logger) { + EXTRACT_PARAM_OR_FAIL(p_logger, rp_logger); if (!logger_bind) { logger_bind = memnew(LoggerBind); @@ -720,8 +725,8 @@ void OS::add_logger(const Ref &p_logger) { logger_bind->loggers.push_back(p_logger); } -void OS::remove_logger(const Ref &p_logger) { - ERR_FAIL_COND(p_logger.is_null()); +void OS::remove_logger(RequiredParam rp_logger) { + EXTRACT_PARAM_OR_FAIL(p_logger, rp_logger); ERR_FAIL_COND_MSG(!logger_bind || logger_bind->loggers.find(p_logger) == -1, "Could not remove logger, as it hasn't been added."); logger_bind->loggers.erase(p_logger); } @@ -1666,13 +1671,15 @@ StringName ClassDB::class_get_property_setter(const StringName &p_class, const S return ::ClassDB::get_property_setter(p_class, p_property); } -Variant ClassDB::class_get_property(Object *p_object, const StringName &p_property) const { +Variant ClassDB::class_get_property(RequiredParam rp_object, const StringName &p_property) const { + EXTRACT_PARAM_OR_FAIL_V(p_object, rp_object, Variant()); Variant ret; ::ClassDB::get_property(p_object, p_property, ret); return ret; } -Error ClassDB::class_set_property(Object *p_object, const StringName &p_property, const Variant &p_value) const { +Error ClassDB::class_set_property(RequiredParam rp_object, const StringName &p_property, const Variant &p_value) const { + EXTRACT_PARAM_OR_FAIL_V(p_object, rp_object, ERR_INVALID_PARAMETER); Variant ret; bool valid; if (!::ClassDB::set_property(p_object, p_property, p_value, &valid)) { @@ -1989,7 +1996,8 @@ Object *Engine::get_singleton_object(const StringName &p_name) const { return ::Engine::get_singleton()->get_singleton_object(p_name); } -void Engine::register_singleton(const StringName &p_name, Object *p_object) { +void Engine::register_singleton(const StringName &p_name, RequiredParam rp_instance) { + EXTRACT_PARAM_OR_FAIL(p_object, rp_instance); ERR_FAIL_COND_MSG(has_singleton(p_name), vformat("Singleton already registered: '%s'.", String(p_name))); ERR_FAIL_COND_MSG(!String(p_name).is_valid_ascii_identifier(), vformat("Singleton name is not a valid identifier: '%s'.", p_name)); ::Engine::Singleton s; @@ -2016,11 +2024,13 @@ Vector Engine::get_singleton_list() const { return ret; } -Error Engine::register_script_language(ScriptLanguage *p_language) { +Error Engine::register_script_language(RequiredParam rp_language) { + EXTRACT_PARAM_OR_FAIL_V(p_language, rp_language, ERR_INVALID_PARAMETER); return ScriptServer::register_language(p_language); } -Error Engine::unregister_script_language(const ScriptLanguage *p_language) { +Error Engine::unregister_script_language(RequiredParam rp_language) { + EXTRACT_PARAM_OR_FAIL_V(p_language, rp_language, ERR_INVALID_PARAMETER); return ScriptServer::unregister_language(p_language); } diff --git a/core/core_bind.h b/core/core_bind.h index 547c1f0b66..7a6f17d7c4 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -76,8 +76,8 @@ public: Ref load(const String &p_path, const String &p_type_hint = "", CacheMode p_cache_mode = CACHE_MODE_REUSE); Vector get_recognized_extensions_for_type(const String &p_type); - void add_resource_format_loader(Ref p_format_loader, bool p_at_front); - void remove_resource_format_loader(Ref p_format_loader); + void add_resource_format_loader(RequiredParam p_format_loader, bool p_at_front); + void remove_resource_format_loader(RequiredParam p_format_loader); void set_abort_on_missing_resources(bool p_abort); PackedStringArray get_dependencies(const String &p_path); bool has_cached(const String &p_path); @@ -113,9 +113,9 @@ public: Error save(RequiredParam p_resource, const String &p_path, BitField p_flags); Error set_uid(const String &p_path, ResourceUID::ID p_uid); - Vector get_recognized_extensions(const Ref &p_resource); - void add_resource_format_saver(Ref p_format_saver, bool p_at_front); - void remove_resource_format_saver(Ref p_format_saver); + Vector get_recognized_extensions(RequiredParam p_resource); + void add_resource_format_saver(RequiredParam p_format_saver, bool p_at_front); + void remove_resource_format_saver(RequiredParam p_format_saver); ResourceUID::ID get_resource_id_for_path(const String &p_path, bool p_generate = false); @@ -311,8 +311,8 @@ public: Vector get_granted_permissions() const; void revoke_granted_permissions(); - void add_logger(const Ref &p_logger); - void remove_logger(const Ref &p_logger); + void add_logger(RequiredParam p_logger); + void remove_logger(RequiredParam p_logger); void remove_script_loggers(const ScriptLanguage *p_script); static OS *get_singleton() { return singleton; } @@ -533,8 +533,8 @@ public: TypedArray class_get_property_list(const StringName &p_class, bool p_no_inheritance = false) const; StringName class_get_property_getter(const StringName &p_class, const StringName &p_property); StringName class_get_property_setter(const StringName &p_class, const StringName &p_property); - Variant class_get_property(Object *p_object, const StringName &p_property) const; - Error class_set_property(Object *p_object, const StringName &p_property, const Variant &p_value) const; + Variant class_get_property(RequiredParam p_object, const StringName &p_property) const; + Error class_set_property(RequiredParam p_object, const StringName &p_property, const Variant &p_value) const; Variant class_get_property_default_value(const StringName &p_class, const StringName &p_property) const; @@ -611,12 +611,12 @@ public: bool has_singleton(const StringName &p_name) const; Object *get_singleton_object(const StringName &p_name) const; - void register_singleton(const StringName &p_name, Object *p_object); + void register_singleton(const StringName &p_name, RequiredParam p_instance); void unregister_singleton(const StringName &p_name); Vector get_singleton_list() const; - Error register_script_language(ScriptLanguage *p_language); - Error unregister_script_language(const ScriptLanguage *p_language); + Error register_script_language(RequiredParam p_language); + Error unregister_script_language(RequiredParam p_language); int get_script_language_count(); ScriptLanguage *get_script_language(int p_index) const; TypedArray capture_script_backtraces(bool p_include_variables = false) const; diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index 6f32cb6e92..118f6d14b0 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -395,7 +395,8 @@ void Node2D::set_global_transform(const Transform2D &p_transform) { } } -Transform2D Node2D::get_relative_transform_to_parent(const Node *p_parent) const { +Transform2D Node2D::get_relative_transform_to_parent(RequiredParam rp_parent) const { + EXTRACT_PARAM_OR_FAIL_V(p_parent, rp_parent, Transform2D()); ERR_READ_THREAD_GUARD_V(Transform2D()); if (p_parent == this) { return Transform2D(); diff --git a/scene/2d/node_2d.h b/scene/2d/node_2d.h index bcc8146696..f9c2bdd71b 100644 --- a/scene/2d/node_2d.h +++ b/scene/2d/node_2d.h @@ -114,7 +114,7 @@ public: Point2 to_local(Point2 p_global) const; Point2 to_global(Point2 p_local) const; - Transform2D get_relative_transform_to_parent(const Node *p_parent) const; + Transform2D get_relative_transform_to_parent(RequiredParam p_parent) const; Transform2D get_transform() const override; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index d1c0ef42bd..9457833a25 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -1804,7 +1804,7 @@ TypedArray SceneTree::get_processed_tweens() { return ret; } -Ref SceneTree::get_multiplayer(const NodePath &p_for_path) const { +RequiredResult SceneTree::get_multiplayer(const NodePath &p_for_path) const { ERR_FAIL_COND_V_MSG(!Thread::is_main_thread(), Ref(), "Multiplayer can only be manipulated from the main thread."); if (p_for_path.is_empty()) { return multiplayer; diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index b3a3757a17..eac4a6eaa0 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -446,7 +446,7 @@ public: //network API - Ref get_multiplayer(const NodePath &p_for_path = NodePath()) const; + RequiredResult get_multiplayer(const NodePath &p_for_path = NodePath()) const; void set_multiplayer(Ref p_multiplayer, const NodePath &p_root_path = NodePath()); void set_multiplayer_poll_enabled(bool p_enabled); bool is_multiplayer_poll_enabled() const;