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

Project() public static method

public static Project ( Mono.Cecil.MethodDefinition method ) : void
method Mono.Cecil.MethodDefinition
return void
        public static void Project(MethodDefinition method)
        {
            var treatment = MethodDefinitionTreatment.None;
            var other = false;
            var declaring_type = method.DeclaringType;

            if (declaring_type.IsWindowsRuntime)
            {
                if (IsClrImplementationType (declaring_type))
                    treatment = MethodDefinitionTreatment.None;
                else if (declaring_type.IsNested)
                    treatment = MethodDefinitionTreatment.None;
                else if (declaring_type.IsInterface)
                    treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall;
                else if (declaring_type.Module.MetadataKind == MetadataKind.ManagedWindowsMetadata && !method.IsPublic)
                    treatment = MethodDefinitionTreatment.None;
                else
                {
                    other = true;

                    var base_type = declaring_type.BaseType;
                    if (base_type != null && base_type.MetadataToken.TokenType == TokenType.TypeRef)
                    {
                        switch (GetSpecialTypeReferenceTreatment(base_type))
                        {
                            case TypeReferenceTreatment.SystemDelegate:
                                treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.Public;
                                other = false;
                                break;

                            case TypeReferenceTreatment.SystemAttribute:
                                treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall;
                                other = false;
                                break;
                        }
                    }
                }
            }

            if (other)
            {
                var seen_redirected = false;
                var seen_non_redirected = false;

                foreach (var @override in method.Overrides) {
                    if (@override.MetadataToken.TokenType == TokenType.MemberRef && ImplementsRedirectedInterface (@override)) {
                        seen_redirected = true;
                    } else {
                        seen_non_redirected = true;
                    }
                }

                if (seen_redirected && !seen_non_redirected) {
                    treatment = MethodDefinitionTreatment.Runtime | MethodDefinitionTreatment.InternalCall | MethodDefinitionTreatment.Private;
                    other = false;
                }
            }

            if (other)
                treatment |= GetMethodDefinitionTreatmentFromCustomAttributes(method);

            if (treatment != MethodDefinitionTreatment.None)
                ApplyProjection (method, new MethodDefinitionProjection (method, treatment));
        }

Same methods

WindowsRuntimeProjections::Project ( FieldDefinition field ) : void
WindowsRuntimeProjections::Project ( ICustomAttributeProvider owner, CustomAttribute attribute ) : void
WindowsRuntimeProjections::Project ( Mono.Cecil.TypeDefinition type ) : void
WindowsRuntimeProjections::Project ( TypeReference type ) : void