Reputation: 3993
Suppose I have "".GetType()
which is ExpressionStatementSyntax
(or maybe InvocationExpressionSyntax
) in the syntax tree and I want to turn it into ("".GetType())
, that is I want to turn my ExpressionStatementSyntax
node into ParenthesizedExpressionSyntax
node. How would I do that?
Upvotes: 1
Views: 658
Reputation: 8986
using System;
using System.Linq;
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;
class Program
{
static void Main(string[] args)
{
var oldRootNode = Syntax.ParseCompilationUnit(
"class C { void M() { \"\".GetType(); } }");
var oldStatementNode = oldRootNode.DescendantNodes().OfType<ExpressionStatementSyntax>().First();
var oldExpressionNode = oldStatementNode.Expression;
var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
var newRootNode = oldRootNode.ReplaceNode(oldExpressionNode, newExpressionNode);
Console.WriteLine(oldRootNode.ToString());
Console.WriteLine(newRootNode.ToString());
}
}
Upvotes: 3