private MethodTransformerResult Update(MethodDeclarationSyntax methodNode,
                                               IMethodOrAccessorAnalyzationResult methodResult, INamespaceTransformationMetadata namespaceMetadata)
        {
            methodNode = methodNode.WithIdentifier(Identifier(methodResult.AsyncCounterpartName));

            // Remove the new modifier
            if (methodNode.Modifiers.Any(o => o.IsKind(SyntaxKind.NewKeyword)))
            {
                var newMofidier = methodNode.Modifiers.First(o => o.IsKind(SyntaxKind.NewKeyword));
                if (methodNode.GetFirstToken(true).IsKind(SyntaxKind.NewKeyword))
                {
                    methodNode = methodNode
                                 .WithModifiers(TokenList(methodNode.Modifiers.Where(o => !o.IsKind(SyntaxKind.NewKeyword))))
                                 .WithLeadingTrivia(newMofidier.LeadingTrivia);
                }
                else
                {
                    var nextToken = newMofidier.GetNextToken(true);
                    methodNode = methodNode
                                 .ReplaceToken(nextToken, nextToken.WithLeadingTrivia(newMofidier.LeadingTrivia))
                                 .WithModifiers(TokenList(methodNode.Modifiers.Where(o => !o.IsKind(SyntaxKind.NewKeyword))));
                }
            }

            if (!methodResult.PreserveReturnType && methodResult.Symbol.MethodKind != MethodKind.PropertySet)
            {
                methodNode = methodNode.ReturnAsTask(namespaceMetadata.TaskConflict);
            }
            return(MethodTransformerResult.Update(methodNode));
        }
Esempio n. 2
0
 private MethodTransformerResult Update(MethodDeclarationSyntax methodNode,
                                        IMethodOrAccessorAnalyzationResult methodResult, INamespaceTransformationMetadata namespaceMetadata)
 {
     methodNode = methodNode.WithIdentifier(Identifier(methodResult.AsyncCounterpartName));
     if (!methodResult.PreserveReturnType && methodResult.Symbol.MethodKind != MethodKind.PropertySet)
     {
         methodNode = methodNode.ReturnAsTask(namespaceMetadata.TaskConflict);
     }
     return(MethodTransformerResult.Update(methodNode));
 }
Esempio n. 3
0
 private StatementSyntax GetSyncGuard(IMethodOrAccessorAnalyzationResult methodResult, string parameterName, SyntaxTrivia leadingWhitespace,
                                      SyntaxTrivia endOfLine, SyntaxTrivia indent)
 {
     return(IfStatement(
                MemberAccessExpression(
                    SyntaxKind.SimpleMemberAccessExpression,
                    IdentifierName("cancellationToken"),
                    IdentifierName("IsCancellationRequested")),
                Block(
                    SingletonList <StatementSyntax>(
                        ReturnStatement(
                            InvocationExpression(
                                MemberAccessExpression(
                                    SyntaxKind.SimpleMemberAccessExpression,
                                    IdentifierName("Task"),
                                    GenericName(Identifier("FromCanceled"))
                                    .WithTypeArgumentList(
                                        TypeArgumentList(
                                            SingletonSeparatedList(
                                                methodResult.Symbol.ReturnsVoid
                                                                                                                 ? PredefinedType(Token(SyntaxKind.ObjectKeyword))
                                                                                                                 : methodResult.GetNode().GetReturnType().WithoutTrivia())
                                            ))))
                            .WithArgumentList(
                                ArgumentList(
                                    SingletonSeparatedList(
                                        Argument(IdentifierName(parameterName))))))
                        .WithReturnKeyword(
                            Token(TriviaList(Whitespace(leadingWhitespace.ToFullString() + indent.ToFullString())), SyntaxKind.ReturnKeyword, TriviaList(Space)))
                        .WithSemicolonToken(
                            Token(TriviaList(), SyntaxKind.SemicolonToken, TriviaList(endOfLine)))))
                .WithOpenBraceToken(
                    Token(TriviaList(leadingWhitespace), SyntaxKind.OpenBraceToken, TriviaList(endOfLine)))
                .WithCloseBraceToken(
                    Token(TriviaList(leadingWhitespace), SyntaxKind.CloseBraceToken, TriviaList(endOfLine))))
            .WithIfKeyword(
                Token(TriviaList(leadingWhitespace), SyntaxKind.IfKeyword, TriviaList(Space)))
            .WithCloseParenToken(
                Token(TriviaList(), SyntaxKind.CloseParenToken, TriviaList(endOfLine))));
 }
Esempio n. 4
0
 private BlockSyntax RewriteMethodBody(MethodDeclarationSyntax node, BlockSyntax body, IMethodOrAccessorAnalyzationResult methodResult)
 {
     if (methodResult.ForwardCall)
     {
         return(ForwardCall(node, body));
     }
     return(RewriteFunctionBody(body));
 }