7edc44f031646933f34e3e538f942bb05fc92e23
[mono.git] / mcs / tools / tuner / Mono.Tuner / RemoveResources.cs
1 using System;
2
3 using Mono.Linker;
4 using Mono.Linker.Steps;
5
6 using Mono.Cecil;
7
8 namespace Mono.Tuner {
9
10         public class RemoveResources : IStep {
11
12                 readonly I18nAssemblies assemblies;
13
14                 public RemoveResources (I18nAssemblies assemblies)
15                 {
16                         this.assemblies = assemblies;
17                 }
18
19                 public virtual void Process (LinkContext context)
20                 {
21                         AssemblyDefinition assembly;
22                         if (!context.TryGetLinkedAssembly ("mscorlib", out assembly))
23                                 return;
24
25                         // skip this if we're not linking mscorlib, e.g. --linkskip=mscorlib
26                         if (context.Annotations.GetAction (assembly) != AssemblyAction.Link)
27                                 return;
28
29                         var resources = assembly.MainModule.Resources;
30
31                         for (int i = 0; i < resources.Count; i++) {
32                                 var resource = resources [i] as EmbeddedResource;
33                                 if (resource == null)
34                                         continue;
35
36                                 switch (resource.Name) {
37                                 case "collation.core.bin":
38                                 case "collation.tailoring.bin":
39                                         continue;
40                                 default:
41                                         if (!resource.Name.Contains ("cjk"))
42                                                 continue;
43                                         if (IncludeCJK ())
44                                                 continue;
45
46                                         resources.RemoveAt (i--);
47                                         break;
48                                 }
49                         }
50                 }
51
52                 bool IncludeCJK ()
53                 {
54                         return (assemblies & I18nAssemblies.CJK) != 0;
55                 }
56         }
57 }