@@ -18,8 +18,6 @@ public class SyntaxEditor
1818 {
1919 private readonly SyntaxGenerator _generator ;
2020 private readonly List < Change > _changes = new ( ) ;
21- private bool _allowEditsOnLazilyCreatedTrackedNewNodes ;
22- private HashSet < SyntaxNode > ? _lazyTrackedNewNodesOpt ;
2321
2422 /// <summary>
2523 /// Creates a new <see cref="SyntaxEditor"/> instance.
@@ -53,32 +51,6 @@ internal SyntaxEditor(SyntaxNode root, SyntaxGenerator generator)
5351 _generator = generator ;
5452 }
5553
56- [ return : NotNullIfNotNull ( nameof ( node ) ) ]
57- private SyntaxNode ? ApplyTrackingToNewNode ( SyntaxNode ? node )
58- {
59- if ( node == null )
60- {
61- return null ;
62- }
63-
64- _lazyTrackedNewNodesOpt ??= new HashSet < SyntaxNode > ( ) ;
65- foreach ( var descendant in node . DescendantNodesAndSelf ( ) )
66- {
67- _lazyTrackedNewNodesOpt . Add ( descendant ) ;
68- }
69-
70- return node . TrackNodes ( node . DescendantNodesAndSelf ( ) ) ;
71- }
72-
73- private IEnumerable < SyntaxNode > ApplyTrackingToNewNodes ( IEnumerable < SyntaxNode > nodes )
74- {
75- foreach ( var node in nodes )
76- {
77- var result = ApplyTrackingToNewNode ( node ) ;
78- yield return result ;
79- }
80- }
81-
8254 /// <summary>
8355 /// The <see cref="SyntaxNode"/> that was specified when the <see cref="SyntaxEditor"/> was constructed.
8456 /// </summary>
@@ -99,9 +71,7 @@ public SyntaxNode GetChangedRoot()
9971 var newRoot = OriginalRoot . TrackNodes ( nodes ) ;
10072
10173 foreach ( var change in _changes )
102- {
10374 newRoot = change . Apply ( newRoot , _generator ) ;
104- }
10575
10676 return newRoot ;
10777 }
@@ -143,36 +113,27 @@ public void ReplaceNode(SyntaxNode node, Func<SyntaxNode, SyntaxGenerator, Synta
143113 {
144114 CheckNodeInOriginalTreeOrTracked ( node ) ;
145115 if ( computeReplacement == null )
146- {
147116 throw new ArgumentNullException ( nameof ( computeReplacement ) ) ;
148- }
149117
150- _allowEditsOnLazilyCreatedTrackedNewNodes = true ;
151- _changes . Add ( new ReplaceChange ( node , computeReplacement , this ) ) ;
118+ _changes . Add ( new ReplaceChange ( node , computeReplacement ) ) ;
152119 }
153120
154121 internal void ReplaceNode ( SyntaxNode node , Func < SyntaxNode , SyntaxGenerator , IEnumerable < SyntaxNode > > computeReplacement )
155122 {
156123 CheckNodeInOriginalTreeOrTracked ( node ) ;
157124 if ( computeReplacement == null )
158- {
159125 throw new ArgumentNullException ( nameof ( computeReplacement ) ) ;
160- }
161126
162- _allowEditsOnLazilyCreatedTrackedNewNodes = true ;
163- _changes . Add ( new ReplaceWithCollectionChange ( node , computeReplacement , this ) ) ;
127+ _changes . Add ( new ReplaceWithCollectionChange ( node , computeReplacement ) ) ;
164128 }
165129
166130 internal void ReplaceNode < TArgument > ( SyntaxNode node , Func < SyntaxNode , SyntaxGenerator , TArgument , SyntaxNode > computeReplacement , TArgument argument )
167131 {
168132 CheckNodeInOriginalTreeOrTracked ( node ) ;
169133 if ( computeReplacement == null )
170- {
171134 throw new ArgumentNullException ( nameof ( computeReplacement ) ) ;
172- }
173135
174- _allowEditsOnLazilyCreatedTrackedNewNodes = true ;
175- _changes . Add ( new ReplaceChange < TArgument > ( node , computeReplacement , argument , this ) ) ;
136+ _changes . Add ( new ReplaceChange < TArgument > ( node , computeReplacement , argument ) ) ;
176137 }
177138
178139 /// <summary>
@@ -184,12 +145,9 @@ public void ReplaceNode(SyntaxNode node, SyntaxNode newNode)
184145 {
185146 CheckNodeInOriginalTreeOrTracked ( node ) ;
186147 if ( node == newNode )
187- {
188148 return ;
189- }
190149
191- newNode = ApplyTrackingToNewNode ( newNode ) ;
192- _changes . Add ( new ReplaceChange ( node , ( n , g ) => newNode , this ) ) ;
150+ _changes . Add ( new ReplaceChange ( node , ( n , g ) => newNode ) ) ;
193151 }
194152
195153 /// <summary>
@@ -201,11 +159,8 @@ public void InsertBefore(SyntaxNode node, IEnumerable<SyntaxNode> newNodes)
201159 {
202160 CheckNodeInOriginalTreeOrTracked ( node ) ;
203161 if ( newNodes == null )
204- {
205162 throw new ArgumentNullException ( nameof ( newNodes ) ) ;
206- }
207163
208- newNodes = ApplyTrackingToNewNodes ( newNodes ) ;
209164 _changes . Add ( new InsertChange ( node , newNodes , isBefore : true ) ) ;
210165 }
211166
@@ -226,11 +181,8 @@ public void InsertAfter(SyntaxNode node, IEnumerable<SyntaxNode> newNodes)
226181 {
227182 CheckNodeInOriginalTreeOrTracked ( node ) ;
228183 if ( newNodes == null )
229- {
230184 throw new ArgumentNullException ( nameof ( newNodes ) ) ;
231- }
232185
233- newNodes = ApplyTrackingToNewNodes ( newNodes ) ;
234186 _changes . Add ( new InsertChange ( node , newNodes , isBefore : false ) ) ;
235187 }
236188
@@ -245,30 +197,10 @@ public void InsertAfter(SyntaxNode node, SyntaxNode newNode)
245197 private void CheckNodeInOriginalTreeOrTracked ( SyntaxNode node )
246198 {
247199 if ( node == null )
248- {
249200 throw new ArgumentNullException ( nameof ( node ) ) ;
250- }
251201
252202 if ( OriginalRoot . Contains ( node ) )
253- {
254- // Node is contained in the original tree.
255- return ;
256- }
257-
258- if ( _allowEditsOnLazilyCreatedTrackedNewNodes )
259- {
260- // This could be a node that is handed to us lazily from one of the prior edits
261- // which support lazy replacement nodes, we conservatively avoid throwing here.
262- // If this was indeed an unsupported node, syntax editor will throw an exception later
263- // when attempting to compute changed root.
264203 return ;
265- }
266-
267- if ( _lazyTrackedNewNodesOpt ? . Contains ( node ) == true )
268- {
269- // Node is one of the new nodes, which is already tracked and supported.
270- return ;
271- }
272204
273205 throw new ArgumentException ( WorkspacesResources . The_node_is_not_part_of_the_tree , nameof ( node ) ) ;
274206 }
@@ -284,9 +216,7 @@ public SyntaxNode Apply(SyntaxNode root, SyntaxGenerator generator)
284216 {
285217 var currentNode = root . GetCurrentNode ( OriginalNode ) ;
286218 if ( currentNode is null )
287- {
288219 Contract . Fail ( $ "GetCurrentNode returned null with the following node: { OriginalNode } ") ;
289- }
290220
291221 return Apply ( root , currentNode , generator ) ;
292222 }
@@ -325,78 +255,53 @@ protected override SyntaxNode Apply(SyntaxNode root, SyntaxNode currentNode, Syn
325255 private sealed class ReplaceChange : Change
326256 {
327257 private readonly Func < SyntaxNode , SyntaxGenerator , SyntaxNode ? > _modifier ;
328- private readonly SyntaxEditor _editor ;
329258
330259 public ReplaceChange (
331260 SyntaxNode node ,
332- Func < SyntaxNode , SyntaxGenerator , SyntaxNode ? > modifier ,
333- SyntaxEditor editor )
261+ Func < SyntaxNode , SyntaxGenerator , SyntaxNode ? > modifier )
334262 : base ( node )
335263 {
336264 Contract . ThrowIfNull ( node ) ;
337265 _modifier = modifier ;
338- _editor = editor ;
339266 }
340267
341268 protected override SyntaxNode Apply ( SyntaxNode root , SyntaxNode currentNode , SyntaxGenerator generator )
342- {
343- var newNode = _modifier ( currentNode , generator ) ;
344- newNode = _editor . ApplyTrackingToNewNode ( newNode ) ;
345- return ValidateNewRoot ( generator . ReplaceNode ( root , currentNode , newNode ) ) ;
346- }
269+ => ValidateNewRoot ( generator . ReplaceNode ( root , currentNode , _modifier ( currentNode , generator ) ) ) ;
347270 }
348271
349272 private sealed class ReplaceWithCollectionChange : Change
350273 {
351274 private readonly Func < SyntaxNode , SyntaxGenerator , IEnumerable < SyntaxNode > > _modifier ;
352- private readonly SyntaxEditor _editor ;
353275
354276 public ReplaceWithCollectionChange (
355277 SyntaxNode node ,
356- Func < SyntaxNode , SyntaxGenerator , IEnumerable < SyntaxNode > > modifier ,
357- SyntaxEditor editor )
278+ Func < SyntaxNode , SyntaxGenerator , IEnumerable < SyntaxNode > > modifier )
358279 : base ( node )
359280 {
360281 _modifier = modifier ;
361- _editor = editor ;
362282 }
363283
364284 protected override SyntaxNode Apply ( SyntaxNode root , SyntaxNode currentNode , SyntaxGenerator generator )
365- {
366- var newNodes = _modifier ( currentNode , generator ) . ToList ( ) ;
367- for ( var i = 0 ; i < newNodes . Count ; i ++ )
368- {
369- newNodes [ i ] = _editor . ApplyTrackingToNewNode ( newNodes [ i ] ) ;
370- }
371-
372- return SyntaxGenerator . ReplaceNode ( root , currentNode , newNodes ) ;
373- }
285+ => SyntaxGenerator . ReplaceNode ( root , currentNode , _modifier ( currentNode , generator ) ) ;
374286 }
375287
376288 private sealed class ReplaceChange < TArgument > : Change
377289 {
378290 private readonly Func < SyntaxNode , SyntaxGenerator , TArgument , SyntaxNode > _modifier ;
379291 private readonly TArgument _argument ;
380- private readonly SyntaxEditor _editor ;
381292
382293 public ReplaceChange (
383294 SyntaxNode node ,
384295 Func < SyntaxNode , SyntaxGenerator , TArgument , SyntaxNode > modifier ,
385- TArgument argument ,
386- SyntaxEditor editor )
296+ TArgument argument )
387297 : base ( node )
388298 {
389299 _modifier = modifier ;
390300 _argument = argument ;
391- _editor = editor ;
392301 }
393302
394303 protected override SyntaxNode Apply ( SyntaxNode root , SyntaxNode currentNode , SyntaxGenerator generator )
395- {
396- var newNode = _modifier ( currentNode , generator , _argument ) ;
397- newNode = _editor . ApplyTrackingToNewNode ( newNode ) ;
398- return ValidateNewRoot ( generator . ReplaceNode ( root , currentNode , newNode ) ) ;
399- }
304+ => ValidateNewRoot ( generator . ReplaceNode ( root , currentNode , _modifier ( currentNode , generator , _argument ) ) ) ;
400305 }
401306
402307 private sealed class InsertChange : Change
0 commit comments