253 references to EditKind
Microsoft.CodeAnalysis.CSharp.EditorFeatures.UnitTests (2)
EditAndContinue\CSharpEditAndContinueAnalyzerTests.cs (2)
64
var actual = CSharpEditAndContinueAnalyzer.GetDiagnosticSpan(node,
EditKind
.Update);
102
span = CSharpEditAndContinueAnalyzer.TryGetDiagnosticSpanImpl(kind, null,
EditKind
.Update);
Microsoft.CodeAnalysis.CSharp.Features (57)
EditAndContinue\CSharpEditAndContinueAnalyzer.cs (57)
700
GetDiagnosticSpan(newNode,
EditKind
.Delete),
711
GetDiagnosticSpan(newNode,
EditKind
.Delete),
731
GetDiagnosticSpan(newNode,
EditKind
.Update),
797
return GetDiagnosticSpan(node,
EditKind
.Delete);
1163
internal override bool TryGetAssociatedMemberDeclaration(SyntaxNode node,
EditKind
editKind, [NotNullWhen(true)] out SyntaxNode? declaration)
1176
if (editKind !=
EditKind
.Delete &&
1244
protected override OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol,
EditKind
editKind)> GetSymbolEdits(
1245
EditKind
editKind,
1250
IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap,
1258
case
EditKind
.Reorder:
1267
return new OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>((oldSymbol.ContainingSymbol, newSymbol.ContainingSymbol,
EditKind
.Update));
1273
return new OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>((oldSymbol, newSymbol,
EditKind
.Update));
1284
return OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>.Empty;
1286
case
EditKind
.Update:
1321
using var _ = ArrayBuilder<(ISymbol?, ISymbol?,
EditKind
)>.GetInstance(out var builder);
1353
OneOrMany<(ISymbol?, ISymbol?,
EditKind
)> GetFieldSymbolUpdates(SeparatedSyntaxList<VariableDeclaratorSyntax> oldVariables, SeparatedSyntaxList<VariableDeclaratorSyntax> newVariables)
1357
return OneOrMany.Create((oldModel.GetDeclaredSymbol(oldVariables[0], cancellationToken), newModel.GetDeclaredSymbol(newVariables[0], cancellationToken),
EditKind
.Update));
1362
select (oldModel.GetDeclaredSymbol(oldVariable, cancellationToken), newModel.GetDeclaredSymbol(newVariable, cancellationToken),
EditKind
.Update);
1369
case
EditKind
.Delete:
1370
case
EditKind
.Insert:
1381
return OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>.Empty;
1399
return OneOrMany.Create(ImmutableArray.Create((oldSymbol, newSymbol,
EditKind
.Update)));
1405
return OneOrMany.Create(ImmutableArray.Create((oldSymbol, newSymbol,
EditKind
.Update)));
1410
case
EditKind
.Move:
1420
? OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>.Empty
1424
return (editKind ==
EditKind
.Delete ? oldSymbol : newSymbol) is null ?
1425
OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>.Empty : new OneOrMany<(ISymbol?, ISymbol?,
EditKind
)>((oldSymbol, newSymbol, editKind));
1585
protected override TextSpan? TryGetDiagnosticSpan(SyntaxNode node,
EditKind
editKind)
1588
internal static new TextSpan GetDiagnosticSpan(SyntaxNode node,
EditKind
editKind)
1591
private static TextSpan? TryGetDiagnosticSpanImpl(SyntaxNode node,
EditKind
editKind)
1595
internal static TextSpan? TryGetDiagnosticSpanImpl(SyntaxKind kind, SyntaxNode node,
EditKind
editKind)
1701
if (editKind ==
EditKind
.Delete)
1955
protected override string? TryGetDisplayName(SyntaxNode node,
EditKind
editKind)
1958
internal static new string? GetDisplayName(SyntaxNode node,
EditKind
editKind)
1961
internal static string? TryGetDisplayNameImpl(SyntaxNode node,
EditKind
editKind)
2220
protected override string GetSuspensionPointDisplayName(SyntaxNode node,
EditKind
editKind)
2248
private readonly
EditKind
_kind;
2256
EditKind
kind,
2302
case
EditKind
.Delete:
2306
case
EditKind
.Update:
2310
case
EditKind
.Move:
2314
case
EditKind
.Insert:
2318
case
EditKind
.Reorder:
2458
Dictionary<SyntaxNode,
EditKind
> editMap)
2471
var classifier = new EditClassifier(this, diagnostics, oldNode: null, newMember,
EditKind
.Update, span: span);
2531
GetDiagnosticSpan(newNode,
EditKind
.Insert),
2533
arguments: new[] { GetDisplayName(newNode,
EditKind
.Insert) }));
2603
Debug.Assert(edit.Kind !=
EditKind
.Update || edit.OldNode.RawKind == edit.NewNode.RawKind);
2605
if (edit.Kind !=
EditKind
.Update || !AreExceptionClausesEquivalent(edit.OldNode, edit.NewNode))
2730
GetDiagnosticSpan(newForEachStatement,
EditKind
.Update),
2732
new[] { GetDisplayName(newForEachStatement,
EditKind
.Update) }));
2744
GetDiagnosticSpan(newLocalDeclaration,
EditKind
.Update),
2746
new[] { GetDisplayName(newLocalDeclaration,
EditKind
.Update) }));
2942
GetDiagnosticSpan(newSwitch,
EditKind
.Update),
Microsoft.CodeAnalysis.Features (105)
EditAndContinue\AbstractEditAndContinueAnalyzer.cs (105)
274
protected abstract OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol,
EditKind
editKind)> GetSymbolEdits(
275
EditKind
editKind,
280
IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap,
297
protected abstract TextSpan? TryGetDiagnosticSpan(SyntaxNode node,
EditKind
editKind);
299
internal TextSpan GetDiagnosticSpan(SyntaxNode node,
EditKind
editKind)
302
protected virtual TextSpan GetBodyDiagnosticSpan(SyntaxNode node,
EditKind
editKind)
325
internal string GetDisplayName(SyntaxNode node,
EditKind
editKind =
EditKind
.Update)
372
protected virtual string GetBodyDisplayName(SyntaxNode node,
EditKind
editKind =
EditKind
.Update)
402
protected abstract string? TryGetDisplayName(SyntaxNode node,
EditKind
editKind);
404
protected virtual string GetSuspensionPointDisplayName(SyntaxNode node,
EditKind
editKind)
414
internal abstract void ReportTopLevelSyntacticRudeEdits(ArrayBuilder<RudeEditDiagnostic> diagnostics, Match<SyntaxNode> match, Edit<SyntaxNode> edit, Dictionary<SyntaxNode,
EditKind
> editMap);
469
internal abstract bool TryGetAssociatedMemberDeclaration(SyntaxNode node,
EditKind
editKind, [NotNullWhen(true)] out SyntaxNode? declaration);
723
private void ReportTopLevelSyntacticRudeEdits(ArrayBuilder<RudeEditDiagnostic> diagnostics, EditScript<SyntaxNode> syntacticEdits, Dictionary<SyntaxNode,
EditKind
> editMap)
733
/// <see cref="
EditKind
.Move"/> or <see cref="
EditKind
.Reorder"/>.
754
internal Dictionary<SyntaxNode,
EditKind
> BuildEditMap(EditScript<SyntaxNode> editScript)
756
var map = new Dictionary<SyntaxNode,
EditKind
>(editScript.Edits.Length);
762
if (edit.Kind is
EditKind
.Delete or
EditKind
.Update)
767
if (edit.Kind is
EditKind
.Insert or
EditKind
.Update)
780
map.Add(editScript.Match.OldRoot,
EditKind
.Update);
781
map.Add(editScript.Match.NewRoot,
EditKind
.Update);
995
ReportMemberBodyUpdateRudeEdits(diagnostics, newDeclaration, GetDiagnosticSpan(newDeclaration,
EditKind
.Update));
1059
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.MakeMethodAsyncNotSupportedByRuntime, GetDiagnosticSpan(newDeclaration,
EditKind
.Insert)));
1063
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.MakeMethodIteratorNotSupportedByRuntime, GetDiagnosticSpan(newDeclaration,
EditKind
.Insert)));
1239
var bodySpan = GetBodyDiagnosticSpan(newBody,
EditKind
.Update);
1512
GetBodyDiagnosticSpan(newBody,
EditKind
.Update)));
1521
GetBodyDiagnosticSpan(newBody,
EditKind
.Update),
1531
GetBodyDiagnosticSpan(newBody,
EditKind
.Update),
1545
new[] { GetSuspensionPointDisplayName(deletedSuspensionPoint,
EditKind
.Delete) }));
1552
GetDiagnosticSpan(insertedSuspensionPoint,
EditKind
.Insert),
1554
new[] { GetSuspensionPointDisplayName(insertedSuspensionPoint,
EditKind
.Insert) }));
1677
return GetDiagnosticSpan(newAncestor,
EditKind
.Delete);
1724
protected static bool HasParentEdit(IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap, Edit<SyntaxNode> edit)
1729
case
EditKind
.Insert:
1733
case
EditKind
.Delete:
1744
protected static bool HasEdit(IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap, SyntaxNode? node,
EditKind
editKind)
1748
editMap.TryGetValue(node, out
var
parentEdit) &&
1778
GetDiagnosticSpan(newNode,
EditKind
.Update),
1780
new[] { GetDisplayName(newNode,
EditKind
.Update) }));
1787
GetDiagnosticSpan(newNode,
EditKind
.Insert),
1789
new[] { GetDisplayName(newNode,
EditKind
.Insert) }));
1798
new[] { GetDisplayName(oldNode,
EditKind
.Delete) }));
1980
IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap,
1998
Debug.Assert(editMap[newNode] is
EditKind
.Update or
EditKind
.Insert);
2404
IReadOnlyDictionary<SyntaxNode,
EditKind
> editMap,
2468
if (syntacticEditKind ==
EditKind
.Move)
2486
GetDiagnosticSpan(newTypeDeclaration,
EditKind
.Update),
2509
if (syntacticEditKind ==
EditKind
.Update)
2513
syntacticEditKind =
EditKind
.Insert;
2517
syntacticEditKind =
EditKind
.Delete;
2531
if (containingType != null && (syntacticEditKind !=
EditKind
.Delete || newSymbol == null))
2563
if (syntacticEditKind !=
EditKind
.Delete && oldType != null && newType != null && IsReloadable(oldType))
2594
case
EditKind
.Delete:
2604
oldDeclaration, new[] { GetDisplayName(oldDeclaration,
EditKind
.Delete) }));
2698
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.Delete, diagnosticSpan, edit.OldNode, new[] { GetDisplayName(edit.OldNode!,
EditKind
.Delete) }));
2712
if (TryGetAssociatedMemberDeclaration(oldDeclaration,
EditKind
.Delete, out var oldAssociatedMemberDeclaration))
2714
if (HasEdit(editMap, oldAssociatedMemberDeclaration,
EditKind
.Delete))
2760
GetDisplayName(oldDeclaration,
EditKind
.Delete),
2770
case
EditKind
.Insert:
2779
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.Insert, GetDiagnosticSpan(newDeclaration,
EditKind
.Insert),
2780
newDeclaration, new[] { GetDisplayName(newDeclaration,
EditKind
.Insert) }));
2903
else if (TryGetAssociatedMemberDeclaration(newDeclaration,
EditKind
.Insert, out var newAssociatedMemberDeclaration) &&
2904
HasEdit(editMap, newAssociatedMemberDeclaration,
EditKind
.Insert))
2914
GetDiagnosticSpan(newDeclaration,
EditKind
.Insert),
2916
arguments: new[] { GetDisplayName(newDeclaration,
EditKind
.Insert) }));
2926
GetDiagnosticSpan(newDeclaration,
EditKind
.Insert),
2928
arguments: new[] { GetDisplayName(newDeclaration,
EditKind
.Insert) }));
2944
GetDiagnosticSpan(newDeclaration,
EditKind
.Insert),
2946
arguments: new[] { GetDisplayName(newDeclaration,
EditKind
.Insert) }));
2983
GetDiagnosticSpan(newDeclaration,
EditKind
.Insert),
2985
arguments: new[] { GetDisplayName(newDeclaration,
EditKind
.Insert) }));
3005
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.InsertConstructorToTypeWithInitializersWithLambdas, GetDiagnosticSpan(newDeclaration,
EditKind
.Insert)));
3030
case
EditKind
.Update:
3053
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.Update, GetDiagnosticSpan(newDeclaration,
EditKind
.Update),
3054
newDeclaration, new[] { GetDisplayName(newDeclaration,
EditKind
.Update) }));
3207
foreach (var (oldSymbol, newSymbol, editKind) in GetSymbolEdits(
EditKind
.Update, oldEditNode, newEditNode, oldModel, newModel, editMap, cancellationToken))
3551
private ImmutableArray<(ISymbol? oldSymbol, ISymbol? newSymbol,
EditKind
editKind)> GetNamespaceSymbolEdits(
3556
using var _1 = ArrayBuilder<(ISymbol? oldSymbol, ISymbol? newSymbol,
EditKind
editKind)>.GetInstance(out var builder);
3589
builder.Add((oldSymbol: oldType, newSymbol: null,
EditKind
.Delete));
3622
builder[deletedTypeIndex] = (builder[deletedTypeIndex].oldSymbol, newType,
EditKind
.Move);
3626
builder.Add((oldSymbol: null, newSymbol: newType,
EditKind
.Insert));
4381
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.ChangingNonCustomAttribute, GetDiagnosticSpan(node,
EditKind
.Update), node, new[]
4586
GetDiagnosticSpan(newNode,
EditKind
.Delete),
4597
GetDiagnosticSpan(newNode,
EditKind
.Update),
4605
var span = (rudeEdit == RudeEditKind.ChangeImplicitMainReturnType) ? GetGlobalStatementDiagnosticSpan(node) : GetDiagnosticSpan(node,
EditKind
.Update);
4719
GetDisplayName(syntax,
EditKind
.Insert),
4720
GetDisplayName(TryGetContainingTypeDeclaration(syntax)!,
EditKind
.Update)
4959
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.InsertConstructorToTypeWithInitializersWithLambdas, GetDiagnosticSpan(newDeclaration,
EditKind
.Insert)));
4988
GetDiagnosticSpan(newDeclaration,
EditKind
.Update),
5165
GetDiagnosticSpan(newQueryClause,
EditKind
.Update),
5167
new[] { GetDisplayName(newQueryClause,
EditKind
.Update) }));
5270
diagnostics.Add(new RudeEditDiagnostic(rudeEdit, GetDiagnosticSpan(GetLambda(newLambdaBody),
EditKind
.Update), null, arguments));
5331
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.InsertNotSupportedByRuntime, GetDiagnosticSpan(newLambda,
EditKind
.Insert), newLambda, new string[] { GetDisplayName(newLambda,
EditKind
.Insert) }));
5339
diagnostics.Add(new RudeEditDiagnostic(RudeEditKind.InsertLocalFunctionIntoInterfaceMethod, GetDiagnosticSpan(newLambda,
EditKind
.Insert), newLambda, new string[] { GetDisplayName(newLambda,
EditKind
.Insert) }));
5450
errorSpan = GetDiagnosticSpan(GetLambda(lambdaBody),
EditKind
.Insert);
5986
GetBodyDiagnosticSpan(newBody,
EditKind
.Update),
6096
internal void ReportTopLevelSyntacticRudeEdits(ArrayBuilder<RudeEditDiagnostic> diagnostics, EditScript<SyntaxNode> syntacticEdits, Dictionary<SyntaxNode,
EditKind
> editMap)
Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.UnitTests (2)
EditAndContinue\VisualBasicEditAndContinueAnalyzerTests.vb (2)
51
Dim actualSpan = VisualBasicEditAndContinueAnalyzer.TryGetDiagnosticSpanImpl(node.Kind, node,
EditKind
.Update).Value
111
span = VisualBasicEditAndContinueAnalyzer.TryGetDiagnosticSpanImpl(k, Nothing,
EditKind
.Update)
Microsoft.CodeAnalysis.VisualBasic.Features (56)
EditAndContinue\VisualBasicEditAndContinueAnalyzer.vb (56)
1046
Friend Overrides Function TryGetAssociatedMemberDeclaration(node As SyntaxNode, editKind As
EditKind
, <Out> ByRef declaration As SyntaxNode) As Boolean
1054
If editKind <>
EditKind
.Delete AndAlso node.IsParentKind(SyntaxKind.PropertyBlock, SyntaxKind.EventBlock) Then
1261
editKind As
EditKind
,
1266
editMap As IReadOnlyDictionary(Of SyntaxNode,
EditKind
),
1267
cancellationToken As CancellationToken) As OneOrMany(Of (oldSymbol As ISymbol, newSymbol As ISymbol, editKind As
EditKind
))
1273
Case
EditKind
.Reorder
1283
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1288
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1291
Return OneOrMany.Create((oldSymbols(0).ContainingSymbol, newSymbols(0).ContainingSymbol,
EditKind
.Update))
1292
Case
EditKind
.Delete
1294
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1297
Return oldSymbols.Select(Function(s) New ValueTuple(Of ISymbol, ISymbol,
EditKind
)(s, Nothing, editKind))
1299
Case
EditKind
.Insert
1301
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1304
Return newSymbols.Select(Function(s) New ValueTuple(Of ISymbol, ISymbol,
EditKind
)(Nothing, s, editKind))
1306
Case
EditKind
.Update
1309
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1319
Dim builder = ArrayBuilder(Of (ISymbol, ISymbol,
EditKind
)).GetInstance()
1329
Case
EditKind
.Move
1336
Return OneOrMany(Of (ISymbol, ISymbol,
EditKind
)).Empty
1348
editKind As
EditKind
,
1370
If editKind =
EditKind
.Update Then
1499
Protected Overrides Function TryGetDiagnosticSpan(node As SyntaxNode, editKind As
EditKind
) As TextSpan?
1503
Protected Overloads Shared Function GetDiagnosticSpan(node As SyntaxNode, editKind As
EditKind
) As TextSpan
1507
Private Shared Function TryGetDiagnosticSpanImpl(node As SyntaxNode, editKind As
EditKind
) As TextSpan?
1511
Protected Overrides Function GetBodyDiagnosticSpan(node As SyntaxNode, editKind As
EditKind
) As TextSpan
1516
Friend Shared Function TryGetDiagnosticSpanImpl(kind As SyntaxKind, node As SyntaxNode, editKind As
EditKind
) As TextSpan?
1608
If editKind =
EditKind
.Delete Then
1879
Protected Overrides Function TryGetDisplayName(node As SyntaxNode, editKind As
EditKind
) As String
1883
Protected Overloads Shared Function GetDisplayName(node As SyntaxNode, editKind As
EditKind
) As String
1893
Protected Overrides Function GetBodyDisplayName(node As SyntaxNode, Optional editKind As
EditKind
=
EditKind
.Update) As String
1897
Private Shared Function TryGetDisplayNameImpl(node As SyntaxNode, editKind As
EditKind
) As String
2034
Return If(editKind =
EditKind
.Update, VBFeaturesResources.Using_statement, VBFeaturesResources.Using_block)
2037
Return If(editKind =
EditKind
.Update, VBFeaturesResources.With_statement, VBFeaturesResources.With_block)
2040
Return If(editKind =
EditKind
.Update, VBFeaturesResources.SyncLock_statement, VBFeaturesResources.SyncLock_block)
2043
Return If(editKind =
EditKind
.Update, VBFeaturesResources.For_Each_statement, VBFeaturesResources.For_Each_block)
2129
Private ReadOnly _kind As
EditKind
2136
kind As
EditKind
,
2150
ReportError(kind, {GetDisplayName(If(_newNode, _oldNode),
EditKind
.Update)})
2158
_diagnostics.Add(New RudeEditDiagnostic(kind, GetDiagnosticSpan(spanNode, _kind), displayNode, {GetDisplayName(displayNode,
EditKind
.Update)}))
2175
Case
EditKind
.Delete
2179
Case
EditKind
.Update
2183
Case
EditKind
.Move
2187
Case
EditKind
.Insert
2191
Case
EditKind
.Reorder
2403
editMap As Dictionary(Of SyntaxNode,
EditKind
))
2410
If edit.Kind =
EditKind
.Delete AndAlso
2414
If HasEdit(editMap, edit.OldNode.Parent.Parent,
EditKind
.Delete) Then
2418
ElseIf edit.Kind =
EditKind
.Insert AndAlso
2422
If HasEdit(editMap, edit.NewNode.Parent.Parent,
EditKind
.Insert) Then
2435
Dim classifier = New EditClassifier(Me, diagnostics, Nothing, newMember,
EditKind
.Update, span:=span)
2459
GetDiagnosticSpan(newNode,
EditKind
.Insert),
2461
arguments:={GetDisplayName(newNode,
EditKind
.Insert)}))
2575
Debug.Assert(edit.Kind <>
EditKind
.Update OrElse edit.OldNode.RawKind = edit.NewNode.RawKind)
2577
If edit.Kind <>
EditKind
.Update OrElse Not AreExceptionHandlingPartsEquivalent(edit.OldNode, edit.NewNode) Then
Microsoft.CodeAnalysis.Workspaces (25)
Differencing\Edit.cs (10)
21
private readonly
EditKind
_kind;
25
internal Edit(
EditKind
kind, TreeComparer<TNode> comparer, TNode oldNode, TNode newNode)
27
Debug.Assert((oldNode == null || oldNode.Equals(null)) == (kind ==
EditKind
.Insert));
28
Debug.Assert((newNode == null || newNode.Equals(null)) == (kind ==
EditKind
.Delete));
40
public
EditKind
Kind => _kind;
98
case
EditKind
.Delete:
101
case
EditKind
.Insert:
104
case
EditKind
.Update:
107
case
EditKind
.Move:
108
case
EditKind
.Reorder:
Differencing\EditScript.cs (5)
98
edits.Add(new Edit<TNode>(
EditKind
.Insert, Comparer, oldNode: default, newNode: x));
117
edits.Add(new Edit<TNode>(
EditKind
.Update, Comparer, oldNode: w, newNode: x));
129
edits.Add(new Edit<TNode>(
EditKind
.Move, Comparer, oldNode: w, newNode: x));
159
edits.Add(new Edit<TNode>(
EditKind
.Delete, Comparer, oldNode: w, newNode: default));
239
edits.Add(new Edit<TNode>(
EditKind
.Reorder, Comparer, oldNode: a, newNode: b));
Differencing\SequenceEdit.cs (10)
33
/// The kind of edit: <see cref="
EditKind
.Delete"/>, <see cref="
EditKind
.Insert"/>, or <see cref="
EditKind
.Update"/>.
35
public
EditKind
Kind
41
return
EditKind
.Insert;
46
return
EditKind
.Delete;
49
return
EditKind
.Update;
80
case
EditKind
.Delete:
83
case
EditKind
.Insert:
86
case
EditKind
.Update:
Microsoft.CodeAnalysis.Workspaces.UnitTests (6)
Differencing\LongestCommonSubsequenceTests.cs (6)
52
Assert.True(edit.Kind is
EditKind
.Delete or
EditKind
.Insert or
EditKind
.Update);
55
case
EditKind
.Delete:
60
case
EditKind
.Insert:
65
case
EditKind
.Update: