Files
2024-07-24 20:49:13 +02:00

59 lines
2.3 KiB
ReStructuredText

GD0302: The generic type parameter must be annotated with the MustBeVariant attribute
=====================================================================================
==================================== ======================================
Value
==================================== ======================================
**Rule ID** GD0302
**Category** Usage
**Fix is breaking or non-breaking** Breaking
**Enabled by default** Yes
==================================== ======================================
Cause
-----
A generic type is specified for a generic type argument when a
:ref:`Variant-compatible type <c_sharp_variant_compatible_types>` is expected,
but the specified generic type is not annotated with the ``[MustBeVariant]``
attribute.
Rule description
----------------
When a generic type parameter is annotated with the ``[MustBeVariant]`` attribute,
the generic type is required to be a Variant-compatible type. When the type used
is also a generic type, this generic type must be annotated with the ``[MustBeVariant]``
attribute as well. For example, the generic ``Godot.Collections.Array<T>`` type
only supports items of a type that can be converted to Variant, a generic type
can be specified if it's properly annotated.
.. code-block:: csharp
public void Method1<T>()
{
// T is not valid here because it may not a Variant-compatible type.
var invalidArray = new Godot.Collections.Array<T>();
}
public void Method2<[MustBeVariant] T>()
{
// T is guaranteed to be a Variant-compatible type because it's annotated
// with the [MustBeVariant] attribute, so it can be used here.
var validArray = new Godot.Collections.Array<T>();
}
How to fix violations
---------------------
To fix a violation of this rule, add the ``[MustBeVariant]`` attribute to the
generic type that is used as a generic type argument that must be Variant-compatible.
When to suppress warnings
-------------------------
Do not suppress a warning from this rule. API that contains generic type arguments
annotated with the ``[MustBeVariant]`` attribute usually has this requirement
because the values will be passed to the engine, if the type can't be marshalled
it will result in runtime errors.