2009-05-15 Jb Evain <jbevain@novell.com>
authorJb Evain <jbevain@gmail.com>
Fri, 15 May 2009 13:32:27 +0000 (13:32 -0000)
committerJb Evain <jbevain@gmail.com>
Fri, 15 May 2009 13:32:27 +0000 (13:32 -0000)
* Mono.Tuner/InjectSecurityAttributes.cs: fix issues
with non unique MethodReference.ToString for generic method defs.

svn path=/trunk/mcs/; revision=134200

mcs/tools/tuner/ChangeLog
mcs/tools/tuner/Mono.Tuner/InjectSecurityAttributes.cs

index 9a9688205718f91b3709713a8ac10df67dbcb9f6..4fa65fb81b365d2dc3bf516b4fd9b5a90414809b 100644 (file)
@@ -1,3 +1,8 @@
+2009-05-15  Jb Evain  <jbevain@novell.com>
+
+       * Mono.Tuner/InjectSecurityAttributes.cs: fix issues
+       with non unique MethodReference.ToString for generic method defs.
+
 2009-04-24  Jb Evain  <jbevain@novell.com>
 
        * Mono.Tuner.dll.sources: adjusted
index ed60b609d3a61955d121e68e18d5512eb43b5211..14d56c84c6751f9831e4be4cdf30593329e15dc1 100644 (file)
@@ -29,6 +29,7 @@
 using System;
 using System.Collections;
 using System.IO;
+using System.Text;
 
 using Mono.Linker;
 using Mono.Linker.Steps;
@@ -311,12 +312,47 @@ namespace Mono.Tuner {
                static MethodDefinition GetMethod (IEnumerable methods, string signature)
                {
                        foreach (MethodDefinition method in methods)
-                               if (method.ToString () == signature)
+                               if (GetFullName (method) == signature)
                                        return method;
 
                        return null;
                }
 
+               static string GetFullName (MethodReference method)
+               {
+                       int sentinel = method.GetSentinel ();
+
+                       StringBuilder sb = new StringBuilder ();
+                       sb.Append (method.ReturnType.ReturnType.FullName);
+                       sb.Append (" ");
+                       sb.Append (method.DeclaringType.FullName);
+                       sb.Append ("::");
+                       sb.Append (method.Name);
+                       if (method.HasGenericParameters) {
+                               sb.Append ("<");
+                               for (int i = 0; i < method.GenericParameters.Count; i++ ) {
+                                       if (i > 0)
+                                               sb.Append (",");
+                                       sb.Append (method.GenericParameters [i].Name);
+                               }
+                               sb.Append (">");
+                       }
+                       sb.Append ("(");
+                       if (method.HasParameters) {
+                               for (int i = 0; i < method.Parameters.Count; i++) {
+                                       if (i > 0)
+                                               sb.Append (",");
+
+                                       if (i == sentinel)
+                                               sb.Append ("...,");
+
+                                       sb.Append (method.Parameters [i].ParameterType.FullName);
+                               }
+                       }
+                       sb.Append (")");
+                       return sb.ToString ();
+               }
+
                static MethodDefinition GetDefaultConstructor (TypeDefinition type)
                {
                        foreach (MethodDefinition ctor in type.Constructors)