using System;
using Godot.Collections;
using Array = Godot.Collections.Array;
namespace Godot.SourceGenerators.Sample;
public class MustBeVariantMethods
{
public void MustBeVariantMethodCalls()
{
Method<bool>();
Method<char>();
Method<sbyte>();
Method<byte>();
Method<short>();
Method<ushort>();
Method<int>();
Method<uint>();
Method<long>();
Method<ulong>();
Method<float>();
Method<double>();
Method<string>();
Method<Vector2>();
Method<Vector2I>();
Method<Rect2>();
Method<Rect2I>();
Method<Transform2D>();
Method<Vector3>();
Method<Vector3I>();
Method<Vector4>();
Method<Vector4I>();
Method<Basis>();
Method<Quaternion>();
Method<Transform3D>();
Method<Projection>();
Method<Aabb>();
Method<Color>();
Method<Plane>();
Method<Callable>();
Method<Signal>();
Method<GodotObject>();
Method<StringName>();
Method<NodePath>();
Method<Rid>();
Method<Dictionary>();
Method<Array>();
Method<byte[]>();
Method<int[]>();
Method<long[]>();
Method<float[]>();
Method<double[]>();
Method<string[]>();
Method<Vector2[]>();
Method<Vector3[]>();
Method<Color[]>();
Method<GodotObject[]>();
Method<StringName[]>();
Method<NodePath[]>();
Method<Rid[]>();
// This call fails because generic type is not Variant-compatible.
//Method<object>();
}
public void Method<[MustBeVariant] T>()
{
}
public void MustBeVariantClasses()
{
new ClassWithGenericVariant<bool>();
new ClassWithGenericVariant<char>();
new ClassWithGenericVariant<sbyte>();
new ClassWithGenericVariant<byte>();
new ClassWithGenericVariant<short>();
new ClassWithGenericVariant<ushort>();
new ClassWithGenericVariant<int>();
new ClassWithGenericVariant<uint>();
new ClassWithGenericVariant<long>();
new ClassWithGenericVariant<ulong>();
new ClassWithGenericVariant<float>();
new ClassWithGenericVariant<double>();
new ClassWithGenericVariant<string>();
new ClassWithGenericVariant<Vector2>();
new ClassWithGenericVariant<Vector2I>();
new ClassWithGenericVariant<Rect2>();
new ClassWithGenericVariant<Rect2I>();
new ClassWithGenericVariant<Transform2D>();
new ClassWithGenericVariant<Vector3>();
new ClassWithGenericVariant<Vector3I>();
new ClassWithGenericVariant<Vector4>();
new ClassWithGenericVariant<Vector4I>();
new ClassWithGenericVariant<Basis>();
new ClassWithGenericVariant<Quaternion>();
new ClassWithGenericVariant<Transform3D>();
new ClassWithGenericVariant<Projection>();
new ClassWithGenericVariant<Aabb>();
new ClassWithGenericVariant<Color>();
new ClassWithGenericVariant<Plane>();
new ClassWithGenericVariant<Callable>();
new ClassWithGenericVariant<Signal>();
new ClassWithGenericVariant<GodotObject>();
new ClassWithGenericVariant<StringName>();
new ClassWithGenericVariant<NodePath>();
new ClassWithGenericVariant<Rid>();
new ClassWithGenericVariant<Dictionary>();
new ClassWithGenericVariant<Array>();
new ClassWithGenericVariant<byte[]>();
new ClassWithGenericVariant<int[]>();
new ClassWithGenericVariant<long[]>();
new ClassWithGenericVariant<float[]>();
new ClassWithGenericVariant<double[]>();
new ClassWithGenericVariant<string[]>();
new ClassWithGenericVariant<Vector2[]>();
new ClassWithGenericVariant<Vector3[]>();
new ClassWithGenericVariant<Color[]>();
new ClassWithGenericVariant<GodotObject[]>();
new ClassWithGenericVariant<StringName[]>();
new ClassWithGenericVariant<NodePath[]>();
new ClassWithGenericVariant<Rid[]>();
// This class fails because generic type is not Variant-compatible.
//new ClassWithGenericVariant<object>();
}
}
public class ClassWithGenericVariant<[MustBeVariant] T>
{
}
public class MustBeVariantAnnotatedMethods
{
[GenericTypeAttribute<bool>()]
public void MethodWithAttributeBool()
{
}
[GenericTypeAttribute<char>()]
public void MethodWithAttributeChar()
{
}
[GenericTypeAttribute<sbyte>()]
public void MethodWithAttributeSByte()
{
}
[GenericTypeAttribute<byte>()]
public void MethodWithAttributeByte()
{
}
[GenericTypeAttribute<short>()]
public void MethodWithAttributeInt16()
{
}
[GenericTypeAttribute<ushort>()]
public void MethodWithAttributeUInt16()
{
}
[GenericTypeAttribute<int>()]
public void MethodWithAttributeInt32()
{
}
[GenericTypeAttribute<uint>()]
public void MethodWithAttributeUInt32()
{
}
[GenericTypeAttribute<long>()]
public void MethodWithAttributeInt64()
{
}
[GenericTypeAttribute<ulong>()]
public void MethodWithAttributeUInt64()
{
}
[GenericTypeAttribute<float>()]
public void MethodWithAttributeSingle()
{
}
[GenericTypeAttribute<double>()]
public void MethodWithAttributeDouble()
{
}
[GenericTypeAttribute<string>()]
public void MethodWithAttributeString()
{
}
[GenericTypeAttribute<Vector2>()]
public void MethodWithAttributeVector2()
{
}
[GenericTypeAttribute<Vector2I>()]
public void MethodWithAttributeVector2I()
{
}
[GenericTypeAttribute<Rect2>()]
public void MethodWithAttributeRect2()
{
}
[GenericTypeAttribute<Rect2I>()]
public void MethodWithAttributeRect2I()
{
}
[GenericTypeAttribute<Transform2D>()]
public void MethodWithAttributeTransform2D()
{
}
[GenericTypeAttribute<Vector3>()]
public void MethodWithAttributeVector3()
{
}
[GenericTypeAttribute<Vector3I>()]
public void MethodWithAttributeVector3I()
{
}
[GenericTypeAttribute<Vector4>()]
public void MethodWithAttributeVector4()
{
}
[GenericTypeAttribute<Vector4I>()]
public void MethodWithAttributeVector4I()
{
}
[GenericTypeAttribute<Basis>()]
public void MethodWithAttributeBasis()
{
}
[GenericTypeAttribute<Quaternion>()]
public void MethodWithAttributeQuaternion()
{
}
[GenericTypeAttribute<Transform3D>()]
public void MethodWithAttributeTransform3D()
{
}
[GenericTypeAttribute<Projection>()]
public void MethodWithAttributeProjection()
{
}
[GenericTypeAttribute<Aabb>()]
public void MethodWithAttributeAabb()
{
}
[GenericTypeAttribute<Color>()]
public void MethodWithAttributeColor()
{
}
[GenericTypeAttribute<Plane>()]
public void MethodWithAttributePlane()
{
}
[GenericTypeAttribute<Callable>()]
public void MethodWithAttributeCallable()
{
}
[GenericTypeAttribute<Signal>()]
public void MethodWithAttributeSignal()
{
}
[GenericTypeAttribute<GodotObject>()]
public void MethodWithAttributeGodotObject()
{
}
[GenericTypeAttribute<StringName>()]
public void MethodWithAttributeStringName()
{
}
[GenericTypeAttribute<NodePath>()]
public void MethodWithAttributeNodePath()
{
}
[GenericTypeAttribute<Rid>()]
public void MethodWithAttributeRid()
{
}
[GenericTypeAttribute<Dictionary>()]
public void MethodWithAttributeDictionary()
{
}
[GenericTypeAttribute<Array>()]
public void MethodWithAttributeArray()
{
}
[GenericTypeAttribute<byte[]>()]
public void MethodWithAttributeByteArray()
{
}
[GenericTypeAttribute<int[]>()]
public void MethodWithAttributeInt32Array()
{
}
[GenericTypeAttribute<long[]>()]
public void MethodWithAttributeInt64Array()
{
}
[GenericTypeAttribute<float[]>()]
public void MethodWithAttributeSingleArray()
{
}
[GenericTypeAttribute<double[]>()]
public void MethodWithAttributeDoubleArray()
{
}
[GenericTypeAttribute<string[]>()]
public void MethodWithAttributeStringArray()
{
}
[GenericTypeAttribute<Vector2[]>()]
public void MethodWithAttributeVector2Array()
{
}
[GenericTypeAttribute<Vector3[]>()]
public void MethodWithAttributeVector3Array()
{
}
[GenericTypeAttribute<Color[]>()]
public void MethodWithAttributeColorArray()
{
}
[GenericTypeAttribute<GodotObject[]>()]
public void MethodWithAttributeGodotObjectArray()
{
}
[GenericTypeAttribute<StringName[]>()]
public void MethodWithAttributeStringNameArray()
{
}
[GenericTypeAttribute<NodePath[]>()]
public void MethodWithAttributeNodePathArray()
{
}
[GenericTypeAttribute<Rid[]>()]
public void MethodWithAttributeRidArray()
{
}
// This method definition fails because generic type is not Variant-compatible.
/*
[GenericTypeAttribute<object>()]
public void MethodWithWrongAttribute()
{
}
*/
}
[GenericTypeAttribute<bool>()]
public class ClassVariantAnnotatedBool
{
}
[GenericTypeAttribute<char>()]
public class ClassVariantAnnotatedChar
{
}
[GenericTypeAttribute<sbyte>()]
public class ClassVariantAnnotatedSByte
{
}
[GenericTypeAttribute<byte>()]
public class ClassVariantAnnotatedByte
{
}
[GenericTypeAttribute<short>()]
public class ClassVariantAnnotatedInt16
{
}
[GenericTypeAttribute<ushort>()]
public class ClassVariantAnnotatedUInt16
{
}
[GenericTypeAttribute<int>()]
public class ClassVariantAnnotatedInt32
{
}
[GenericTypeAttribute<uint>()]
public class ClassVariantAnnotatedUInt32
{
}
[GenericTypeAttribute<long>()]
public class ClassVariantAnnotatedInt64
{
}
[GenericTypeAttribute<ulong>()]
public class ClassVariantAnnotatedUInt64
{
}
[GenericTypeAttribute<float>()]
public class ClassVariantAnnotatedSingle
{
}
[GenericTypeAttribute<double>()]
public class ClassVariantAnnotatedDouble
{
}
[GenericTypeAttribute<string>()]
public class ClassVariantAnnotatedString
{
}
[GenericTypeAttribute<Vector2>()]
public class ClassVariantAnnotatedVector2
{
}
[GenericTypeAttribute<Vector2I>()]
public class ClassVariantAnnotatedVector2I
{
}
[GenericTypeAttribute<Rect2>()]
public class ClassVariantAnnotatedRect2
{
}
[GenericTypeAttribute<Rect2I>()]
public class ClassVariantAnnotatedRect2I
{
}
[GenericTypeAttribute<Transform2D>()]
public class ClassVariantAnnotatedTransform2D
{
}
[GenericTypeAttribute<Vector3>()]
public class ClassVariantAnnotatedVector3
{
}
[GenericTypeAttribute<Vector3I>()]
public class ClassVariantAnnotatedVector3I
{
}
[GenericTypeAttribute<Vector4>()]
public class ClassVariantAnnotatedVector4
{
}
[GenericTypeAttribute<Vector4I>()]
public class ClassVariantAnnotatedVector4I
{
}
[GenericTypeAttribute<Basis>()]
public class ClassVariantAnnotatedBasis
{
}
[GenericTypeAttribute<Quaternion>()]
public class ClassVariantAnnotatedQuaternion
{
}
[GenericTypeAttribute<Transform3D>()]
public class ClassVariantAnnotatedTransform3D
{
}
[GenericTypeAttribute<Projection>()]
public class ClassVariantAnnotatedProjection
{
}
[GenericTypeAttribute<Aabb>()]
public class ClassVariantAnnotatedAabb
{
}
[GenericTypeAttribute<Color>()]
public class ClassVariantAnnotatedColor
{
}
[GenericTypeAttribute<Plane>()]
public class ClassVariantAnnotatedPlane
{
}
[GenericTypeAttribute<Callable>()]
public class ClassVariantAnnotatedCallable
{
}
[GenericTypeAttribute<Signal>()]
public class ClassVariantAnnotatedSignal
{
}
[GenericTypeAttribute<GodotObject>()]
public class ClassVariantAnnotatedGodotObject
{
}
[GenericTypeAttribute<StringName>()]
public class ClassVariantAnnotatedStringName
{
}
[GenericTypeAttribute<NodePath>()]
public class ClassVariantAnnotatedNodePath
{
}
[GenericTypeAttribute<Rid>()]
public class ClassVariantAnnotatedRid
{
}
[GenericTypeAttribute<Dictionary>()]
public class ClassVariantAnnotatedDictionary
{
}
[GenericTypeAttribute<Array>()]
public class ClassVariantAnnotatedArray
{
}
[GenericTypeAttribute<byte[]>()]
public class ClassVariantAnnotatedByteArray
{
}
[GenericTypeAttribute<int[]>()]
public class ClassVariantAnnotatedInt32Array
{
}
[GenericTypeAttribute<long[]>()]
public class ClassVariantAnnotatedInt64Array
{
}
[GenericTypeAttribute<float[]>()]
public class ClassVariantAnnotatedSingleArray
{
}
[GenericTypeAttribute<double[]>()]
public class ClassVariantAnnotatedDoubleArray
{
}
[GenericTypeAttribute<string[]>()]
public class ClassVariantAnnotatedStringArray
{
}
[GenericTypeAttribute<Vector2[]>()]
public class ClassVariantAnnotatedVector2Array
{
}
[GenericTypeAttribute<Vector3[]>()]
public class ClassVariantAnnotatedVector3Array
{
}
[GenericTypeAttribute<Color[]>()]
public class ClassVariantAnnotatedColorArray
{
}
[GenericTypeAttribute<GodotObject[]>()]
public class ClassVariantAnnotatedGodotObjectArray
{
}
[GenericTypeAttribute<StringName[]>()]
public class ClassVariantAnnotatedStringNameArray
{
}
[GenericTypeAttribute<NodePath[]>()]
public class ClassVariantAnnotatedNodePathArray
{
}
[GenericTypeAttribute<Rid[]>()]
public class ClassVariantAnnotatedRidArray
{
}
// This class definition fails because generic type is not Variant-compatible.
/*
[GenericTypeAttribute<object>()]
public class ClassNonVariantAnnotated
{
}
*/
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class GenericTypeAttribute<[MustBeVariant] T> : Attribute
{
}