1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 
5 using Mono.Linker;
6 using Mono.Linker.Steps;
7 
8 using Mono.Cecil;
9 
10 namespace Mono.Tuner {
11 
12 	public class RemoveSecurity : BaseSubStep {
13 
14 		public override SubStepTargets Targets {
15 			get {
16 				return SubStepTargets.Assembly
17 					| SubStepTargets.Type
18 					| SubStepTargets.Method;
19 			}
20 		}
21 
IsActiveFor(AssemblyDefinition assembly)22 		public override bool IsActiveFor (AssemblyDefinition assembly)
23 		{
24 			return Annotations.GetAction (assembly) == AssemblyAction.Link;
25 		}
26 
ProcessAssembly(AssemblyDefinition assembly)27 		public override void ProcessAssembly (AssemblyDefinition assembly)
28 		{
29 			ProcessSecurityProvider (assembly);
30 		}
31 
ProcessType(TypeDefinition type)32 		public override void ProcessType (TypeDefinition type)
33 		{
34 			ProcessSecurityProvider (type);
35 		}
36 
ProcessMethod(MethodDefinition method)37 		public override void ProcessMethod (MethodDefinition method)
38 		{
39 			ProcessSecurityProvider (method);
40 		}
41 
ProcessSecurityProvider(ISecurityDeclarationProvider provider)42 		static void ProcessSecurityProvider (ISecurityDeclarationProvider provider)
43 		{
44 			if (!provider.HasSecurityDeclarations)
45 				return;
46 
47 			provider.SecurityDeclarations.Clear ();
48 		}
49 	}
50 }
51