Report when register_class overrides classes with the same bl_idname
The unregistering of already registered classes is expected behavior, however this was done silently and can be unsafe as two Addons may have the same names for operators and in case of name collision the addon registered first will break silently / start behave unexpectedly. So reporting the unregister step seems reasonable. During Addon development, this might seem noisy when classes are frequently updated, however catching the problematic cases instead of being silent might be beneficial. Part of #116370 Pull Request: https://projects.blender.org/blender/blender/pulls/116374
This commit is contained in:
committed by
Philipp Oeser
parent
0e68898a37
commit
c5e2ec8a1a
@@ -325,6 +325,13 @@ static StructRNA *rna_KeyingSetInfo_register(Main *bmain,
|
||||
/* check if we have registered this info before, and remove it */
|
||||
ksi = ANIM_keyingset_info_find_name(dummy_ksi.idname);
|
||||
if (ksi) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_ksi.idname);
|
||||
|
||||
StructRNA *srna = ksi->rna_ext.srna;
|
||||
if (!(srna && rna_KeyingSetInfo_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -991,6 +991,13 @@ static StructRNA *rna_NodeTree_register(Main *bmain,
|
||||
/* check if we have registered this tree type before, and remove it */
|
||||
nt = ntreeTypeFind(dummy_nt.idname);
|
||||
if (nt) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"Registering node tree class: '%s', bl_idname '%s' has been registered before, "
|
||||
"unregistering previous",
|
||||
identifier,
|
||||
dummy_nt.idname);
|
||||
|
||||
/* NOTE: unlike most types `nt->rna_ext.srna` doesn't need to be checked for nullptr. */
|
||||
if (!rna_NodeTree_unregister(bmain, nt->rna_ext.srna)) {
|
||||
BKE_reportf(reports,
|
||||
@@ -1663,6 +1670,13 @@ static bNodeType *rna_Node_register_base(Main *bmain,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"Registering node class: '%s', bl_idname '%s' has been registered before, "
|
||||
"unregistering previous",
|
||||
identifier,
|
||||
dummy_nt.idname);
|
||||
|
||||
/* NOTE: unlike most types `nt->rna_ext.srna` doesn't need to be checked for nullptr. */
|
||||
if (!rna_Node_unregister(bmain, nt->rna_ext.srna)) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -348,6 +348,13 @@ static StructRNA *rna_RenderEngine_register(Main *bmain,
|
||||
et = static_cast<RenderEngineType *>(
|
||||
BLI_findstring(&R_engines, dummy_et.idname, offsetof(RenderEngineType, idname)));
|
||||
if (et) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_et.idname);
|
||||
|
||||
StructRNA *srna = et->rna_ext.srna;
|
||||
if (!(srna && rna_RenderEngine_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -315,6 +315,12 @@ static StructRNA *rna_Panel_register(Main *bmain,
|
||||
PanelType *pt_next = pt->next;
|
||||
StructRNA *srna = pt->rna_ext.srna;
|
||||
if (srna) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_pt.idname);
|
||||
if (!rna_Panel_unregister(bmain, srna)) {
|
||||
BKE_reportf(reports,
|
||||
RPT_ERROR,
|
||||
@@ -721,6 +727,13 @@ static StructRNA *rna_UIList_register(Main *bmain,
|
||||
/* Check if we have registered this UI-list type before, and remove it. */
|
||||
ult = WM_uilisttype_find(dummy_ult.idname, true);
|
||||
if (ult) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_ult.idname);
|
||||
|
||||
StructRNA *srna = ult->rna_ext.srna;
|
||||
if (!(srna && rna_UIList_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
@@ -852,6 +865,13 @@ static StructRNA *rna_Header_register(Main *bmain,
|
||||
ht = static_cast<HeaderType *>(
|
||||
BLI_findstring(&art->headertypes, dummy_ht.idname, offsetof(HeaderType, idname)));
|
||||
if (ht) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_ht.idname);
|
||||
|
||||
StructRNA *srna = ht->rna_ext.srna;
|
||||
if (!(srna && rna_Header_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
@@ -1002,6 +1022,13 @@ static StructRNA *rna_Menu_register(Main *bmain,
|
||||
/* check if we have registered this menu type before, and remove it */
|
||||
mt = WM_menutype_find(dummy_mt.idname, true);
|
||||
if (mt) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_mt.idname);
|
||||
|
||||
StructRNA *srna = mt->rna_ext.srna;
|
||||
if (!(srna && rna_Menu_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
@@ -1207,6 +1234,12 @@ static StructRNA *rna_AssetShelf_register(Main *bmain,
|
||||
LISTBASE_FOREACH (AssetShelfType *, iter_shelf_type, &space_type->asset_shelf_types) {
|
||||
if (STREQ(iter_shelf_type->idname, dummy_shelf_type.idname)) {
|
||||
if (iter_shelf_type->rna_ext.srna) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"Registering asset shelf class: '%s' has been registered before, "
|
||||
"unregistering previous",
|
||||
dummy_shelf_type.idname);
|
||||
|
||||
rna_AssetShelf_unregister(bmain, iter_shelf_type->rna_ext.srna);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -82,6 +82,13 @@ static StructRNA *rna_USDHook_register(Main *bmain,
|
||||
/* check if we have registered this hook before, and remove it */
|
||||
hook = USD_find_hook_name(dummy_hook.idname);
|
||||
if (hook) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_hook.idname);
|
||||
|
||||
StructRNA *srna = hook->rna_ext.srna;
|
||||
if (!rna_USDHook_unregister(bmain, srna)) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -1059,6 +1059,13 @@ static StructRNA *rna_AddonPref_register(Main *bmain,
|
||||
/* Check if we have registered this add-on preference type before, and remove it. */
|
||||
apt = BKE_addon_pref_type_find(dummy_addon.module, true);
|
||||
if (apt) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_apt.idname);
|
||||
|
||||
StructRNA *srna = apt->rna_ext.srna;
|
||||
if (!(srna && rna_AddonPref_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -1185,6 +1185,13 @@ static StructRNA *rna_wmKeyConfigPref_register(Main *bmain,
|
||||
/* check if we have registered this keyconf-prefs type before, and remove it */
|
||||
kpt_rt = BKE_keyconfig_pref_type_find(dummy_kpt.idname, true);
|
||||
if (kpt_rt) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_kpt.idname);
|
||||
|
||||
StructRNA *srna = kpt_rt->rna_ext.srna;
|
||||
if (!(srna && rna_wmKeyConfigPref_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
@@ -1530,6 +1537,13 @@ static StructRNA *rna_Operator_register(Main *bmain,
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(dummy_ot.idname, true);
|
||||
if (ot) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_ot.idname);
|
||||
|
||||
StructRNA *srna = ot->rna_ext.srna;
|
||||
if (!(srna && rna_Operator_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
@@ -1700,6 +1714,13 @@ static StructRNA *rna_MacroOperator_register(Main *bmain,
|
||||
{
|
||||
wmOperatorType *ot = WM_operatortype_find(dummy_ot.idname, true);
|
||||
if (ot) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_ot.idname);
|
||||
|
||||
StructRNA *srna = ot->rna_ext.srna;
|
||||
if (!(srna && rna_Operator_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
@@ -460,6 +460,13 @@ static StructRNA *rna_Gizmo_register(Main *bmain,
|
||||
{
|
||||
const wmGizmoType *gzt = WM_gizmotype_find(dummy_gt.idname, true);
|
||||
if (gzt) {
|
||||
BKE_reportf(reports,
|
||||
RPT_INFO,
|
||||
"%s '%s', bl_idname '%s' has been registered before, unregistering previous",
|
||||
error_prefix,
|
||||
identifier,
|
||||
dummy_gt.idname);
|
||||
|
||||
StructRNA *srna = gzt->rna_ext.srna;
|
||||
if (!(srna && rna_Gizmo_unregister(bmain, srna))) {
|
||||
BKE_reportf(reports,
|
||||
|
||||
Reference in New Issue
Block a user