MustBeVariant.GD0301.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. using System;
  2. using Godot;
  3. using Godot.Collections;
  4. using Array = Godot.Collections.Array;
  5. public class MustBeVariantGD0301
  6. {
  7. public void MethodCallsError()
  8. {
  9. // This raises a GD0301 diagnostic error: object is not Variant (and Method<T> requires a variant generic type).
  10. Method<{|GD0301:object|}>();
  11. }
  12. public void MethodCallsOk()
  13. {
  14. // All these calls are valid because they are Variant types.
  15. Method<bool>();
  16. Method<char>();
  17. Method<sbyte>();
  18. Method<byte>();
  19. Method<short>();
  20. Method<ushort>();
  21. Method<int>();
  22. Method<uint>();
  23. Method<long>();
  24. Method<ulong>();
  25. Method<float>();
  26. Method<double>();
  27. Method<string>();
  28. Method<Vector2>();
  29. Method<Vector2I>();
  30. Method<Rect2>();
  31. Method<Rect2I>();
  32. Method<Transform2D>();
  33. Method<Vector3>();
  34. Method<Vector3I>();
  35. Method<Vector4>();
  36. Method<Vector4I>();
  37. Method<Basis>();
  38. Method<Quaternion>();
  39. Method<Transform3D>();
  40. Method<Projection>();
  41. Method<Aabb>();
  42. Method<Color>();
  43. Method<Plane>();
  44. Method<Callable>();
  45. Method<Signal>();
  46. Method<GodotObject>();
  47. Method<StringName>();
  48. Method<NodePath>();
  49. Method<Rid>();
  50. Method<Dictionary>();
  51. Method<Array>();
  52. Method<byte[]>();
  53. Method<int[]>();
  54. Method<long[]>();
  55. Method<float[]>();
  56. Method<double[]>();
  57. Method<string[]>();
  58. Method<Vector2[]>();
  59. Method<Vector3[]>();
  60. Method<Color[]>();
  61. Method<GodotObject[]>();
  62. Method<StringName[]>();
  63. Method<NodePath[]>();
  64. Method<Rid[]>();
  65. }
  66. public void MethodCallDynamic()
  67. {
  68. dynamic self = this;
  69. self.Method<object>();
  70. }
  71. public void Method<[MustBeVariant] T>()
  72. {
  73. }
  74. public void MustBeVariantClasses()
  75. {
  76. new ClassWithGenericVariant<bool>();
  77. new ClassWithGenericVariant<char>();
  78. new ClassWithGenericVariant<sbyte>();
  79. new ClassWithGenericVariant<byte>();
  80. new ClassWithGenericVariant<short>();
  81. new ClassWithGenericVariant<ushort>();
  82. new ClassWithGenericVariant<int>();
  83. new ClassWithGenericVariant<uint>();
  84. new ClassWithGenericVariant<long>();
  85. new ClassWithGenericVariant<ulong>();
  86. new ClassWithGenericVariant<float>();
  87. new ClassWithGenericVariant<double>();
  88. new ClassWithGenericVariant<string>();
  89. new ClassWithGenericVariant<Vector2>();
  90. new ClassWithGenericVariant<Vector2I>();
  91. new ClassWithGenericVariant<Rect2>();
  92. new ClassWithGenericVariant<Rect2I>();
  93. new ClassWithGenericVariant<Transform2D>();
  94. new ClassWithGenericVariant<Vector3>();
  95. new ClassWithGenericVariant<Vector3I>();
  96. new ClassWithGenericVariant<Vector4>();
  97. new ClassWithGenericVariant<Vector4I>();
  98. new ClassWithGenericVariant<Basis>();
  99. new ClassWithGenericVariant<Quaternion>();
  100. new ClassWithGenericVariant<Transform3D>();
  101. new ClassWithGenericVariant<Projection>();
  102. new ClassWithGenericVariant<Aabb>();
  103. new ClassWithGenericVariant<Color>();
  104. new ClassWithGenericVariant<Plane>();
  105. new ClassWithGenericVariant<Callable>();
  106. new ClassWithGenericVariant<Signal>();
  107. new ClassWithGenericVariant<GodotObject>();
  108. new ClassWithGenericVariant<StringName>();
  109. new ClassWithGenericVariant<NodePath>();
  110. new ClassWithGenericVariant<Rid>();
  111. new ClassWithGenericVariant<Dictionary>();
  112. new ClassWithGenericVariant<Array>();
  113. new ClassWithGenericVariant<byte[]>();
  114. new ClassWithGenericVariant<int[]>();
  115. new ClassWithGenericVariant<long[]>();
  116. new ClassWithGenericVariant<float[]>();
  117. new ClassWithGenericVariant<double[]>();
  118. new ClassWithGenericVariant<string[]>();
  119. new ClassWithGenericVariant<Vector2[]>();
  120. new ClassWithGenericVariant<Vector3[]>();
  121. new ClassWithGenericVariant<Color[]>();
  122. new ClassWithGenericVariant<GodotObject[]>();
  123. new ClassWithGenericVariant<StringName[]>();
  124. new ClassWithGenericVariant<NodePath[]>();
  125. new ClassWithGenericVariant<Rid[]>();
  126. // This class fails because generic type is not Variant-compatible.
  127. new ClassWithGenericVariant<{|GD0301:object|}>();
  128. }
  129. }
  130. public class ClassWithGenericVariant<[MustBeVariant] T>
  131. {
  132. }
  133. public class MustBeVariantAnnotatedMethods
  134. {
  135. [GenericTypeAttribute<bool>()]
  136. public void MethodWithAttributeBool()
  137. {
  138. }
  139. [GenericTypeAttribute<char>()]
  140. public void MethodWithAttributeChar()
  141. {
  142. }
  143. [GenericTypeAttribute<sbyte>()]
  144. public void MethodWithAttributeSByte()
  145. {
  146. }
  147. [GenericTypeAttribute<byte>()]
  148. public void MethodWithAttributeByte()
  149. {
  150. }
  151. [GenericTypeAttribute<short>()]
  152. public void MethodWithAttributeInt16()
  153. {
  154. }
  155. [GenericTypeAttribute<ushort>()]
  156. public void MethodWithAttributeUInt16()
  157. {
  158. }
  159. [GenericTypeAttribute<int>()]
  160. public void MethodWithAttributeInt32()
  161. {
  162. }
  163. [GenericTypeAttribute<uint>()]
  164. public void MethodWithAttributeUInt32()
  165. {
  166. }
  167. [GenericTypeAttribute<long>()]
  168. public void MethodWithAttributeInt64()
  169. {
  170. }
  171. [GenericTypeAttribute<ulong>()]
  172. public void MethodWithAttributeUInt64()
  173. {
  174. }
  175. [GenericTypeAttribute<float>()]
  176. public void MethodWithAttributeSingle()
  177. {
  178. }
  179. [GenericTypeAttribute<double>()]
  180. public void MethodWithAttributeDouble()
  181. {
  182. }
  183. [GenericTypeAttribute<string>()]
  184. public void MethodWithAttributeString()
  185. {
  186. }
  187. [GenericTypeAttribute<Vector2>()]
  188. public void MethodWithAttributeVector2()
  189. {
  190. }
  191. [GenericTypeAttribute<Vector2I>()]
  192. public void MethodWithAttributeVector2I()
  193. {
  194. }
  195. [GenericTypeAttribute<Rect2>()]
  196. public void MethodWithAttributeRect2()
  197. {
  198. }
  199. [GenericTypeAttribute<Rect2I>()]
  200. public void MethodWithAttributeRect2I()
  201. {
  202. }
  203. [GenericTypeAttribute<Transform2D>()]
  204. public void MethodWithAttributeTransform2D()
  205. {
  206. }
  207. [GenericTypeAttribute<Vector3>()]
  208. public void MethodWithAttributeVector3()
  209. {
  210. }
  211. [GenericTypeAttribute<Vector3I>()]
  212. public void MethodWithAttributeVector3I()
  213. {
  214. }
  215. [GenericTypeAttribute<Vector4>()]
  216. public void MethodWithAttributeVector4()
  217. {
  218. }
  219. [GenericTypeAttribute<Vector4I>()]
  220. public void MethodWithAttributeVector4I()
  221. {
  222. }
  223. [GenericTypeAttribute<Basis>()]
  224. public void MethodWithAttributeBasis()
  225. {
  226. }
  227. [GenericTypeAttribute<Quaternion>()]
  228. public void MethodWithAttributeQuaternion()
  229. {
  230. }
  231. [GenericTypeAttribute<Transform3D>()]
  232. public void MethodWithAttributeTransform3D()
  233. {
  234. }
  235. [GenericTypeAttribute<Projection>()]
  236. public void MethodWithAttributeProjection()
  237. {
  238. }
  239. [GenericTypeAttribute<Aabb>()]
  240. public void MethodWithAttributeAabb()
  241. {
  242. }
  243. [GenericTypeAttribute<Color>()]
  244. public void MethodWithAttributeColor()
  245. {
  246. }
  247. [GenericTypeAttribute<Plane>()]
  248. public void MethodWithAttributePlane()
  249. {
  250. }
  251. [GenericTypeAttribute<Callable>()]
  252. public void MethodWithAttributeCallable()
  253. {
  254. }
  255. [GenericTypeAttribute<Signal>()]
  256. public void MethodWithAttributeSignal()
  257. {
  258. }
  259. [GenericTypeAttribute<GodotObject>()]
  260. public void MethodWithAttributeGodotObject()
  261. {
  262. }
  263. [GenericTypeAttribute<StringName>()]
  264. public void MethodWithAttributeStringName()
  265. {
  266. }
  267. [GenericTypeAttribute<NodePath>()]
  268. public void MethodWithAttributeNodePath()
  269. {
  270. }
  271. [GenericTypeAttribute<Rid>()]
  272. public void MethodWithAttributeRid()
  273. {
  274. }
  275. [GenericTypeAttribute<Dictionary>()]
  276. public void MethodWithAttributeDictionary()
  277. {
  278. }
  279. [GenericTypeAttribute<Array>()]
  280. public void MethodWithAttributeArray()
  281. {
  282. }
  283. [GenericTypeAttribute<byte[]>()]
  284. public void MethodWithAttributeByteArray()
  285. {
  286. }
  287. [GenericTypeAttribute<int[]>()]
  288. public void MethodWithAttributeInt32Array()
  289. {
  290. }
  291. [GenericTypeAttribute<long[]>()]
  292. public void MethodWithAttributeInt64Array()
  293. {
  294. }
  295. [GenericTypeAttribute<float[]>()]
  296. public void MethodWithAttributeSingleArray()
  297. {
  298. }
  299. [GenericTypeAttribute<double[]>()]
  300. public void MethodWithAttributeDoubleArray()
  301. {
  302. }
  303. [GenericTypeAttribute<string[]>()]
  304. public void MethodWithAttributeStringArray()
  305. {
  306. }
  307. [GenericTypeAttribute<Vector2[]>()]
  308. public void MethodWithAttributeVector2Array()
  309. {
  310. }
  311. [GenericTypeAttribute<Vector3[]>()]
  312. public void MethodWithAttributeVector3Array()
  313. {
  314. }
  315. [GenericTypeAttribute<Color[]>()]
  316. public void MethodWithAttributeColorArray()
  317. {
  318. }
  319. [GenericTypeAttribute<GodotObject[]>()]
  320. public void MethodWithAttributeGodotObjectArray()
  321. {
  322. }
  323. [GenericTypeAttribute<StringName[]>()]
  324. public void MethodWithAttributeStringNameArray()
  325. {
  326. }
  327. [GenericTypeAttribute<NodePath[]>()]
  328. public void MethodWithAttributeNodePathArray()
  329. {
  330. }
  331. [GenericTypeAttribute<Rid[]>()]
  332. public void MethodWithAttributeRidArray()
  333. {
  334. }
  335. // This method definition fails because generic type is not Variant-compatible.
  336. [GenericTypeAttribute<{|GD0301:object|}>()]
  337. public void MethodWithWrongAttribute()
  338. {
  339. }
  340. }
  341. [GenericTypeAttribute<bool>()]
  342. public class ClassVariantAnnotatedBool
  343. {
  344. }
  345. [GenericTypeAttribute<char>()]
  346. public class ClassVariantAnnotatedChar
  347. {
  348. }
  349. [GenericTypeAttribute<sbyte>()]
  350. public class ClassVariantAnnotatedSByte
  351. {
  352. }
  353. [GenericTypeAttribute<byte>()]
  354. public class ClassVariantAnnotatedByte
  355. {
  356. }
  357. [GenericTypeAttribute<short>()]
  358. public class ClassVariantAnnotatedInt16
  359. {
  360. }
  361. [GenericTypeAttribute<ushort>()]
  362. public class ClassVariantAnnotatedUInt16
  363. {
  364. }
  365. [GenericTypeAttribute<int>()]
  366. public class ClassVariantAnnotatedInt32
  367. {
  368. }
  369. [GenericTypeAttribute<uint>()]
  370. public class ClassVariantAnnotatedUInt32
  371. {
  372. }
  373. [GenericTypeAttribute<long>()]
  374. public class ClassVariantAnnotatedInt64
  375. {
  376. }
  377. [GenericTypeAttribute<ulong>()]
  378. public class ClassVariantAnnotatedUInt64
  379. {
  380. }
  381. [GenericTypeAttribute<float>()]
  382. public class ClassVariantAnnotatedSingle
  383. {
  384. }
  385. [GenericTypeAttribute<double>()]
  386. public class ClassVariantAnnotatedDouble
  387. {
  388. }
  389. [GenericTypeAttribute<string>()]
  390. public class ClassVariantAnnotatedString
  391. {
  392. }
  393. [GenericTypeAttribute<Vector2>()]
  394. public class ClassVariantAnnotatedVector2
  395. {
  396. }
  397. [GenericTypeAttribute<Vector2I>()]
  398. public class ClassVariantAnnotatedVector2I
  399. {
  400. }
  401. [GenericTypeAttribute<Rect2>()]
  402. public class ClassVariantAnnotatedRect2
  403. {
  404. }
  405. [GenericTypeAttribute<Rect2I>()]
  406. public class ClassVariantAnnotatedRect2I
  407. {
  408. }
  409. [GenericTypeAttribute<Transform2D>()]
  410. public class ClassVariantAnnotatedTransform2D
  411. {
  412. }
  413. [GenericTypeAttribute<Vector3>()]
  414. public class ClassVariantAnnotatedVector3
  415. {
  416. }
  417. [GenericTypeAttribute<Vector3I>()]
  418. public class ClassVariantAnnotatedVector3I
  419. {
  420. }
  421. [GenericTypeAttribute<Vector4>()]
  422. public class ClassVariantAnnotatedVector4
  423. {
  424. }
  425. [GenericTypeAttribute<Vector4I>()]
  426. public class ClassVariantAnnotatedVector4I
  427. {
  428. }
  429. [GenericTypeAttribute<Basis>()]
  430. public class ClassVariantAnnotatedBasis
  431. {
  432. }
  433. [GenericTypeAttribute<Quaternion>()]
  434. public class ClassVariantAnnotatedQuaternion
  435. {
  436. }
  437. [GenericTypeAttribute<Transform3D>()]
  438. public class ClassVariantAnnotatedTransform3D
  439. {
  440. }
  441. [GenericTypeAttribute<Projection>()]
  442. public class ClassVariantAnnotatedProjection
  443. {
  444. }
  445. [GenericTypeAttribute<Aabb>()]
  446. public class ClassVariantAnnotatedAabb
  447. {
  448. }
  449. [GenericTypeAttribute<Color>()]
  450. public class ClassVariantAnnotatedColor
  451. {
  452. }
  453. [GenericTypeAttribute<Plane>()]
  454. public class ClassVariantAnnotatedPlane
  455. {
  456. }
  457. [GenericTypeAttribute<Callable>()]
  458. public class ClassVariantAnnotatedCallable
  459. {
  460. }
  461. [GenericTypeAttribute<Signal>()]
  462. public class ClassVariantAnnotatedSignal
  463. {
  464. }
  465. [GenericTypeAttribute<GodotObject>()]
  466. public class ClassVariantAnnotatedGodotObject
  467. {
  468. }
  469. [GenericTypeAttribute<StringName>()]
  470. public class ClassVariantAnnotatedStringName
  471. {
  472. }
  473. [GenericTypeAttribute<NodePath>()]
  474. public class ClassVariantAnnotatedNodePath
  475. {
  476. }
  477. [GenericTypeAttribute<Rid>()]
  478. public class ClassVariantAnnotatedRid
  479. {
  480. }
  481. [GenericTypeAttribute<Dictionary>()]
  482. public class ClassVariantAnnotatedDictionary
  483. {
  484. }
  485. [GenericTypeAttribute<Array>()]
  486. public class ClassVariantAnnotatedArray
  487. {
  488. }
  489. [GenericTypeAttribute<byte[]>()]
  490. public class ClassVariantAnnotatedByteArray
  491. {
  492. }
  493. [GenericTypeAttribute<int[]>()]
  494. public class ClassVariantAnnotatedInt32Array
  495. {
  496. }
  497. [GenericTypeAttribute<long[]>()]
  498. public class ClassVariantAnnotatedInt64Array
  499. {
  500. }
  501. [GenericTypeAttribute<float[]>()]
  502. public class ClassVariantAnnotatedSingleArray
  503. {
  504. }
  505. [GenericTypeAttribute<double[]>()]
  506. public class ClassVariantAnnotatedDoubleArray
  507. {
  508. }
  509. [GenericTypeAttribute<string[]>()]
  510. public class ClassVariantAnnotatedStringArray
  511. {
  512. }
  513. [GenericTypeAttribute<Vector2[]>()]
  514. public class ClassVariantAnnotatedVector2Array
  515. {
  516. }
  517. [GenericTypeAttribute<Vector3[]>()]
  518. public class ClassVariantAnnotatedVector3Array
  519. {
  520. }
  521. [GenericTypeAttribute<Color[]>()]
  522. public class ClassVariantAnnotatedColorArray
  523. {
  524. }
  525. [GenericTypeAttribute<GodotObject[]>()]
  526. public class ClassVariantAnnotatedGodotObjectArray
  527. {
  528. }
  529. [GenericTypeAttribute<StringName[]>()]
  530. public class ClassVariantAnnotatedStringNameArray
  531. {
  532. }
  533. [GenericTypeAttribute<NodePath[]>()]
  534. public class ClassVariantAnnotatedNodePathArray
  535. {
  536. }
  537. [GenericTypeAttribute<Rid[]>()]
  538. public class ClassVariantAnnotatedRidArray
  539. {
  540. }
  541. // This class definition fails because generic type is not Variant-compatible.
  542. [GenericTypeAttribute<{|GD0301:object|}>()]
  543. public class ClassNonVariantAnnotated
  544. {
  545. }
  546. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
  547. public class GenericTypeAttribute<[MustBeVariant] T> : Attribute
  548. {
  549. }