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