Mono.CSharp.MetadataImporter.ReadMethodModifiers C# (CSharp) Method

ReadMethodModifiers() static private method

static private ReadMethodModifiers ( MethodBase mb, System.TypeSpec declaringType ) : Mono.CSharp.Modifiers
mb MethodBase
declaringType System.TypeSpec
return Mono.CSharp.Modifiers
        static Modifiers ReadMethodModifiers(MethodBase mb, TypeSpec declaringType)
        {
            Modifiers mod;
            var ma = mb.Attributes;
            switch (ma & MethodAttributes.MemberAccessMask) {
            case MethodAttributes.Public:
                mod = Modifiers.PUBLIC;
                break;
            case MethodAttributes.Assembly:
                mod = Modifiers.INTERNAL;
                break;
            case MethodAttributes.Family:
                mod = Modifiers.PROTECTED;
                break;
            case MethodAttributes.FamORAssem:
                mod = Modifiers.PROTECTED | Modifiers.INTERNAL;
                break;
            default:
                mod = Modifiers.PRIVATE;
                break;
            }

            if ((ma & MethodAttributes.Static) != 0) {
                mod |= Modifiers.STATIC;
                return mod;
            }
            if ((ma & MethodAttributes.Abstract) != 0 && declaringType.IsClass) {
                mod |= Modifiers.ABSTRACT;
                return mod;
            }

            if ((ma & MethodAttributes.Final) != 0)
                mod |= Modifiers.SEALED;

            // It can be sealed and override
            if ((ma & MethodAttributes.Virtual) != 0) {
                if ((ma & MethodAttributes.NewSlot) != 0 || !declaringType.IsClass) {
                    // No private virtual or sealed virtual
                    if ((mod & (Modifiers.PRIVATE | Modifiers.SEALED)) == 0)
                        mod |= Modifiers.VIRTUAL;
                } else {
                    mod |= Modifiers.OVERRIDE;
                }
            }

            return mod;
        }