Пример #1
0
        private static InvocationContext CreateContextForMethod(string typeAndMethodName, SnippetCompiler snippet)
        {
            var nameParts = typeAndMethodName.Split('.');

            var identifierPairs = snippet.IsCSharp() ? GetCSharpNodes() : GetVbNodes();

            foreach (var(invocation, methodName) in identifierPairs)
            {
                var symbol = snippet.GetSymbol <IMethodSymbol>(invocation);
                if (symbol.Name == nameParts[1] &&
                    symbol.ContainingType.Name == nameParts[0])
                {
                    return(new InvocationContext(invocation, methodName, snippet.SemanticModel));
                }
            }

            Assert.Fail($"Test setup error: could not find method call in test code snippet: {typeAndMethodName}");
            return(null);

            IEnumerable <(SyntaxNode node, string name)> GetCSharpNodes() =>
            snippet.GetNodes <CSharpSyntax.InvocationExpressionSyntax>()
            .Select(n => ((SyntaxNode)n, n.Expression.GetIdentifier()?.Identifier.ValueText));

            IEnumerable <(SyntaxNode node, string name)> GetVbNodes() =>
            snippet.GetNodes <VBSyntax.InvocationExpressionSyntax>()
            .Select(n => ((SyntaxNode)n, VisualBasicSyntaxHelper.GetIdentifier(n.Expression)?.Identifier.ValueText));
        }