mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	Check that GDExtensionCompatHashes are valid when generating extension_api.json
This commit is contained in:
		
							parent
							
								
									ce9901ef54
								
							
						
					
					
						commit
						5cf6d08dda
					
				
					 2 changed files with 10 additions and 2 deletions
				
			
		|  | @ -32,6 +32,7 @@ | ||||||
| 
 | 
 | ||||||
| #ifndef DISABLE_DEPRECATED | #ifndef DISABLE_DEPRECATED | ||||||
| 
 | 
 | ||||||
|  | #include "core/object/class_db.h" | ||||||
| #include "core/variant/variant.h" | #include "core/variant/variant.h" | ||||||
| 
 | 
 | ||||||
| HashMap<StringName, LocalVector<GDExtensionCompatHashes::Mapping>> GDExtensionCompatHashes::mappings; | HashMap<StringName, LocalVector<GDExtensionCompatHashes::Mapping>> GDExtensionCompatHashes::mappings; | ||||||
|  | @ -52,7 +53,7 @@ bool GDExtensionCompatHashes::lookup_current_hash(const StringName &p_class, con | ||||||
| 	return false; | 	return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool GDExtensionCompatHashes::get_legacy_hashes(const StringName &p_class, const StringName &p_method, Array &r_hashes) { | bool GDExtensionCompatHashes::get_legacy_hashes(const StringName &p_class, const StringName &p_method, Array &r_hashes, bool p_check_valid) { | ||||||
| 	LocalVector<Mapping> *methods = mappings.getptr(p_class); | 	LocalVector<Mapping> *methods = mappings.getptr(p_class); | ||||||
| 	if (!methods) { | 	if (!methods) { | ||||||
| 		return false; | 		return false; | ||||||
|  | @ -61,6 +62,13 @@ bool GDExtensionCompatHashes::get_legacy_hashes(const StringName &p_class, const | ||||||
| 	bool found = false; | 	bool found = false; | ||||||
| 	for (const Mapping &mapping : *methods) { | 	for (const Mapping &mapping : *methods) { | ||||||
| 		if (mapping.method == p_method) { | 		if (mapping.method == p_method) { | ||||||
|  | 			if (p_check_valid) { | ||||||
|  | 				MethodBind *mb = ClassDB::get_method_with_compatibility(p_class, p_method, mapping.current_hash); | ||||||
|  | 				if (!mb) { | ||||||
|  | 					WARN_PRINT(vformat("Compatibility hash %d mapped to non-existent hash %d. Please update gdextension_compat_hashes.cpp.", mapping.legacy_hash, mapping.current_hash)); | ||||||
|  | 					continue; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			r_hashes.push_back(mapping.legacy_hash); | 			r_hashes.push_back(mapping.legacy_hash); | ||||||
| 			found = true; | 			found = true; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -50,7 +50,7 @@ public: | ||||||
| 	static void initialize(); | 	static void initialize(); | ||||||
| 	static void finalize(); | 	static void finalize(); | ||||||
| 	static bool lookup_current_hash(const StringName &p_class, const StringName &p_method, uint32_t p_legacy_hash, uint32_t *r_current_hash); | 	static bool lookup_current_hash(const StringName &p_class, const StringName &p_method, uint32_t p_legacy_hash, uint32_t *r_current_hash); | ||||||
| 	static bool get_legacy_hashes(const StringName &p_class, const StringName &p_method, Array &r_hashes); | 	static bool get_legacy_hashes(const StringName &p_class, const StringName &p_method, Array &r_hashes, bool p_check_valid = true); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif // DISABLE_DEPRECATED
 | #endif // DISABLE_DEPRECATED
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Snopek
						David Snopek