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)); }
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)); }
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)))); }
private BlockSyntax RewriteMethodBody(MethodDeclarationSyntax node, BlockSyntax body, IMethodOrAccessorAnalyzationResult methodResult) { if (methodResult.ForwardCall) { return(ForwardCall(node, body)); } return(RewriteFunctionBody(body)); }