Overridden editable in inheriting class cannot be assigned

Please select what you are reporting on:

Unreal Editor for Fortnite

What Type of Bug are you experiencing?

Verse

Summary

If a concrete class inherits from an abstract base class, and uses the <override> specifier for an editable, that editable does not show up in UEFN, and can thus not be assigned.

Steps to Reproduce

Build this code, and have a look in UEFN - the TriggerDevice editable does not show up:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
 
parent_class := class<abstract>:

    TriggerDevice : trigger_device

    OnPress(Agent : agent):void=
        TriggerDevice.Trigger(Agent)

child_class := class<concrete>(parent_class):

    @editable  # This can be assigned
    ItemGranter : item_granter_device = item_granter_device{}

    @editable  # This cannot be assigned
    TriggerDevice<override> : trigger_device = trigger_device{}

concrete_inherit_issue_demo := class(creative_device):

    @editable
    ChildClass : child_class = child_class{}

    @editable
    Button : button_device = button_device{}

    OnBegin<override>()<suspends>:void=
        Button.InteractedWithEvent.Subscribe(ChildClass.OnPress)

Expected Result

Ideally, the TriggerDevice editable in this example should be assignable in UEFN, or, if this is the intended behavior, the user should be made aware that devices in abstract classes cannot be overridden.

Observed Result

When assigning editables in UEFN to the creative device in this example, only the ItemGranter device can be assigned, the (overridden) TriggerDevice simply does not show up.

Platform(s)

Windows 11, UEFN 29.20

Unfortunately, this problem persists in UEFN 40.10. Here is another example:

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation}
using { /UnrealEngine.com/Temporary/SpatialMath }

parent_class := class:

Device : creative_object

Hide():void=
    # Just a minimal example of a method to be inherited by children
    Trs := Device.GetTransform()
    Target := transform{Translation := Trs.Translation + vector3{Z := -1000.0}, Rotation := IdentityRotation()}
    if (Device.TeleportTo[Target]) {}

inheriting_trigger := class(parent_class):
# Multiple child classes could then implement the same parent method, without repeating code
# However, in the editor, we cannot select the ‘trigger_device’, so it doesn’t work

@editable
Device<override> : trigger_device = trigger_device{}

noninheriting_trigger := class:
# This class can be selected, but it doesn’t inherit the ‘parent_class’ methods, so we would need to duplicate code

@editable
Device : trigger_device = trigger_device{}

inheritance_bug_demo := class(creative_device):

@editable
WorkingEditable : noninheriting_trigger = noninheriting_trigger{}

@editable
BrokenEditable : inheriting_trigger = inheriting_trigger{}

OnBegin<override>()<suspends>:void=
    BrokenEditable.Hide()  # This compiles, but cannot select the editable device under 'BrokenEditable'. This is the issue.


There is no compiler error, but the inheriting editable does not show up in the editor, and can thus not be assigned. There is simply not triangle to unfold, as highlighted in red:

Of course, the workaround is to simply duplicate code for child classes, but it makes it difficult to adhere to good coding practices.