Próbuję zmodyfikować drzewo składniowe, a następnie zaktualizować model semantyczny. Oto co mam do tej pory:zmodyfikować drzewo składni, a następnie uzyskać zaktualizowany model semantyczny
var tree = Roslyn.Compilers.CSharp.SyntaxTree.ParseCompilationUnit(code);
var compilation = Roslyn.Compilers.CSharp.Compilation.Create(
"MyCompilation",
syntaxTrees: new[] { tree },
references: new[] { mscorlib });
var semanticModel = compilation.GetSemanticModel(tree);
...
var oldStatementNode = (parent as ExpressionStatementSyntax); //some SyntaxNode in the tree
var oldExpressionNode = oldStatementNode.Expression;
var newExpressionNode = Syntax.ParenthesizedExpression(oldExpressionNode);
var newRootNode = tree.GetRoot().ReplaceNode(oldExpressionNode, newExpressionNode);
var semanticInfo = semanticModel.GetTypeInfo(newExpressionNode); //throws exception "Syntax node is not within syntax tree"
Gdy próbuję zadzwonić semanticModel = compilation.GetSemanticModel(tree);
lub nawet zrobić nową kompilację z tree
przed wywołaniem GetTypeInfo()
- sam wyjątek.
Jak mogę uzyskać zaktualizowaną wersję SemanticModel
? (Oczywiście mogłem uzyskać zmodyfikowane źródło i zrobić wszystko od początku, ale wydaje mi się, że jest bardziej efektywny sposób).
Brakuje mi czegoś oczywistego, jestem pewien, że może gdzieś powstało nowe drzewo składni?