public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var methodIndex   = reader.ReadInteger();
                var ordinal       = reader.ReadInteger();
                var method        = reader.ResolveMethod(methodIndex);
                var typeParameter = method?.TypeParameters[ordinal];

                return(typeParameter == null
                    ? default
                    : new SymbolKeyResolution(typeParameter));
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var metadataName = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var arity = reader.ReadInteger();
                var typeKind = (TypeKind)reader.ReadInteger();
                var isUnboundGenericType = reader.ReadBoolean();
                var typeArgumentsOpt = reader.ReadSymbolKeyArray();

                var types = GetAllSymbols<INamespaceOrTypeSymbol>(containingSymbolResolution).SelectMany(
                    s => Resolve(reader, s, metadataName, arity, typeKind, isUnboundGenericType, typeArgumentsOpt));
                return CreateSymbolInfo(types);
            }
示例#3
0
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var metadataName = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var arity                = reader.ReadInteger();
                var typeKind             = (TypeKind)reader.ReadInteger();
                var isUnboundGenericType = reader.ReadBoolean();
                var typeArgumentsOpt     = reader.ReadSymbolKeyArray();

                var types = GetAllSymbols <INamespaceOrTypeSymbol>(containingSymbolResolution).SelectMany(
                    s => Resolve(reader, s, metadataName, arity, typeKind, isUnboundGenericType, typeArgumentsOpt));

                return(CreateSymbolInfo(types));
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var elementTypeResolution = reader.ReadSymbolKey();
                var rank = reader.ReadInteger();

                return(CreateSymbolInfo(GetAllSymbols <ITypeSymbol>(elementTypeResolution)
                                        .Select(s => reader.Compilation.CreateArrayTypeSymbol(s, rank))));
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var elementTypeResolution = reader.ReadSymbolKey();
                var rank = reader.ReadInteger();

                return CreateSymbolInfo(GetAllSymbols<ITypeSymbol>(elementTypeResolution)
                            .Select(s => reader.Compilation.CreateArrayTypeSymbol(s, rank)));
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader, out string?failureReason)
            {
                var elementTypeResolution = reader.ReadSymbolKey(out var elementTypeFailureReason);
                var rank = reader.ReadInteger();

                if (elementTypeFailureReason != null)
                {
                    failureReason = $"({nameof(ArrayTypeSymbolKey)} {nameof(elementTypeResolution)} failed -> {elementTypeFailureReason})";
                    return(default);
示例#7
0
            protected sealed override SymbolKeyResolution Resolve(
                SymbolKeyReader reader, IArrayTypeSymbol?contextualSymbol, out string?failureReason)
            {
                var elementTypeResolution = reader.ReadSymbolKey(contextualSymbol?.ElementType, out var elementTypeFailureReason);
                var rank = reader.ReadInteger();

                if (elementTypeFailureReason != null)
                {
                    failureReason = $"({nameof(ArrayTypeSymbolKey)} {nameof(elementTypeResolution)} failed -> {elementTypeFailureReason})";
                    return(default);
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var localName = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var ordinal = reader.ReadInteger();
                var kind = (SymbolKind)reader.ReadInteger();

                var containingSymbol = containingSymbolResolution.Symbol;
                if (containingSymbol != null)
                {
                    foreach (var symbol in EnumerateSymbols(
                        reader.Compilation, containingSymbol, kind, localName, reader.CancellationToken))
                    {
                        if (symbol.Item2 == ordinal)
                        {
                            return new SymbolKeyResolution(symbol.Item1);
                        }
                    }
                }

                return new SymbolKeyResolution();
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var elementTypeResolution = reader.ReadSymbolKey();
                var rank = reader.ReadInteger();

                using var result = PooledArrayBuilder <IArrayTypeSymbol> .GetInstance(elementTypeResolution.SymbolCount);

                foreach (var typeSymbol in elementTypeResolution.OfType <ITypeSymbol>())
                {
                    result.AddIfNotNull(reader.Compilation.CreateArrayTypeSymbol(typeSymbol, rank));
                }

                return(CreateResolution(result));
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var localName = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var ordinal = reader.ReadInteger();
                var kind    = (SymbolKind)reader.ReadInteger();

                var containingSymbol = containingSymbolResolution.Symbol;

                if (containingSymbol != null)
                {
                    foreach (var symbol in EnumerateSymbols(
                                 reader.Compilation, containingSymbol, kind, localName, reader.CancellationToken))
                    {
                        if (symbol.ordinal == ordinal)
                        {
                            return(new SymbolKeyResolution(symbol.symbol));
                        }
                    }
                }

                return(new SymbolKeyResolution());
            }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var name = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var arity = reader.ReadInteger();
                var typeArgumentResolutions = reader.ReadSymbolKeyArray();

                var errorTypes = ResolveErrorTypes(reader, containingSymbolResolution, name, arity);

                if (typeArgumentResolutions.IsDefault)
                {
                    return(CreateSymbolInfo(errorTypes));
                }

                var typeArguments = typeArgumentResolutions.Select(
                    r => GetFirstSymbol <ITypeSymbol>(r)).ToArray();

                if (typeArguments.Any(s_typeIsNull))
                {
                    return(default);
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var name = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var arity = reader.ReadInteger();
                var typeArgumentResolutions = reader.ReadSymbolKeyArray();

                var errorTypes = ResolveErrorTypes(reader, containingSymbolResolution, name, arity);

                if (typeArgumentResolutions.IsDefault)
                {
                    return CreateSymbolInfo(errorTypes);
                }

                var typeArguments = typeArgumentResolutions.Select(
                    r => GetFirstSymbol<ITypeSymbol>(r)).ToArray();
                if (typeArguments.Any(s_typeIsNull))
                {
                    return default(SymbolKeyResolution);
                }

                return CreateSymbolInfo(errorTypes.Select(t => t.Construct(typeArguments)));
            }
 public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
 {
     var ordinal = reader.ReadInteger();
     var typeParameter = reader.CurrentMethod.TypeParameters[ordinal];
     return new SymbolKeyResolution(typeParameter);
 }
            public static SymbolKeyResolution Resolve(SymbolKeyReader reader)
            {
                var metadataName = reader.ReadString();
                var containingSymbolResolution = reader.ReadSymbolKey();
                var arity = reader.ReadInteger();
                var isPartialMethodImplementationPart = reader.ReadBoolean();
                var parameterRefKinds = reader.ReadRefKindArray();

                // For each method that we look at, we'll have to resolve the parameter list and
                // return type in the context of that method.  i.e. if we have Foo<T>(IList<T> list)
                // then we'll need to have marked that we're on the Foo<T> method so that we know 
                // 'T' in IList<T> resolves to.
                //
                // Because of this, we keep track of where we are in the reader.  Before resolving
                // every parameter list, we'll mark which method we're on and we'll rewind to this
                // point.
                var beforeParametersPosition = reader.Position;

                var result = new List<IMethodSymbol>();

                var namedTypes = containingSymbolResolution.GetAllSymbols().OfType<INamedTypeSymbol>();
                foreach (var namedType in namedTypes)
                {
                    var method = Resolve(reader, metadataName, arity, isPartialMethodImplementationPart,
                        parameterRefKinds, beforeParametersPosition, namedType);

                    // Note: after finding the first method that matches we stop.  That's necessary
                    // as we cache results while searching.  We don't want to override these positive
                    // matches with a negative ones if we were to continue searching.
                    if (method != null)
                    {
                        result.Add(method);
                        break;
                    }
                }

                if (reader.Position == beforeParametersPosition)
                {
                    // We didn't find any candidates.  We still need to stream through this
                    // method signature so the reader is in a proper position.
                    var parameterTypeResolutions = reader.ReadSymbolKeyArray();
                    var returnType = GetFirstSymbol<ITypeSymbol>(reader.ReadSymbolKey());
                }

                return CreateSymbolInfo(result);
            }