diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 07ab99e98bcd..52235b18549b 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -1155,8 +1155,8 @@ RBSet GDScript::get_dependencies() { return dependencies; } -RBSet GDScript::get_inverted_dependencies() { - RBSet inverted_dependencies; +HashMap> GDScript::get_all_dependencies() { + HashMap> all_dependencies; List scripts; { @@ -1170,51 +1170,42 @@ RBSet GDScript::get_inverted_dependencies() { } for (GDScript *scr : scripts) { - if (scr == nullptr || scr == this || scr->destructing) { + if (scr == nullptr || scr->destructing) { continue; } - - RBSet scr_dependencies = scr->get_dependencies(); - if (scr_dependencies.has(this)) { - inverted_dependencies.insert(scr); - } + all_dependencies.insert(scr, scr->get_dependencies()); } - return inverted_dependencies; + return all_dependencies; } RBSet GDScript::get_must_clear_dependencies() { RBSet dependencies = get_dependencies(); RBSet must_clear_dependencies; - HashMap> inverted_dependencies; - - for (GDScript *E : dependencies) { - inverted_dependencies.insert(E, E->get_inverted_dependencies()); - } + HashMap> all_dependencies = get_all_dependencies(); RBSet cant_clear; - for (KeyValue> &E : inverted_dependencies) { + for (KeyValue> &E : all_dependencies) { + if (dependencies.has(E.key)) { + continue; + } for (GDScript *F : E.value) { - if (!dependencies.has(F)) { - cant_clear.insert(E.key); - for (GDScript *G : E.key->get_dependencies()) { - cant_clear.insert(G); - } - break; + if (dependencies.has(F)) { + cant_clear.insert(F); } } } - for (KeyValue> &E : inverted_dependencies) { - if (cant_clear.has(E.key) || ScriptServer::is_global_class(E.key->get_fully_qualified_name())) { + for (GDScript *E : dependencies) { + if (cant_clear.has(E) || ScriptServer::is_global_class(E->get_fully_qualified_name())) { continue; } - must_clear_dependencies.insert(E.key); + must_clear_dependencies.insert(E); } cant_clear.clear(); dependencies.clear(); - inverted_dependencies.clear(); + all_dependencies.clear(); return must_clear_dependencies; } diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h index aba4d7e72177..5165ec1b0694 100644 --- a/modules/gdscript/gdscript.h +++ b/modules/gdscript/gdscript.h @@ -254,7 +254,7 @@ class GDScript : public Script { const Ref &get_native() const { return native; } RBSet get_dependencies(); - RBSet get_inverted_dependencies(); + HashMap> get_all_dependencies(); RBSet get_must_clear_dependencies(); virtual bool has_script_signal(const StringName &p_signal) const override;