ソースを参照

Fetch extension class props from ClassDB

Extension class properties that have been registered with
ClassDB(`GDNativeInterface::classdb_register_extension_class_property`)
were not fetched previously. (Only  directly providing a property
list using `GDNativeExtensionClassCreationInfo::get_property_list_func`
would work.) This especially caused problems with the C++
bindings since they exclusively rely on ClassDB to register properties.
CaptainProton42 3 年 前
コミット
a9aba86943
1 ファイル変更6 行追加1 行削除
  1. 6 1
      core/object/object.cpp

+ 6 - 1
core/object/object.cpp

@@ -628,7 +628,10 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
 		script_instance->get_property_list(p_list);
 	}
 
-	_get_property_listv(p_list, p_reversed);
+	if (_extension) {
+		p_list->push_back(PropertyInfo(Variant::NIL, _extension->class_name, PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
+		ClassDB::get_property_list(_extension->class_name, p_list, true, this);
+	}
 
 	if (_extension && _extension->get_property_list) {
 		uint32_t pcount;
@@ -641,6 +644,8 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
 		}
 	}
 
+	_get_property_listv(p_list, p_reversed);
+
 	if (!is_class("Script")) { // can still be set, but this is for user-friendliness
 		p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
 	}