static IEnumerable <System.Attribute> ConvertOldAttributes(CustomAttributeData attribute)
    {
        switch (attribute.AttributeType.Namespace)
        {
        case null:         // Root namespace such as PlatformAvailabilityShadow.cs
        case "MonoTouch.ObjCRuntime":
        case "ObjCRuntime":
            break;

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

        switch (attribute.AttributeType.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 "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 "AvailabilityAttribute":
            return(AttributeConversionManager.ConvertAvailability(attribute));

        default:
            return(Enumerable.Empty <System.Attribute> ());
        }
    }
    public static IEnumerable <System.Attribute> ConvertAvailability(CustomAttributeData attribute)
    {
        string message = null;

        if (attribute.NamedArguments.Any(x => x.MemberName == "Message"))
        {
            message = (string)attribute.NamedArguments.First(x => x.MemberName == "Message").TypedValue.Value;
        }

        foreach (var arg in attribute.NamedArguments)
        {
            switch (arg.MemberName)
            {
            case "Introduced": {
                ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg);
                yield return(AttributeFactory.CreateNewIntroducedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message));

                continue;
            }

            case "Deprecated": {
                ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg);
                yield return(AttributeFactory.CreateDeprecatedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message));

                continue;
            }

            case "Obsoleted": {
                ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg);
                yield return(AttributeFactory.CreateObsoletedAttribute(availInfo.Platform, availInfo.Major, availInfo.Minor, message: message));

                continue;
            }

            case "Unavailable": {
                ParsedAvailabilityInfo availInfo = DetermineOldAvailabilityVersion(arg);
                yield return(AttributeFactory.CreateUnavailableAttribute(availInfo.Platform, message: message));

                continue;
            }

            case "Message":
                continue;

            default:
                throw new NotImplementedException($"ConvertAvailability found unknown named argument {arg.MemberName}");
            }
        }
    }
Exemple #3
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> ());
        }
    }