Description

The stems from a really old change (CL 2948683) to fix [Link Removed].

Compiling ObjectA will call RefreshExternalBlueprintDependencyNodes on its dependent BP, 
ObjectB_ReferencesA, which reconstructs the nodes. After this call, we remove the dirty flag from ObjectB_ReferencesA. This is why ObjectB_ReferencesA is not marked for dirty.

Additionally, ObjectB_ReferencesA is recompiled because its a dependent BP of ObjectA. After compilation, ObjectC_UsesClassDefaultsB is notified via the OnBlueprintCompiledDelegate delegate. The delegate reconstructs the GetClassDefaults, which dirties the package.

Steps to Reproduce
  1. Open the Blueprint editor in any project
  2. Create a BP object named ObjectA, which is empty with no references
  3. Create a BP object named ObjectB_ReferencesA, which references A with any node on any graph (ex. a ConstructObjectFromClass with ObjectA)
  4. Create a BP object named ObjectC_UsesClassDefaultsB, which uses GetClassDefaults on ObjectB_ReferencesA on any graph)
  5. Compile and save the new files.
  6. In ObjectA, add a new variable of any type and hit compile.
  7. Observe that ObjectC_UsesClassDefaultsB is marked dirty, but ObjectB_ReferencesA isn't.
  8. Expected behavior: neither ObjectC_UsesClassDefaultsB nor ObjectB_ReferencesA is marked as dirty.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-196326 in the post.

0
Login to Vote

Backlogged
CreatedSep 22, 2023
UpdatedSep 28, 2023