We are currently facing severe issues due to circular dependencies between our widget blueprints. We don’t know yet what causes it, but some PLACEHOLDER-INST objects manage to end up in widget trees, but are not completely initialized, leading to all kinds of UI breakage in the build (mainly events that don’t get handled).
Furthermore, those PLACEHOLDER-INST objects confuse the garbage collector:
Object MiniMapImageWidget_C /Game/_game_/UI/UIBlueprints/HUD/Minimap.PLACEHOLDER-INST_of_Minimap_C_0:WidgetTree_0.MiniMapImageWidget_70 (0x000002787d860fd0) from cluster WidgetBlueprintGeneratedClass /Game/_game_/UI/UIBlueprints/ManagementMenu/IngameOverview/IngameOverview_Base.IngameOverview_Base_C (0x000002780fc0f200 / 0x00000279229c0340) is referencing 0x000002792079d540 MaterialInstanceDynamic /Game/_game_/UI/UIBlueprints/HUD/Minimap.PLACEHOLDER-INST_of_Minimap_C_0:WidgetTree_0.MiniMapImageWidget_70.MaterialInstanceDynamic_1 which is not part of root set or cluster.
Now, the obvious thing to do is to get rid of those circular dependencies to prevent the PLACEHOLDER-INST objects from being created in the first place. Only issue: It’s rather tedious to break a circular dependency chain, make a new build, and wait for the Garbage Collector to barf out a message listing just the one next circular dependency, and then to rinse and repeat.
This leads to the following question: Is there a tool available in UE4 that lists all blueprints in the project that have circular dependencies?