PageRenderTime 51ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/mcs/tools/mdoc/Test/DocTest-v1.cs

https://bitbucket.org/steenlund/mono-2.6.7-for-amiga
C# | 674 lines | 274 code | 108 blank | 292 comment | 8 complexity | 9f086f94f5ebdaac3bacb8fb48e35172 MD5 | raw file
Possible License(s): LGPL-2.0, MPL-2.0-no-copyleft-exception, CC-BY-SA-3.0, GPL-2.0, LGPL-2.1
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. public class NoNamespace {}
  6. namespace System {
  7. /*
  8. * The System namespace gets special treatment, e.g. instead of
  9. * System.Environment C# declarations it's just Environment.
  10. */
  11. /// <remarks><c>T:System.Action`1</c></remarks>
  12. public delegate void Action<T> (T obj);
  13. /// <remarks><c>T:System.Environment</c></remarks>
  14. public static class Environment {
  15. /// <remarks><c>T:System.Environment+SpecialFolder</c></remarks>
  16. public enum SpecialFolder {}
  17. /// <param name="folder">
  18. /// A <see cref="T:System.Environment+SpecialFolder" /> instance.
  19. /// </param>
  20. /// <remarks>
  21. /// <c>M:System.Environment.GetFolderPath(System.Environment+SpecialFolder)</c>
  22. /// </remarks>
  23. public static string GetFolderPath (SpecialFolder folder)
  24. {
  25. throw new NotSupportedException ();
  26. }
  27. }
  28. // to test ECMA doc importing...
  29. public class Array {
  30. // the ECMA docs have a different return type than .NET -- skip.
  31. public static System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly<T> (T[] array)
  32. {
  33. throw new NotImplementedException ();
  34. }
  35. // ECMA docs use <T,U> instead of <TInput,TOutput> --> map them.
  36. public static TOutput[] ConvertAll<TInput, TOutput> (TInput[] array, Converter<TInput, TOutput> converter)
  37. {
  38. throw new InvalidOperationException ();
  39. }
  40. // ECMA docs *incorrectly* document parameter -- skip
  41. public static void Resize<T> (ref T[] array, int newSize)
  42. {
  43. throw new Exception ();
  44. }
  45. }
  46. // to test ECMA doc importing...
  47. public delegate void AsyncCallback (IAsyncResult ar);
  48. }
  49. namespace Mono.DocTest {
  50. internal class Internal {
  51. public class ShouldNotBeDocumented {
  52. }
  53. }
  54. internal class MonoTODOAttribute : Attribute {
  55. }
  56. /// <remarks>
  57. /// <para>
  58. /// cref=<c>T:Mono.DocTest.DocAttribute</c>.
  59. /// </para>
  60. /// <format type="text/html">
  61. /// <table width="100%">
  62. /// <tr>
  63. /// <td style="color:red">red</td>
  64. /// <td style="color:blue">blue</td>
  65. /// <td style="color:green">green</td>
  66. /// </tr>
  67. /// </table>
  68. /// </format>
  69. /// <code lang="C#" src="../DocTest.cs#DocAttribute Example" />
  70. /// </remarks>
  71. [AttributeUsage (AttributeTargets.All)]
  72. public class DocAttribute : Attribute {
  73. #region DocAttribute Example
  74. [Doc ("documented class")]
  75. class Example {
  76. [Doc ("documented field")] public string field;
  77. }
  78. #endregion
  79. /// <remarks><c>C:Mono.DocTest.DocAttribute(System.String)</c></remarks>
  80. public DocAttribute (string docs)
  81. {
  82. if (docs == null)
  83. throw new ArgumentNullException ("docs");
  84. }
  85. /// <remarks><c>P:Mono.DocTest.DocAttribute.Property</c></remarks>
  86. public Type Property { get; set; }
  87. /// <remarks><c>F:Mono.DocTest.DocAttribute.Field</c></remarks>
  88. public bool Field;
  89. /// <remarks><c>F:Mono.DocTest.DocAttribute.FlagsEnum</c></remarks>
  90. public ConsoleModifiers FlagsEnum;
  91. /// <remarks><c>F:Mono.DocTest.DocAttribute.NonFlagsEnum</c></remarks>
  92. public Color NonFlagsEnum;
  93. }
  94. /// <summary>Possible colors</summary>
  95. /// <remarks><see cref="T:Mono.DocTest.Color"/>.</remarks>
  96. [MonoTODO]
  97. public enum Color {
  98. /// <summary>Insert Red summary here</summary>
  99. /// <remarks><c>F:Mono.DocTest.Color.Red</c>.</remarks>
  100. Red,
  101. /// <summary>Insert Blue summary here</summary>
  102. /// <remarks><c>F:Mono.DocTest.Color.Blue</c>.</remarks>
  103. Blue,
  104. /// <summary>Insert Green summary here</summary>
  105. /// <remarks><c>F:Mono.DocTest.Color.Green</c>.</remarks>
  106. Green,
  107. AnotherGreen = Green,
  108. }
  109. /// <summary>Process interface</summary>
  110. /// <remarks><c>T:Mono.DocTest.IProcess</c>.</remarks>
  111. public interface IProcess {}
  112. /// <summary>Process interface</summary>
  113. /// <remarks><c>T:Mono.DocTest.DocValueType</c>.</remarks>
  114. public struct DocValueType : IProcess {
  115. /// <remarks><c>F:Mono.DocTest.DocValueType.total</c>.</remarks>
  116. public int total;
  117. /// <param name="i">A <see cref="T:System.Int32" />.</param>
  118. /// <remarks><see cref="M:Mono.DocTest.DocValueType.M(System.Int32)"/>.</remarks>
  119. public void M (int i)
  120. {
  121. if ((new Random().Next() % 2) == 0)
  122. throw new SystemException ();
  123. throw new ApplicationException ();
  124. }
  125. }
  126. /// <remarks><c>T:Mono.DocTest.Widget</c>.</remarks>
  127. /// <seealso cref="P:Mono.DocTest.Widget.Item(System.Int32)" />
  128. /// <extra>Some extra tag value</extra>
  129. public unsafe class Widget : IProcess {
  130. /// <remarks><c>T:Mono.DocTest.Widget.NestedClass</c>.</remarks>
  131. public class NestedClass {
  132. /// <remarks><c>F:Mono.DocTest.Widget.NestedClass.value</c>.</remarks>
  133. public int value;
  134. /// <param name="i">Some <see cref="T:System.Int32" />.</param>
  135. /// <remarks><c>M:Mono.DocTest.Widget.NestedClass.M(System.Int32)</c>.</remarks>
  136. public void M (int i) {}
  137. /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double</c>.</remarks>
  138. public class Double {
  139. /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple</c>.</remarks>
  140. public class Triple {
  141. /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple</c>.</remarks>
  142. public class Quadruple {} // for good measure
  143. }
  144. }
  145. }
  146. /// <remarks><c>T:Mono.DocTest.Widget.NestedClass`1</c>.</remarks>
  147. public class NestedClass<T> {
  148. /// <remarks><c>F:Mono.DocTest.Widget.NestedClass`1.value</c>.</remarks>
  149. public int value;
  150. /// <param name="i">Another <see cref="T:System.Int32" />.</param>
  151. /// <remarks><c>M:Mono.DocTest.Widget.NestedClass`1.M(System.Int32)</c>.</remarks>
  152. public void M (int i) {}
  153. }
  154. /// <remarks><c>F:Mono.DocTest.Widget.classCtorError</c>.</remarks>
  155. public static readonly string[] classCtorError = CreateArray ();
  156. private static string[] CreateArray ()
  157. {
  158. throw new NotSupportedException ();
  159. }
  160. /// <remarks><c>F:Mono.DocTest.Widget.message</c>.</remarks>
  161. public string message;
  162. /// <remarks><c>F:Mono.DocTest.Widget.defaultColor</c>.</remarks>
  163. protected static Color defaultColor;
  164. /// <remarks><c>F:Mono.DocTest.Widget.PI</c>.</remarks>
  165. protected internal const double PI = 3.14159;
  166. /// <remarks><c>F:Mono.DocTest.Widget.monthlyAverage</c>.</remarks>
  167. internal protected readonly double monthlyAverage;
  168. /// <remarks><c>F:Mono.DocTest.Widget.array1</c>.</remarks>
  169. public long[] array1;
  170. /// <remarks><c>F:Mono.DocTest.Widget.array2</c>.</remarks>
  171. public Widget[,] array2;
  172. /// <remarks><c>F:Mono.DocTest.Widget.pCount</c>.</remarks>
  173. public unsafe int *pCount;
  174. /// <remarks><c>F:Mono.DocTest.Widget.ppValues</c>.</remarks>
  175. public unsafe float **ppValues;
  176. /// <remarks><c>T:Mono.DocTest.Widget.IMenuItem</c>.</remarks>
  177. public interface IMenuItem {
  178. /// <remarks><c>M:Mono.DocTest.Widget.IMenuItem.A</c>.</remarks>
  179. void A ();
  180. /// <remarks><c>P:Mono.DocTest.Widget.IMenuItem.P</c>.</remarks>
  181. int B {get; set;}
  182. }
  183. /// <remarks><c>T:Mono.DocTest.Widget.Del</c>.</remarks>
  184. public delegate void Del (int i);
  185. /// <remarks><c>T:Mono.DocTest.Widget.Direction</c>.</remarks>
  186. [Flags]
  187. public enum Direction {
  188. /// <remarks><c>T:Mono.DocTest.Widget.Direction.North</c>.</remarks>
  189. North,
  190. /// <remarks><c>T:Mono.DocTest.Widget.Direction.South</c>.</remarks>
  191. South,
  192. /// <remarks><c>T:Mono.DocTest.Widget.Direction.East</c>.</remarks>
  193. East,
  194. /// <remarks><c>T:Mono.DocTest.Widget.Direction.West</c>.</remarks>
  195. West,
  196. }
  197. /// <remarks>
  198. /// <para><c>C:Mono.DocTest.Widget</c>.</para>
  199. /// <para><c>M:Mono.DocTest.Widget.#ctor</c>.</para>
  200. /// <para><see cref="C:Mono.DocTest.Widget(System.String)" /></para>
  201. /// <para><see cref="C:Mono.DocTest.Widget(System.Converter{System.String,System.String})" /></para>
  202. /// </remarks>
  203. public Widget () {}
  204. /// <param name="s">A <see cref="T:System.String" />.</param>
  205. /// <remarks>
  206. /// <para><c>C:Mono.DocTest.Widget(System.String)</c>.</para>
  207. /// <para><c>M:Mono.DocTest.Widget.#ctor(System.String)</c>.</para>
  208. /// </remarks>
  209. public Widget (string s) {}
  210. /// <param name="c">A <see cref="T:System.Converter{System.String,System.String}" />.</param>
  211. /// <remarks>
  212. /// <para><c>C:Mono.DocTest.Widget(System.Converter{System.String,System.String})</c>.</para>
  213. /// </remarks>
  214. public Widget (Converter<string,string> c) {}
  215. /// <remarks><c>M:Mono.DocTest.Widget.M0</c>.</remarks>
  216. public static void M0 () {}
  217. /// <param name="c">A <see cref="T:System.Char" />.</param>
  218. /// <param name="f">A <see cref="T:System.Single" />.</param>
  219. /// <param name="v">A <see cref="T:Mono.DocTest.DocValueType" />.</param>
  220. /// <remarks><c>M:Mono.DocTest.Widget.M1(System.Char,System.Signle@,Mono.DocTest.DocValueType@)</c>.</remarks>
  221. [return:Doc ("return:DocAttribute", Property=typeof(Widget))]
  222. [Doc("normal DocAttribute", Field=true)]
  223. public void M1 ([Doc ("c", FlagsEnum=ConsoleModifiers.Alt | ConsoleModifiers.Control)] char c,
  224. [Doc ("f", NonFlagsEnum=Color.Red)] out float f,
  225. [Doc ("v")] ref DocValueType v) {f=0;}
  226. /// <param name="x1">A <see cref="T:System.Int16" /> array.</param>
  227. /// <param name="x2">A <see cref="T:System.Int32" /> array.</param>
  228. /// <param name="x3">A <see cref="T:System.Int64" /> array.</param>
  229. /// <remarks><c>M:Mono.DocTest.Widget.M2(System.Int16[],System.Int32[0:,0:],System.Int64[][])</c>.</remarks>
  230. public void M2 (short[] x1, int[,] x2, long[][] x3) {}
  231. /// <param name="x3">Another <see cref="T:System.Int64" /> array.</param>
  232. /// <param name="x4">A <see cref="T:Mono.DocTest.Widget" /> array.</param>
  233. /// <remarks><c>M:Mono.DocTest.Widget.M3(System.Int64[][],Mono.DocTest.Widget[0:,0:,0:][])</c>.</remarks>
  234. protected void M3 (long[][] x3, Widget[][,,] x4) {}
  235. /// <param name="pc">A <see cref="T:System.Char" /> pointer.</param>
  236. /// <param name="ppf">A <see cref="T:Mono.DocTest.Color" /> pointer.</param>
  237. /// <remarks><c>M:Mono.DocTest.Widget.M4(System.Char*,Mono.DocTest.Color**)</c>.</remarks>
  238. protected unsafe void M4 (char *pc, Color **ppf) {}
  239. /// <param name="pv">A <see cref="T:System.Void" /> pointer.</param>
  240. /// <param name="pd">A <see cref="T:System.Double" /> array.</param>
  241. /// <remarks><c>M:Mono.DocTest.Widget.M5(System.Void*,System.Double*[0:,0:][])</c>.</remarks>
  242. protected unsafe void M5 (void *pv, double *[][,] pd) {}
  243. /// <param name="i">Yet another <see cref="T:System.Int32" />.</param>
  244. /// <param name="args">An <see cref="T:System.Object" /> array.</param>
  245. /// <remarks><c>M:Mono.DocTest.Widget.M6(System.Int32,System.Object[])</c>.</remarks>
  246. protected void M6 (int i, params object[] args) {}
  247. /// <remarks><c>M:Mono.DocTest.Widget.M7(Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple)</c>.</remarks>
  248. public void M7(Widget.NestedClass.Double.Triple.Quadruple a) {}
  249. /// <value>A <see cref="T:System.Int32" /> value...</value>
  250. /// <remarks><c>P:Mono.DocTest.Widget.Width</c>.</remarks>
  251. [Doc ("Width property")]
  252. public int Width {
  253. [Doc ("Width get accessor")]
  254. get {return 0;}
  255. [Doc ("Width set accessor")]
  256. protected set {}
  257. }
  258. /// <value>A <see cref="T:System.Int64" /> value...</value>
  259. /// <remarks><c>P:Mono.DocTest.Widget.Height</c>.</remarks>
  260. [Doc ("Height property")]
  261. protected long Height {get {return 0;}}
  262. /// <value>A <see cref="T:System.Int16" /> value...</value>
  263. /// <remarks><c>P:Mono.DocTest.Widget.X</c>.</remarks>
  264. protected internal short X {set {}}
  265. /// <value>A <see cref="T:System.Double" /> value...</value>
  266. /// <remarks><c>P:Mono.DocTest.Widget.Y</c>.</remarks>
  267. internal protected double Y {get {return 0;} set {}}
  268. /// <param name="i">TODO</param>
  269. /// <remarks><c>P:Mono.DocTest.Widget.Item(System.Int32)</c>.</remarks>
  270. /// <value>A <see cref="T:System.Int32" /> instance.</value>
  271. [Doc ("Item property")]
  272. public int this [int i] {
  273. get {return 0;}
  274. [Doc ("Item property set accessor")]
  275. set {}
  276. }
  277. /// <param name="s">Some <see cref="T:System.String" />.</param>
  278. /// <param name="i">I love <see cref="T:System.Int32" />s.</param>
  279. /// <remarks><c>P:Mono.DocTest.Widget.Item(System.String,System.Int32)</c>.</remarks>
  280. /// <value>A <see cref="T:System.Int32" /> instance.</value>
  281. public int this [string s, int i] {get {return 0;} set {}}
  282. /// <remarks><c>E:Mono.DocTest.Widget.AnEvent</c>.</remarks>
  283. [Doc ("Del event")]
  284. public event Del AnEvent {
  285. [Doc ("Del add accessor")]
  286. add {}
  287. [Doc ("Del remove accessor")]
  288. remove {}
  289. }
  290. /// <remarks><c>E:Mono.DocTest.Widget.AnotherEvent</c>.</remarks>
  291. protected event Del AnotherEvent;
  292. /// <param name="x">Another <see cref="T:Mono.DocTest.Widget" />.</param>
  293. /// <remarks><c>M:Mono.DocTest.Widget.op_UnaryPlus(Mono.DocTest.Widget)</c>.</remarks>
  294. /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance.</returns>
  295. public static Widget operator+ (Widget x) {return null;}
  296. /// <param name="x1">Yet Another <see cref="T:Mono.DocTest.Widget" />.</param>
  297. /// <param name="x2">Yay, <see cref="T:Mono.DocTest.Widget" />s.</param>
  298. /// <remarks><c>M:Mono.DocTest.Widget.op_Addition(Mono.DocTest.Widget,Mono.DocTest.Widget)</c>.</remarks>
  299. /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance (2).</returns>
  300. public static Widget operator+ (Widget x1, Widget x2) {return null;}
  301. /// <param name="x"><see cref="T:Mono.DocTest.Widget" />s are fun!.</param>
  302. /// <remarks><c>M:Mono.DocTest.Widget.op_Explicit(Mono.DocTest.Widget)~System.Int32</c>.</remarks>
  303. /// <returns>A <see cref="T:System.Int32" /> instance.</returns>
  304. public static explicit operator int (Widget x) {return 0;}
  305. /// <param name="x"><c>foo</c>; <see cref="T:Mono.DocTest.Widget" />.</param>
  306. /// <remarks><c>M:Mono.DocTest.Widget.op_Implicit(Mono.DocTest.Widget)~System.Int64</c>.</remarks>
  307. /// <returns>A <see cref="T:System.Int64" /> instance.</returns>
  308. public static implicit operator long (Widget x) {return 0;}
  309. }
  310. /// <remarks><c>T:Mono.DocTest.UseLists</c>.</remarks>
  311. public class UseLists
  312. {
  313. /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param>
  314. /// <remarks><c>M:Mono.DocTest.UseLists.Process(Mono.DocTest.MyList{System.Int32})</c>.</remarks>
  315. public void Process (Generic.MyList<int> list) {}
  316. /// <param name="value">A <c>T</c>.</param>
  317. /// <typeparam name="T">Something</typeparam>
  318. /// <remarks><c>M:Mono.DocTest.UseLists.GetValues``1(``0)</c>.</remarks>
  319. /// <returns>A <see cref="T:Mono.DocTest.Generic.MyList`1" /> instance.</returns>
  320. public Generic.MyList<T> GetValues <T> (T value) where T : struct {return null;}
  321. /// <param name="list">Another <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param>
  322. /// <remarks>
  323. /// <para><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Int32})</c>.</para>
  324. /// <para><see cref="M:System.Collections.Generic.List{System.Int32}.Remove(`0)" /></para>
  325. /// </remarks>
  326. /// <exception invalid="foo">text!</exception>
  327. public void Process (List<int> list)
  328. {
  329. // Bug: only creation is looked for, so this generates an <exception/>
  330. // node:
  331. new Exception ();
  332. // Bug? We only look at "static" types, so we can't follow
  333. // delegates/interface calls:
  334. Func<int, int> a = x => {throw new InvalidOperationException ();};
  335. a (1);
  336. // Multi-dimensional arrays have "phantom" methods that Cecil can't
  337. // resolve, as they're provided by the runtime. These should be
  338. // ignored.
  339. int[,] array = new int[1,1];
  340. array[0,0] = 42;
  341. }
  342. /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{System.Int32}}" />.</param>
  343. /// <remarks><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Predicate{System.Int32}})</c>.</remarks>
  344. public void Process (List<Predicate<int>> list)
  345. {
  346. if (list == null)
  347. throw new ArgumentNullException ("list");
  348. Process<int> (list);
  349. }
  350. /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{``0}}" />.</param>
  351. /// <typeparam name="T">Something Else</typeparam>
  352. /// <remarks><c>M:Mono.DocTest.UseLists.Process``1(System.Collections.Generic.List{System.Predicate{``0}})</c>.</remarks>
  353. public void Process<T> (List<Predicate<T>> list)
  354. {
  355. if (list.Any (p => p == null))
  356. throw new ArgumentException ("predicate null");
  357. }
  358. /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2}" />.</param>
  359. /// <typeparam name="T"><c>T</c></typeparam>
  360. /// <typeparam name="U"><c>U</c></typeparam>
  361. /// <typeparam name="V"><c>V</c></typeparam>
  362. /// <remarks><c>M:Mono.DocTest.UseLists.UseHelper``3(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks>
  363. public void UseHelper<T,U,V> (Generic.MyList<T>.Helper<U,V> helper) {}
  364. }
  365. }
  366. namespace Mono.DocTest.Generic {
  367. // Need to place this into a separate namespace to work around gmcs bug
  368. // where XML docs for type *following* this one aren't extracted.
  369. /// <typeparam name="TArg">argument type, with attributes!</typeparam>
  370. /// <typeparam name="TRet">return type, with attributes!</typeparam>
  371. /// <remarks><c>T:Mono.DocTest.Generic.Func`2</c>.</remarks>
  372. [Doc ("method")]
  373. [return:Doc ("return", Field=false)]
  374. public delegate TRet Func<[Doc ("arg!")] TArg, [Doc ("ret!")] TRet> (
  375. [Doc ("arg-actual")] TArg a
  376. ) where TArg : Exception;
  377. }
  378. namespace Mono.DocTest.Generic {
  379. using Mono.DocTest;
  380. /// <summary>extension methods!</summary>
  381. /// <remarks><c>T:Mono.DocTest.Generic.Extensions</c></remarks>
  382. public static class Extensions {
  383. /// <summary><c>System.Object</c> extension method</summary>
  384. /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToEnumerable``1</c></remarks>
  385. public static IEnumerable<T> ToEnumerable<T> (this T self)
  386. {
  387. yield return self;
  388. }
  389. /// <summary><see cref="T:System.Collections.Generic.IEnumerable`1" /> extension method</summary>
  390. /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ForEach``1</c></remarks>
  391. public static void ForEach<T> (this IEnumerable<T> self, Action<T> a)
  392. {
  393. }
  394. /// <summary><see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method</summary>
  395. /// <remarks><c>M:Mono.DocTest.Generic.Extensions.Bar``1</c></remarks>
  396. public static void Bar <T> (this IFoo<T> self, string s)
  397. {
  398. }
  399. /// <summary>
  400. /// <see cref="T:System.Collections.Generic.IEnumerable{System.Int32}" />
  401. /// extension method.
  402. /// </summary>
  403. /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks>
  404. public static IEnumerable<double> ToDouble (this IEnumerable<int> list)
  405. {
  406. return null;
  407. }
  408. /// <summary>
  409. /// <see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method.
  410. /// </summary>
  411. /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks>
  412. public static double ToDouble<T> (this T val) where T : IFoo<T>
  413. {
  414. // the target type is T:...IFoo<T>, NOT T:System.Object.
  415. return 0.0;
  416. }
  417. }
  418. /// <typeparam name="U">Insert <c>text</c> here.</typeparam>
  419. /// <remarks><c>T:Mono.DocTest.Generic.GenericBase`1</c>.</remarks>
  420. public class GenericBase<U> {
  421. /// <param name="genericParameter">Something</param>
  422. /// <typeparam name="S">Insert more <c>text</c> here.</typeparam>
  423. /// <remarks><c>M:Mono.DocTest.GenericBase`1.BaseMethod``1(``0)</c>.</remarks>
  424. /// <returns>The default value.</returns>
  425. public U BaseMethod<[Doc ("S")] S> (S genericParameter) {
  426. return default(U);
  427. }
  428. /// <remarks><c>F:Mono.DocTest.GenericBase`1.StaticField1</c></remarks>
  429. public static readonly GenericBase<U> StaticField1 = new GenericBase<U> ();
  430. /// <remarks><c>F:Mono.DocTest.GenericBase`1.ConstField1</c></remarks>
  431. public const int ConstField1 = 1;
  432. /// <param name="list">Insert description here</param>
  433. /// <remarks><c>M:Mono.DocTest.GenericBase`1.op_Explicit(Mono.DocTest.GenericBase{`0})~`0</c></remarks>
  434. /// <returns>The default value for <typeparamref name="U"/>.</returns>
  435. public static explicit operator U (GenericBase<U> list) {return default(U);}
  436. /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.FooEventArgs</remarks>
  437. public class FooEventArgs : EventArgs {
  438. }
  439. /// <remarks>E:Mono.DocTest.Generic.GenericBase`1.MyEvent</remarks>
  440. public event EventHandler<FooEventArgs> MyEvent;
  441. /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection</remarks>
  442. public class NestedCollection {
  443. /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection.Enumerator</remarks>
  444. public struct Enumerator {
  445. }
  446. }
  447. }
  448. /// <typeparam name="T">I'm Dying Here!</typeparam>
  449. /// <remarks><c>T:Mono.DocTest.Generic.MyList`1</c>.</remarks>
  450. public class MyList<[Mono.DocTest.Doc("Type Parameter!")] T> : GenericBase <T>, IEnumerable<int[]>
  451. {
  452. /// <typeparam name="U">Seriously!</typeparam>
  453. /// <typeparam name="V">Too <c>many</c> docs!</typeparam>
  454. /// <remarks><c>T:Mono.DocTest.MyList`1.Helper`2</c>.</remarks>
  455. public class Helper <U, V> {
  456. /// <param name="a">Ako</param>
  457. /// <param name="b">bko</param>
  458. /// <param name="c">cko</param>
  459. /// <remarks><c>M:Mono.DocTest.MyList`1.Helper`2.UseT(`0,`1,`2)</c>.</remarks>
  460. public void UseT(T a, U b, V c) { }
  461. }
  462. /// <param name="t">tko</param>
  463. /// <remarks><c>M:Mono.DocTest.MyList`1.Test(`0)</c>.</remarks>
  464. public void Test (T t) {}
  465. /// <param name="t">Class generic type</param>
  466. /// <param name="u">Method generic type</param>
  467. /// <typeparam name="U">Method generic parameter</typeparam>
  468. /// <remarks><c>M:Mono.DocTest.MyList`1.Method``1(`0,``0)</c>.</remarks>
  469. public void Method <U> (T t, U u) {}
  470. // mcs "crashes" (CS1569) on this method; exclude it for now.
  471. // <remarks><c>M:Mono.DocTest.MyList`1.RefMethod``1(`0@,``0@)</c>.</remarks>
  472. public void RefMethod<U> (ref T t, ref U u) {}
  473. /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList`1.Helper`2" />.</param>
  474. /// <typeparam name="U">Argh!</typeparam>
  475. /// <typeparam name="V">Foo Argh!</typeparam>
  476. /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.UseHelper``2(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks>
  477. public void UseHelper<U,V> (Helper<U,V> helper) {}
  478. /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.GetHelper``2</c>.</remarks>
  479. /// <returns><see langword="null" />.</returns>
  480. public Helper<U,V> GetHelper<U,V> () {return null;}
  481. /// <remarks><c>M:Mono.DocTest.MyList`1.System#Collections#GetEnumerator</c>.</remarks>
  482. IEnumerator IEnumerable.GetEnumerator () {return null;}
  483. /// <remarks><c>M:Mono.DocTest.MyList`1.GetEnumerator</c>.</remarks>
  484. public IEnumerator<int[]> GetEnumerator () {return null;}
  485. }
  486. /// <typeparam name="T">T generic param</typeparam>
  487. /// <remarks><c>T:Mono.DocTest.IFoo`1</c>.</remarks>
  488. public interface IFoo<T> {
  489. /// <typeparam name="U">U generic param</typeparam>
  490. /// <remarks><c>T:Mono.DocTest.IFoo`1.Method``1(`0,``0)</c>.</remarks>
  491. T Method <U> (T t, U u);
  492. }
  493. /// <typeparam name="A">Ako generic param</typeparam>
  494. /// <typeparam name="B">Bko generic param</typeparam>
  495. /// <remarks><c>T:Mono.DocTest.MyList`2</c>.</remarks>
  496. public class MyList<A,B> : GenericBase<Dictionary<A,B>>, IEnumerable<A>,
  497. IEnumerator<A>, ICollection<A>, IFoo<A>
  498. where A : class, IList<B>, new()
  499. where B : class, A
  500. {
  501. // IEnumerator
  502. // shown?
  503. object IEnumerator.Current {get {return null;}}
  504. /// <remarks><c>M:Mono.DocTest.MyList`2.MoveNext</c>.</remarks>
  505. /// <returns><see cref="T:System.Boolean" /></returns>
  506. public bool MoveNext () {return false;}
  507. /// <remarks><c>M:Mono.DocTest.MyList`2.Reset</c>.</remarks>
  508. public void Reset () {}
  509. // IDisposable
  510. /// <remarks><c>M:Mono.DocTest.MyList`2.Dispose</c>.</remarks>
  511. public void Dispose () {}
  512. // IEnumerator<T>
  513. /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks>
  514. /// <value>The current value.</value>
  515. public A Current {get {return default(A);}}
  516. /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks>
  517. /// <value>The current value.</value>
  518. A IEnumerator<A>.Current {get {return default(A);}}
  519. // IEnumerable
  520. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#GetEnumerator</c>.</remarks>
  521. IEnumerator IEnumerable.GetEnumerator () {return this;}
  522. // IEnumerable<T>
  523. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#IEnumerable{A}#GetEnumerator</c>.</remarks>
  524. /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator{`0}" />.</returns>
  525. IEnumerator<A> IEnumerable<A>.GetEnumerator () {return this;}
  526. /// <remarks><c>M:Mono.DocTest.MyList`2.GetEnumerator</c>.</remarks>
  527. /// <returns>A <see cref="T:System.Collections.Generic.List{`0}.Enumerator" />.</returns>
  528. public List<A>.Enumerator GetEnumerator () {return new List<A>.Enumerator ();}
  529. // ICollection<T>
  530. /// <remarks><c>P:Mono.DocTest.MyList`2.Count</c>.</remarks>
  531. /// <value>A <see cref="T:System.Int32" />.</value>
  532. public int Count {get {return 0;}}
  533. /// <remarks><c>P:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#IsReadOnly</c>.</remarks>
  534. /// <value>A <see cref="T:System.Boolean" />.</value>
  535. bool ICollection<A>.IsReadOnly {get {return false;}}
  536. /// <param name="item">The item to add.</param>
  537. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Add(`0)</c>.</remarks>
  538. void ICollection<A>.Add (A item) {}
  539. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Clear</c>.</remarks>
  540. void ICollection<A>.Clear () {}
  541. /// <param name="item">The item to check for</param>
  542. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}.Contains(`0)</c>.</remarks>
  543. /// <returns>A <see cref="T:System.Boolean" /> instance (<see langword="false" />).</returns>
  544. bool ICollection<A>.Contains (A item) {return false;}
  545. /// <param name="array">Where to copy elements to</param>
  546. /// <param name="arrayIndex">Where to start copyingto</param>
  547. /// <remarks><c>M:Mono.DocTest.MyList`2.CopyTo(`0[],System.Int32)</c>.</remarks>
  548. public void CopyTo (A[] array, int arrayIndex) {}
  549. /// <param name="item">the item to remove</param>
  550. /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Remove(`0)</c>.</remarks>
  551. /// <returns>Whether the item was removed.</returns>
  552. bool ICollection<A>.Remove (A item) {return false;}
  553. /// <remarks>M:Mono.DocTest.Generic.MyList`2.Foo</remarks>
  554. public KeyValuePair<IEnumerable<A>, IEnumerable<B>> Foo ()
  555. {
  556. return new KeyValuePair<IEnumerable<A>, IEnumerable<B>> ();
  557. }
  558. // IFoo members
  559. /// <typeparam name="U">U generic param on MyList`2</typeparam>
  560. /// <remarks><c>M:Mono.DocTest.Generic.MyList`2.Mono#DocTest#Generic#IFoo{A}#Method``1(`0,``0)</c>.</remarks>
  561. A IFoo<A>.Method <U> (A a, U u)
  562. {
  563. return default (A);
  564. }
  565. }
  566. }