Ejemplo n.º 1
0
            internal async Task <IEnumerable <CompletionItem> > GetItemsAsync()
            {
                // modifiers* override modifiers* type? |
                if (!TryCheckForTrailingTokens(_position))
                {
                    return(null);
                }

                var startToken = _provider.FindStartingToken(_syntaxTree, _position, _cancellationToken);

                if (startToken.Parent == null)
                {
                    return(null);
                }

                var semanticModel = await _document.ReuseExistingSpeculativeModelAsync(startToken.Parent, _cancellationToken).ConfigureAwait(false);

                if (!_provider.TryDetermineReturnType(startToken, semanticModel, _cancellationToken, out var returnType, out var tokenAfterReturnType) ||
                    !_provider.TryDetermineModifiers(tokenAfterReturnType, _text, _startLineNumber, out var seenAccessibility, out var modifiers) ||
                    !TryDetermineOverridableMembers(semanticModel, startToken, seenAccessibility, out var overridableMembers))
                {
                    return(null);
                }

                overridableMembers = _provider.FilterOverrides(overridableMembers, returnType);

                var resolvableMembers = overridableMembers.Where(m => CanResolveSymbolKey(m, semanticModel.Compilation));

                return(overridableMembers.Select(m => CreateItem(
                                                     m, semanticModel, startToken, modifiers)).ToList());
            }
            internal async Task <IEnumerable <CompletionItem> > GetItemsAsync()
            {
                // modifiers* override modifiers* type? |
                if (!TryCheckForTrailingTokens(_position))
                {
                    return(null);
                }

                var startToken = _provider.FindStartingToken(_syntaxTree, _position, _cancellationToken);

                if (startToken.Parent == null)
                {
                    return(null);
                }

                var semanticModel = await _document.GetSemanticModelForNodeAsync(startToken.Parent, _cancellationToken).ConfigureAwait(false);

                ITypeSymbol          returnType;
                DeclarationModifiers modifiers;
                Accessibility        seenAccessibility;
                SyntaxToken          tokenAfterReturnType;
                ISet <ISymbol>       overridableMembers;

                if (!_provider.TryDetermineReturnType(startToken, semanticModel, _cancellationToken, out returnType, out tokenAfterReturnType) ||
                    !_provider.TryDetermineModifiers(tokenAfterReturnType, _text, _startLineNumber, out seenAccessibility, out modifiers) ||
                    !TryDetermineOverridableMembers(semanticModel, startToken, seenAccessibility, out overridableMembers))
                {
                    return(null);
                }

                overridableMembers = _provider.FilterOverrides(overridableMembers, returnType);
                var symbolDisplayService = _document.GetLanguageService <ISymbolDisplayService>();

                return(overridableMembers.Select(m => CreateItem(
                                                     m, _span, symbolDisplayService, semanticModel, startToken, modifiers)).ToList());
            }