private async Task<Document> InsertStopwatchToMeasureTime(Document document, IdentifierNameSyntax node, CancellationToken cancellationToken) { SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken); var nodes = new List<Tuple<SyntaxNode, SyntaxNode>>(); SyntaxNode nodeLine = GetRootNodeOfLine(node); SyntaxNode newNode = CommentLine(nodeLine); newNode = newNode.WithTrailingTrivia(newNode.GetTrailingTrivia() .AddRange(nodeLine.GetLeadingTrivia()) .Add(SyntaxFactory.SyntaxTrivia(SyntaxKind.SingleLineCommentTrivia, "timer.Stop();")) .Add(SyntaxFactory.EndOfLine(Environment.NewLine)) .AddRange(nodeLine.GetLeadingTrivia()) .Add(SyntaxFactory.SyntaxTrivia(SyntaxKind.SingleLineCommentTrivia, "TimeSpan elapsed = timer.Elapsed;")) .Add(SyntaxFactory.EndOfLine(Environment.NewLine))); nodes.Add(new Tuple<SyntaxNode, SyntaxNode>(nodeLine, newNode)); var methodDeclaration = node.FirstAncestorOfType(typeof(MethodDeclarationSyntax)) as MethodDeclarationSyntax; if (semanticModel == null) { return document; } SyntaxNode firstGetTime = TimeMeasurementCodeAnalyzer.GetNodesUsedToGetCurrentTime(semanticModel, methodDeclaration).First(); nodeLine = GetRootNodeOfLine(firstGetTime); newNode = CommentLine(nodeLine); newNode = newNode.WithTrailingTrivia(newNode.GetTrailingTrivia() .AddRange(nodeLine.GetLeadingTrivia()) .Add(SyntaxFactory.SyntaxTrivia(SyntaxKind.SingleLineCommentTrivia, "var timer = Stopwatch.StartNew();")) .Add(SyntaxFactory.EndOfLine(Environment.NewLine))); nodes.Add(new Tuple<SyntaxNode, SyntaxNode>(nodeLine, newNode)); document = await this.ReplaceNodesInDocumentAsync(document, cancellationToken, nodes.ToArray()); return await this.CheckNamespaceUsageAsync(document, cancellationToken, "System.Diagnostics"); }