У меня есть CodeFix, который применяется "случайно" в модульном тестировании. У меня 46 модульных тестов для одного исправления кода и 20 неудачных. Странно то, что, когда я смотрю на Документ, я возвращаюсь в каждом случае, он верен в конце моего CodeFix. но когда я смотрю на конец ApplyFix, иногда документ верен, а иногда - без изменений.
Я пытался просмотреть Документ в конце CodeFix, прежде чем вернуть его. После вызова CodeAction.GetOperationsAsync вызывается мой RegisterCodeFixesAsync, и я вижу, что он регистрирует исправление. Затем я вижу свое исправление выполненным. Далее следует вторая строка в ApplyFix
Private Shared Function ApplyFix(document As Document, codeAction As CodeAction) As Document
Dim operations As ImmutableArray(Of CodeActionOperation) = codeAction.GetOperationsAsync(CancellationToken.None).Result
Dim solution As Solution = operations.OfType(Of ApplyChangesOperation).Single.ChangedSolution
Return solution.GetDocument(document.Id)
End Function
Код ниже всегда выполняется
context.RegisterCodeFix(CodeAction.Create(title, createChangedDocument:=Function(c As CancellationToken) AddAsClauseAsync(context.Document, DirectCast(declarationSyntax, VariableDeclaratorSyntax), c), equivalenceKey:=title), firstDiagnostic)
Далее вызывается мое исправление и возвращается исправленный документ
Dim NewDocument As Document = _Document.WithSyntaxRoot(newRoot)
Return NewDocument
В каждом случае я ожидаю, что когда я посмотрю на solution.GetDocument (document.Id), я увижу свое исправление, но это происходит только в ~ 50% тестов, в случае неудачных тестов исходный документ просто возвращается без изменений.