Merge pull request #94991 from Hilderin/fix-global-script-class-file-no-class

Fix global class cache file not present when no class name
This commit is contained in:
Rémi Verschelde 2024-08-01 00:06:41 +02:00
commit 7e1b74b5f6
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 9 additions and 5 deletions

View file

@ -491,10 +491,6 @@ void ScriptServer::save_global_classes() {
ProjectSettings::get_singleton()->store_global_class_list(gcarr); ProjectSettings::get_singleton()->store_global_class_list(gcarr);
} }
String ScriptServer::get_global_class_cache_file_path() {
return ProjectSettings::get_singleton()->get_global_class_list_path();
}
//////////////////// ////////////////////
ScriptCodeCompletionCache *ScriptCodeCompletionCache::singleton = nullptr; ScriptCodeCompletionCache *ScriptCodeCompletionCache::singleton = nullptr;

View file

@ -97,7 +97,6 @@ public:
static void get_global_class_list(List<StringName> *r_global_classes); static void get_global_class_list(List<StringName> *r_global_classes);
static void get_inheriters_list(const StringName &p_base_type, List<StringName> *r_classes); static void get_inheriters_list(const StringName &p_base_type, List<StringName> *r_classes);
static void save_global_classes(); static void save_global_classes();
static String get_global_class_cache_file_path();
static void init_languages(); static void init_languages();
static void finish_languages(); static void finish_languages();

View file

@ -1353,12 +1353,17 @@ void EditorFileSystem::_thread_func_sources(void *_userdata) {
void EditorFileSystem::_remove_invalid_global_class_names(const HashSet<String> &p_existing_class_names) { void EditorFileSystem::_remove_invalid_global_class_names(const HashSet<String> &p_existing_class_names) {
List<StringName> global_classes; List<StringName> global_classes;
bool must_save = false;
ScriptServer::get_global_class_list(&global_classes); ScriptServer::get_global_class_list(&global_classes);
for (const StringName &class_name : global_classes) { for (const StringName &class_name : global_classes) {
if (!p_existing_class_names.has(class_name)) { if (!p_existing_class_names.has(class_name)) {
ScriptServer::remove_global_class(class_name); ScriptServer::remove_global_class(class_name);
must_save = true;
} }
} }
if (must_save) {
ScriptServer::save_global_classes();
}
} }
String EditorFileSystem::_get_file_by_class_name(EditorFileSystemDirectory *p_dir, const String &p_class_name, EditorFileSystemDirectory::FileInfo *&r_file_info) { String EditorFileSystem::_get_file_by_class_name(EditorFileSystemDirectory *p_dir, const String &p_class_name, EditorFileSystemDirectory::FileInfo *&r_file_info) {
@ -1812,6 +1817,10 @@ void EditorFileSystem::_update_files_icon_path(EditorFileSystemDirectory *edp) {
void EditorFileSystem::_update_script_classes() { void EditorFileSystem::_update_script_classes() {
if (update_script_paths.is_empty()) { if (update_script_paths.is_empty()) {
// Ensure the global class file is always present; it's essential for exports to work.
if (!FileAccess::exists(ProjectSettings::get_singleton()->get_global_class_list_path())) {
ScriptServer::save_global_classes();
}
return; return;
} }