예제 #1
0
        private async Task<Document> ReplaceWithEmptyEnumerable(Document document, ReturnStatementSyntax returnNullStatement, MethodDeclarationSyntax method, CancellationToken cancellationToken)
        {
            var semanticModel = await document.GetSemanticModelAsync(cancellationToken);
            var typeSymbol = semanticModel.GetSymbolInfo(method.ReturnType, cancellationToken).Symbol as INamedTypeSymbol;
            var genericTypeArgument = typeSymbol.TypeArguments.Single();

            var empty = SyntaxFactory.ParseExpression($"Enumerable.Empty<{genericTypeArgument.Name}>()");
            var returnEmptyStatement = returnNullStatement.WithExpression(empty);
            SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken);
            var newRoot = root.ReplaceNode(returnNullStatement, returnEmptyStatement);
            return document.WithSyntaxRoot(newRoot) ;
        }
            public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax node)
            {

                var newNode = node.WithExpression(
                    SyntaxFactory.InvocationExpression(
                        SyntaxFactory.MemberAccessExpression(
                            SyntaxKind.SimpleMemberAccessExpression,
                            SyntaxFactory.ParseName("System.Threading.Tasks.Task")
                                .WithAdditionalAnnotations(Simplifier.Annotation),
                            SyntaxFactory.IdentifierName("FromResult")),
                        SyntaxFactory.ArgumentList().AddArguments(SyntaxFactory.Argument(node.Expression))));
                return base.VisitReturnStatement(newNode);
            }
예제 #3
0
		/// <summary>
		///   Normalizes the <paramref name="statement" />.
		/// </summary>
		public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax statement)
		{
			var methodSymbol = SemanticModel.GetEnclosingSymbol(statement.SpanStart) as IMethodSymbol;
			if (methodSymbol == null)
				return base.VisitReturnStatement(statement);

			if (!IsFormulaType(methodSymbol.ReturnType))
				return base.VisitReturnStatement(statement);

			return statement.WithExpression(ReplaceImplicitConversion(statement.Expression));
		}