Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

GD0111: The exported tool button must be an expression-bodied property

Rule ID

GD0111

Category

Usage

Fix is breaking or non-breaking

Non-breaking

Enabled by default

Yes

Cause

A property is annotated with the [ExportToolButton] attribute but it's not an expression-bodied property.

Rule description

When reloading the .NET assembly, Godot will attempt to serialize exported members to preserve their values. A field or a property with a backing field that stores a Callable may prevent the unloading of the assembly.

An expression-bodied property doesn't have a backing field and won't store the Callable, so Godot won't attempt to serialize it, which should result in the successful reloading of the .NET assembly.

[ExportToolButton("Click me!")]
public Callable ValidClickMeButton => Callable.From(ClickMe);

// Invalid because the Callable will be stored in the property's backing field.
[ExportToolButton("Click me!")]
public Callable InvalidClickMeButton { get; } = Callable.From(ClickMe);

How to fix violations

To fix a violation of this rule, replace the property implementation with an expression-bodied property.

When to suppress warnings

Do not suppress a warning from this rule. Callable instances may prevent the .NET assembly from unloading.


User-contributed notes

Please read the User-contributed notes policy before submitting a comment.