Merge pull request #108577 from YYF233333/global_class_list

Simplify `ScriptServer::get_global_class_list`
This commit is contained in:
Thaddeus Crews
2025-09-30 11:19:10 -05:00
23 changed files with 155 additions and 150 deletions

View File

@ -40,13 +40,11 @@
void class_db_api_to_json(const String &p_output_file, ClassDB::APIType p_api) {
Dictionary classes_dict;
List<StringName> class_list;
ClassDB::get_class_list(&class_list);
// Must be alphabetically sorted for hash to compute.
class_list.sort_custom<StringName::AlphCompare>();
LocalVector<StringName> class_list;
ClassDB::get_class_list(class_list);
for (const StringName &E : class_list) {
ClassDB::ClassInfo *t = ClassDB::classes.getptr(E);
for (const StringName &class_name : class_list) {
ClassDB::ClassInfo *t = ClassDB::classes.getptr(class_name);
ERR_FAIL_NULL(t);
if (t->api != p_api || !t->exposed) {
continue;

View File

@ -3858,35 +3858,28 @@ struct SortMethodWithHashes {
bool BindingsGenerator::_populate_object_type_interfaces() {
obj_types.clear();
List<StringName> class_list;
ClassDB::get_class_list(&class_list);
class_list.sort_custom<StringName::AlphCompare>();
while (class_list.size()) {
StringName type_cname = class_list.front()->get();
LocalVector<StringName> class_list;
ClassDB::get_class_list(class_list);
for (const StringName &type_cname : class_list) {
ClassDB::APIType api_type = ClassDB::get_api_type(type_cname);
if (api_type == ClassDB::API_NONE) {
class_list.pop_front();
continue;
}
if (ignored_types.has(type_cname)) {
_log("Ignoring type '%s' because it's in the list of ignored types\n", String(type_cname).utf8().get_data());
class_list.pop_front();
continue;
}
if (!ClassDB::is_class_exposed(type_cname)) {
_log("Ignoring type '%s' because it's not exposed\n", String(type_cname).utf8().get_data());
class_list.pop_front();
continue;
}
if (!ClassDB::is_class_enabled(type_cname)) {
_log("Ignoring type '%s' because it's not enabled\n", String(type_cname).utf8().get_data());
class_list.pop_front();
continue;
}
@ -4447,8 +4440,6 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
obj_types.insert(itype.name + CS_SINGLETON_INSTANCE_SUFFIX, itype);
}
class_list.pop_front();
}
return true;