コード例 #1
0
    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}");
            }
        }
    }