[linker] Preserve types given to custom attributes - even if they are inside an array...
authorSebastien Pouliot <sebastien@xamarin.com>
Thu, 5 Feb 2015 20:19:46 +0000 (15:19 -0500)
committerSebastien Pouliot <sebastien@xamarin.com>
Thu, 5 Feb 2015 20:19:46 +0000 (15:19 -0500)
mcs/tools/linker/Mono.Linker.Steps/MarkStep.cs

index 430f2c2c8851e6cc7a0d08e6c6ea532e8bc87ae1..18f34bdc9c8f7e623425f33fdb470023479aa0a0 100644 (file)
@@ -269,11 +269,19 @@ namespace Mono.Linker.Steps {
 
                void MarkIfType (CustomAttributeArgument argument)
                {
-                       if (argument.Type.FullName != "System.Type")
-                               return;
-
-                       MarkType (argument.Type);
-                       MarkType ((TypeReference) argument.Value);
+                       var at = argument.Type;
+                       if (at.IsArray) {
+                               var et = at.GetElementType ();
+                               if (et.Namespace != "System" || et.Name != "Type")
+                                       return;
+
+                               MarkType (et);
+                               foreach (var cac in (CustomAttributeArgument[]) argument.Value)
+                                       MarkType ((TypeReference) cac.Value);
+                       } else if (at.Namespace == "System" && at.Name == "Type") {
+                               MarkType (argument.Type);
+                               MarkType ((TypeReference) argument.Value);
+                       }
                }
 
                protected bool CheckProcessed (IMetadataTokenProvider provider)