Merge branch 'cecil-light'
[mono.git] / mcs / tools / cil-strip / Mono.Cecil / GenericInstanceMethod.cs
1 //
2 // IGenericInstanceMethod.cs
3 //
4 // Author:
5 //   Jb Evain (jbevain@gmail.com)
6 //
7 // (C) 2005 Jb Evain
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 namespace Mono.Cecil {
30
31         using System.Text;
32
33         internal sealed class GenericInstanceMethod : MethodSpecification, IGenericInstance {
34
35                 private GenericArgumentCollection m_genArgs;
36
37                 public GenericArgumentCollection GenericArguments {
38                         get {
39                                 if (m_genArgs == null)
40                                         m_genArgs = new GenericArgumentCollection (this);
41                                 return m_genArgs;
42                         }
43                 }
44
45                 public bool HasGenericArguments {
46                         get { return m_genArgs == null ? false : m_genArgs.Count > 0; }
47                 }
48
49                 public GenericInstanceMethod (MethodReference elemMethod) : base (elemMethod)
50                 {
51                 }
52
53                 public override string ToString ()
54                 {
55                         StringBuilder sb = new StringBuilder ();
56                         MethodReference meth = this.ElementMethod;
57                         sb.Append (meth.ReturnType.ReturnType.FullName);
58                         sb.Append (" ");
59                         sb.Append (meth.DeclaringType.FullName);
60                         sb.Append ("::");
61                         sb.Append (meth.Name);
62                         sb.Append ("<");
63                         for (int i = 0; i < this.GenericArguments.Count; i++) {
64                                 if (i > 0)
65                                         sb.Append (",");
66                                 sb.Append (this.GenericArguments [i].FullName);
67                         }
68                         sb.Append (">");
69                         sb.Append ("(");
70                         if (meth.HasParameters) {
71                                 for (int i = 0; i < meth.Parameters.Count; i++) {
72                                         sb.Append (meth.Parameters [i].ParameterType.FullName);
73                                         if (i < meth.Parameters.Count - 1)
74                                                 sb.Append (",");
75                                 }
76                         }
77                         sb.Append (")");
78                         return sb.ToString ();
79                 }
80         }
81 }