public CompilationUnitSyntax TransformRoot(CompilationUnitSyntax root) { root = root.ReplaceNodes(_nodeToAnnotations.Keys, (originalNode, rewrittenNode) => { var ret = rewrittenNode.WithAdditionalAnnotations(_nodeToAnnotations[originalNode]); return ret; }); foreach (var kvp in _annotationToTransformation) { Dictionary<SyntaxNode, SyntaxNode> originalNodeMap = new Dictionary<SyntaxNode, SyntaxNode>(); foreach (var originalNodeKvp in _originalNodeLookup) { var annotatedNodes = root.GetAnnotatedNodes(originalNodeKvp.Key).ToList(); SyntaxNode annotatedNode = annotatedNodes.SingleOrDefault(); if (annotatedNode != null) { originalNodeMap[annotatedNode] = originalNodeKvp.Value; } } var syntaxAnnotation = kvp.Key; var transformation = kvp.Value; var nodesToTransform = root.GetAnnotatedNodes(syntaxAnnotation); root = transformation(root, nodesToTransform, originalNodeMap); } return root; }