Mono.Cecil.WindowsRuntimeProjections.ApplyProjection C# (CSharp) Method

ApplyProjection() public static method

public static ApplyProjection ( Mono.Cecil.TypeDefinition type, TypeDefinitionProjection projection ) : void
type Mono.Cecil.TypeDefinition
projection TypeDefinitionProjection
return void
        public static void ApplyProjection(TypeDefinition type, TypeDefinitionProjection projection)
        {
            if (projection == null)
                return;

            var treatment = projection.Treatment;

            switch (treatment & TypeDefinitionTreatment.KindMask) {
            case TypeDefinitionTreatment.NormalType:
                type.Attributes |= TypeAttributes.WindowsRuntime | TypeAttributes.Import;
                break;

            case TypeDefinitionTreatment.NormalAttribute:
                type.Attributes |= TypeAttributes.WindowsRuntime | TypeAttributes.Sealed;
                break;

            case TypeDefinitionTreatment.UnmangleWindowsRuntimeName:
                type.Attributes = type.Attributes & ~TypeAttributes.SpecialName | TypeAttributes.Public;
                type.Name = type.Name.Substring ("<CLR>".Length);
                break;

            case TypeDefinitionTreatment.PrefixWindowsRuntimeName:
                type.Attributes = type.Attributes & ~TypeAttributes.Public | TypeAttributes.Import;
                type.Name = "<WinRT>" + type.Name;
                break;

            case TypeDefinitionTreatment.RedirectToClrType:
                type.Attributes = type.Attributes & ~TypeAttributes.Public | TypeAttributes.Import;
                break;

            case TypeDefinitionTreatment.RedirectToClrAttribute:
                type.Attributes = type.Attributes & ~TypeAttributes.Public;
                break;

            case TypeDefinitionTreatment.RedirectImplementedMethods: {
                    type.Attributes |= TypeAttributes.WindowsRuntime | TypeAttributes.Import;

                    foreach (var redirectedInterfacePair in projection.RedirectedInterfaces) {
                        type.Interfaces.Add (redirectedInterfacePair.Value);

                        foreach (var customAttribute in redirectedInterfacePair.Key.CustomAttributes)
                            redirectedInterfacePair.Value.CustomAttributes.Add (customAttribute);

                        redirectedInterfacePair.Key.CustomAttributes.Clear ();

                        foreach (var method in type.Methods) {
                            foreach (var @override in method.Overrides) {
                                if (TypeReferenceEqualityComparer.AreEqual (@override.DeclaringType, redirectedInterfacePair.Key.InterfaceType)) {
                                    @override.DeclaringType = redirectedInterfacePair.Value.InterfaceType;
                                }
                            }
                        }
                    }

                    foreach (var method in projection.RedirectedMethods) {
                        type.Methods.Add (method);
                    }
                }
                break;
            }

            if ((treatment & TypeDefinitionTreatment.Abstract) != 0)
                type.Attributes |= TypeAttributes.Abstract;

            if ((treatment & TypeDefinitionTreatment.Internal) != 0)
                type.Attributes &= ~TypeAttributes.Public;

            type.WindowsRuntimeProjection = projection;
        }

Same methods

WindowsRuntimeProjections::ApplyProjection ( CustomAttribute attribute, CustomAttributeValueProjection projection ) : void
WindowsRuntimeProjections::ApplyProjection ( FieldDefinition field, FieldDefinitionProjection projection ) : void
WindowsRuntimeProjections::ApplyProjection ( Mono.Cecil.MethodDefinition method, MethodDefinitionProjection projection ) : void
WindowsRuntimeProjections::ApplyProjection ( TypeReference type, TypeReferenceProjection projection ) : void