Esempio n. 1
0
    public static AttachedMemberList Create(INamedTypeSymbol typeSymbol, TypeDataStore store, INamedTypeSymbol attachedMemberAttr)
    {
        var comparer = SymbolEqualityComparer.Default;
        Dictionary <string, AttachedMemberData>?dic = null;

        foreach (var attr in typeSymbol.GetAttributes())
        {
            if (comparer.Equals(attachedMemberAttr, attr.AttributeClass) == false)
            {
                continue;
            }
            var args = attr.ConstructorArguments;
            if (args.Length != 3)
            {
                continue;
            }
            var memberName     = args[0].Value?.ToString();
            var code           = args[1].Value?.ToString();
            var memberTypeName = args[2].Value?.ToString();
            var memberType     = memberTypeName != null?store.Compilation.GetTypeByMetadataNameOrSpecialType(memberTypeName) : null;

            if (memberName == null || code == null || memberType == null)
            {
                continue;
            }
            dic ??= new();
            dic[memberName] = new AttachedMemberData(typeSymbol, memberName, code, memberType);
        }
        if (dic == null)
        {
            return(Empty);
        }
        return(new AttachedMemberList(dic, typeSymbol, store));
    }
Esempio n. 2
0
    public bool TryGetData(string memberName, [MaybeNullWhen(false)] out AttachedMemberData data)
    {
        var dic = _dic;

        if (dic is null)
        {
            data = null;
            return(false);
        }
        return(dic.TryGetValue(memberName, out data));
    }