Exemplo n.º 1
0
        private MemberActionAttribute GetMemberActionAttribute(IMemberDefinition provider,
                                                               TypeActionAttribute typeAttr)
        {
            var attr = provider.GetCustomAttribute <MemberActionAttribute>();

            if (attr != null)
            {
                if (attr is ModifiesMemberAttribute && !(typeAttr is ModifiesTypeAttribute))
                {
                    throw Errors.Invalid_decleration("ModifiesMember is only legal inside ModifiesType.");
                }
                return(attr);
            }
            if (typeAttr is NewTypeAttribute || typeAttr is ReplaceTypeAttribute)
            {
                return(new NewMemberAttribute());
            }
            switch (ImplicitImports)
            {
            case ImplicitImportSetting.OnlyCompilerGenerated:
                if (provider.IsCompilerGenerated())
                {
                    goto case ImplicitImportSetting.ImplicitByDefault;
                }
                goto case ImplicitImportSetting.NoImplicit;

            case ImplicitImportSetting.ImplicitByDefault:
                return(new NewMemberAttribute(true));

            default:
            case ImplicitImportSetting.NoImplicit:
                return(null);
            }
        }
Exemplo n.º 2
0
        private MemberActionAttribute GetMemberActionAttribute(IMemberDefinition provider,
                                                               TypeActionAttribute typeAttr)
        {
            var attrs = provider.GetCustomAttributes <MemberActionAttribute>().ToList();

            if (attrs.Count > 1)
            {
                throw Errors.Multiple_action_attributes((MemberReference)provider, attrs.ToArray <object>());
            }
            var attr = attrs.FirstOrDefault();

            if (attr != null)
            {
                if (attr is ModifiesMemberAttribute && !(typeAttr is ModifiesTypeAttribute))
                {
                    throw Errors.Invalid_decleration("ModifiesMember is only legal inside ModifiesType.");
                }
                return(attr);
            }
            if (typeAttr is NewTypeAttribute || typeAttr is ReplaceTypeAttribute)
            {
                return(new NewMemberAttribute());
            }
            switch (ImplicitImports)
            {
            case ImplicitImportSetting.OnlyCompilerGenerated:
                if (provider.IsCompilerGenerated())
                {
                    goto case ImplicitImportSetting.ImplicitByDefault;
                }
                goto case ImplicitImportSetting.NoImplicit;

            case ImplicitImportSetting.ImplicitByDefault:
                return(new NewMemberAttribute(true));

            default:
            case ImplicitImportSetting.NoImplicit:
                return(null);
            }
        }
Exemplo n.º 3
0
        private MemberActionAttribute GetMemberActionAttribute(IMemberDefinition provider,
			TypeActionAttribute typeAttr)
        {
            var attr = provider.GetCustomAttribute<MemberActionAttribute>();
            if (attr != null) {
                if (attr is ModifiesMemberAttribute && !(typeAttr is ModifiesTypeAttribute)) {
                    throw Errors.Invalid_decleration("ModifiesMember is only legal inside ModifiesType.");
                }
                return attr;
            }
            if (typeAttr is NewTypeAttribute || typeAttr is ReplaceTypeAttribute) {
                return new NewMemberAttribute();
            }
            switch (ImplicitImports) {
                case ImplicitImportSetting.OnlyCompilerGenerated:
                    if (provider.IsCompilerGenerated()) {
                        goto case ImplicitImportSetting.ImplicitByDefault;
                    }
                    goto case ImplicitImportSetting.NoImplicit;
                case ImplicitImportSetting.ImplicitByDefault:
                    return new NewMemberAttribute(true);
                default:
                case ImplicitImportSetting.NoImplicit:
                    return null;
            }
        }