Exemplo n.º 1
0
        public static T CreateCustomAttribute <T>(this CustomAttributeData attr)
        {
            var attrType = attr.GetAttributeType();
            var obj      = attr.GetConstructor().Invoke(attr.ConstructorArguments.Select(it => it.Value).ToArray());

            if (attr.NamedArguments == null)
            {
                return((T)obj);
            }

            foreach (var arg in attr.NamedArguments)
            {
                if (arg.IsField())
                {
                    var fieldInfo = attrType.GetField(arg.GetMemberName());
                    fieldInfo?.SetValue(obj, GetValue(arg.TypedValue));
                }
                else
                {
                    var propInfo = attrType.GetProperty(arg.GetMemberName());
                    propInfo?.SetValue(obj, GetValue(arg.TypedValue), null);
                }
            }

            return((T)obj);
        }
Exemplo n.º 2
0
 private static bool IsInheritable(this CustomAttributeData attr)
 {
     return(attr.GetAttributeType().GetCustomAttributesData(true)
            .Where(it => it.GetAttributeType() == typeof(AttributeUsageAttribute))
            .SelectMany(it => it.NamedArguments)
            .Any(it => it.GetMemberName() == nameof(AttributeUsageAttribute.Inherited) &&
                 true.Equals(it.TypedValue.Value)));
 }
Exemplo n.º 3
0
        private static bool IsNullable(CustomAttributeData attr)
        {
            if (attr.GetAttributeType().Name != "NullableAttribute")
            {
                return(true);
            }

            return(IsNullable(attr.ConstructorArguments));
        }
Exemplo n.º 4
0
    static IEnumerable <System.Attribute> ConvertOldAttributes(CustomAttributeData attribute)
    {
        switch (attribute.GetAttributeType().Namespace)
        {
        case null:         // Root namespace such as PlatformAvailabilityShadow.cs
        case "MonoTouch.ObjCRuntime":
        case "ObjCRuntime":
#if NET
        case "System.Runtime.Versioning":
#endif
            break;

        default:
            return(Enumerable.Empty <System.Attribute> ());
        }

        switch (attribute.GetAttributeType().Name)
        {
        case "SinceAttribute":
        case "iOSAttribute":
            return(AttributeConversionManager.ConvertPlatformAttribute(attribute, PlatformName.iOS).Yield());

        case "MacAttribute":
            return(AttributeConversionManager.ConvertPlatformAttribute(attribute, PlatformName.MacOSX).Yield());

        case "WatchAttribute":
            return(AttributeConversionManager.ConvertPlatformAttribute(attribute, PlatformName.WatchOS).Yield());

        case "TVAttribute":
            return(AttributeConversionManager.ConvertPlatformAttribute(attribute, PlatformName.TvOS).Yield());

        case "MacCatalystAttribute":
            return(AttributeConversionManager.ConvertPlatformAttribute(attribute, PlatformName.MacCatalyst).Yield());

        case "LionAttribute":
            return(AttributeFactory.CreateNewIntroducedAttribute(PlatformName.MacOSX, 10, 7).Yield());

        case "MountainLionAttribute":
            return(AttributeFactory.CreateNewIntroducedAttribute(PlatformName.MacOSX, 10, 8).Yield());

        case "MavericksAttribute":
            return(AttributeFactory.CreateNewIntroducedAttribute(PlatformName.MacOSX, 10, 9).Yield());

        case "NoMacAttribute":
            return(AttributeFactory.CreateUnavailableAttribute(PlatformName.MacOSX).Yield());

        case "NoiOSAttribute":
            return(AttributeFactory.CreateUnavailableAttribute(PlatformName.iOS).Yield());

        case "NoWatchAttribute":
            return(AttributeFactory.CreateUnavailableAttribute(PlatformName.WatchOS).Yield());

        case "NoTVAttribute":
            return(AttributeFactory.CreateUnavailableAttribute(PlatformName.TvOS).Yield());

        case "NoMacCatalystAttribute":
            return(AttributeFactory.CreateUnavailableAttribute(PlatformName.MacCatalyst).Yield());

        case "AvailabilityAttribute":
            return(AttributeConversionManager.ConvertAvailability(attribute));

#if NET
        case "SupportedOSPlatformAttribute":
            var sarg = attribute.ConstructorArguments [0].Value as string;
            (var sp, var sv) = ParseOSPlatformAttribute(sarg);
            return(AttributeFactory.CreateNewIntroducedAttribute(sp, sv.Major, sv.Minor).Yield());

        case "UnsupportedOSPlatformAttribute":
            var uarg = attribute.ConstructorArguments [0].Value as string;
            (var up, var uv) = ParseOSPlatformAttribute(uarg);
            // might have been available for a while...
            if (uv == null)
            {
                return(AttributeFactory.CreateUnavailableAttribute(up).Yield());
            }
            else
            {
                return(Enumerable.Empty <System.Attribute> ());
            }
#endif
        default:
            return(Enumerable.Empty <System.Attribute> ());
        }
    }