MonoObject* MonoField::getAttribute(MonoClass* monoClass) { // TODO - Consider caching custom attributes or just initializing them all at load ::MonoClass* parentClass = mono_field_get_parent(mField); MonoCustomAttrInfo* attrInfo = mono_custom_attrs_from_field(parentClass, mField); if(attrInfo == nullptr) return nullptr; MonoObject* foundAttr = mono_custom_attrs_get_attr(attrInfo, monoClass->_getInternalClass()); mono_custom_attrs_free(attrInfo); return foundAttr; }
bool MonoField::hasAttribute(MonoClass* monoClass) { // TODO - Consider caching custom attributes or just initializing them all at load ::MonoClass* parentClass = mono_field_get_parent(mField); MonoCustomAttrInfo* attrInfo = mono_custom_attrs_from_field(parentClass, mField); if(attrInfo == nullptr) return false; bool hasAttr = mono_custom_attrs_has_attr(attrInfo, monoClass->_getInternalClass()) != 0; mono_custom_attrs_free(attrInfo); return hasAttr; }
static void add_field (MonoClassField *field) { MonoClass *k; MonoCustomAttrInfo* cattrs; gpointer val = NULL, oldkey = NULL; if (g_hash_table_lookup_extended (field_table, field, &oldkey, &val)) return; g_hash_table_insert (field_table, field, NULL); add_type (field->parent); k = mono_class_from_mono_type (field->type); add_type (k); cattrs = mono_custom_attrs_from_field (field->parent, field); handle_cattrs (cattrs); }
void GDMonoField::fetch_attributes() { ERR_FAIL_COND(attributes != NULL); attributes = mono_custom_attrs_from_field(owner->get_raw(), get_raw()); attrs_fetched = true; }