Files
2025-02-23 04:45:06 +01:00

52 lines
2.0 KiB
ReStructuredText

GD0111: The exported tool button must be an expression-bodied property
======================================================================
==================================== ======================================
Value
==================================== ======================================
**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.
.. code-block:: csharp
[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.
.. _expression-bodied property: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members#properties