public bool ContainsAttribute <TAttribute>() where TAttribute : Attribute
        {
            var symbol = _analysis.GetSymbol <TAttribute>();

            if (symbol is null)
            {
                return(false);
            }
            return(Attributes.SelectMany(x => x).Any(x => x.AttributeClass?.Equals(symbol, SymbolEqualityComparer.Default) ?? false));
        }
示例#2
0
        private IReadOnlyList <MethodSignature> GetMethodSignatures(IComponentProvider provider)
        {
            var boolSymbol = _symbols.GetSymbol <bool>();
            var intSymbol  = _symbols.GetSymbol <int>();
            var memberType = _member.ReturnType !.Symbol;

            // Incoming Data type
            var discovery  = new MethodArg(RefKind.In, provider.DiscoveryType, "parent");
            var sourceType = new MethodArg(RefKind.In, _member.ContainingFullType.Symbol, "source");

            // Buffers
            var readOnlySpan = new MethodArg(_symbols.GetSymbol(typeof(ReadOnlySpan <byte>)), "readOnlySpan");
            var span         = new MethodArg(_symbols.GetSymbol(typeof(Span <byte>)), "span");
            var cursor       = new MethodArg(RefKind.Ref, _symbols.GetSymbol(typeof(SequenceCursor <byte>)), "cursor");

            // Return Data
            var readBytes    = new MethodArg(RefKind.Out, intSymbol, "readBytes");
            var writtenBytes = new MethodArg(RefKind.Out, intSymbol, "writtenBytes");
            var result       = new MethodArg(RefKind.Out, memberType, "result");

            return(new MethodSignature[] {
                MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser")),
                MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser"), (RefKind.Out, boolSymbol, "isSuccess")),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0))
                .AddArgument(discovery, readOnlySpan, readBytes, result)
                .WithReturn <bool>(),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0))
                .AddArgument(discovery, cursor, result)
                .WithReturn <bool>(),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0))
                .AddArgument(discovery, readOnlySpan, result)
                .WithReturn(memberType),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0))
                .AddArgument(discovery, cursor)
                .WithReturn(memberType),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TrySerializeState(0))
                .AddArgument(discovery, sourceType, span, writtenBytes)
                .WithReturn(boolSymbol),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.SerializeState(0))
                .AddArgument(discovery, sourceType, span)
                .WithReturn(intSymbol),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.GetLengthState(0))
                .AddArgument(discovery, sourceType)
                .WithReturn(intSymbol)
            });
示例#3
0
 public IMemberComposer Build(ITypeComposer typeComposer, MemberMetaInfo meta, GeneratingTypeName typeName, IComponentProvider provider)
 => new MemberComposerSource(meta, typeName, _conditions, _formatters, _symbolProvider)
 .CreateStruct(typeComposer, provider, (name, source) => {
     _sourceAddition.AddSource($"{typeName}.generated.cs", source);
     return(_symbolProvider.GetSymbol(name.ToString()));
 });