@@ -55,7 +55,11 @@ private enum State {
55
55
56
56
private readonly DocumentBuffer _buffer = new DocumentBuffer ( ) ;
57
57
private readonly DisposeToken _disposeToken = DisposeToken . Create < PythonModule > ( ) ;
58
+ < << << << HEAD
58
59
private readonly object _syncObj = new object ( ) ;
60
+ = == == ==
61
+ private readonly object _analysisLock = new object ( ) ;
62
+ > >>> >>> Multiple analysis fixes .
59
63
private IReadOnlyList < DiagnosticsEntry > _parseErrors = Array. Empty < DiagnosticsEntry > ( ) ;
60
64
private readonly Dictionary < object , Node > _astMap = new Dictionary < object , Node > ( ) ;
61
65
private readonly IDiagnosticsService _diagnosticsService ;
@@ -252,7 +256,11 @@ public string Content {
252
256
public async Task < PythonAst > GetAstAsync ( CancellationToken cancellationToken = default ) {
253
257
Task t = null ;
254
258
while ( true ) {
259
+ < << << << HEAD
255
260
lock ( _syncObj ) {
261
+ = == == ==
262
+ lock ( _analysisLock ) {
263
+ > >>> >>> Multiple analysis fixes.
256
264
if ( t == _parsingTask ) {
257
265
break ;
258
266
}
@@ -276,7 +284,11 @@ public async Task<PythonAst> GetAstAsync(CancellationToken cancellationToken = d
276
284
public IEnumerable < DiagnosticsEntry > GetParseErrors ( ) => _parseErrors . ToArray ( ) ;
277
285
278
286
public void Update ( IEnumerable < DocumentChange > changes ) {
287
+ < << << << HEAD
279
288
lock ( _syncObj ) {
289
+ = == == ==
290
+ lock ( _analysisLock ) {
291
+ > >>> >>> Multiple analysis fixes .
280
292
_parseCts ? . Cancel ( ) ;
281
293
_parseCts = new CancellationTokenSource ( ) ;
282
294
@@ -293,7 +305,11 @@ public void Update(IEnumerable<DocumentChange> changes) {
293
305
}
294
306
295
307
public void Reset ( string content ) {
308
+ < << << << HEAD
296
309
lock ( _syncObj ) {
310
+ = == == ==
311
+ lock ( _analysisLock ) {
312
+ > >>> >>> Multiple analysis fixes.
297
313
if ( content != Content ) {
298
314
ContentState = State . None ;
299
315
InitializeContent ( content , _buffer . Version + 1 ) ;
@@ -321,7 +337,11 @@ private void Parse(CancellationToken cancellationToken) {
321
337
322
338
//Log?.Log(TraceEventType.Verbose, $"Parse begins: {Name}");
323
339
340
+ < << << << HEAD
324
341
lock ( _syncObj ) {
342
+ = == == ==
343
+ lock ( _analysisLock ) {
344
+ > >>> >>> Multiple analysis fixes .
325
345
version = _buffer . Version ;
326
346
var options = new ParserOptions {
327
347
StubFile = FilePath != null && Path . GetExtension ( FilePath ) . Equals ( ".pyi" , FileSystem . StringComparison )
@@ -337,7 +357,11 @@ private void Parse(CancellationToken cancellationToken) {
337
357
338
358
//Log?.Log(TraceEventType.Verbose, $"Parse complete: {Name}");
339
359
360
+ < << << << HEAD
340
361
lock ( _syncObj ) {
362
+ = == == ==
363
+ lock ( _analysisLock ) {
364
+ > >>> >>> Multiple analysis fixes .
341
365
cancellationToken . ThrowIfCancellationRequested ( ) ;
342
366
if ( version != _buffer . Version ) {
343
367
throw new OperationCanceledException ( ) ;
@@ -367,7 +391,11 @@ private void Parse(CancellationToken cancellationToken) {
367
391
analyzer . EnqueueDocumentForAnalysis ( this , ast , version ) ;
368
392
}
369
393
394
+ < << << << HEAD
370
395
lock ( _syncObj ) {
396
+ = == == ==
397
+ lock ( _analysisLock ) {
398
+ > >>> >>> Multiple analysis fixes .
371
399
_parsingTask = null ;
372
400
}
373
401
}
@@ -384,7 +412,11 @@ public override void Add(string message, SourceSpan span, int errorCode, Severit
384
412
#region IAnalyzable
385
413
386
414
public void NotifyAnalysisBegins ( ) {
415
+ < << << << HEAD
387
416
lock ( _syncObj ) {
417
+ = == == ==
418
+ lock ( _analysisLock ) {
419
+ > >>> >>> Multiple analysis fixes.
388
420
if ( _updated ) {
389
421
_updated = false ;
390
422
// In all variables find those imported, then traverse imported modules
@@ -412,7 +444,11 @@ public void NotifyAnalysisBegins() {
412
444
}
413
445
414
446
public void NotifyAnalysisComplete ( IDocumentAnalysis analysis ) {
447
+ < << << << HEAD
415
448
lock ( _syncObj ) {
449
+ = == == ==
450
+ lock ( _analysisLock ) {
451
+ > >>> >>> Multiple analysis fixes.
416
452
if ( analysis . Version < Analysis . Version ) {
417
453
return ;
418
454
}
@@ -448,20 +484,32 @@ protected virtual void OnAnalysisComplete() { }
448
484
449
485
#region IAstNodeContainer
450
486
public Node GetAstNode ( object o ) {
487
+ < << << << HEAD
451
488
lock ( _syncObj ) {
489
+ = == == ==
490
+ lock ( _analysisLock ) {
491
+ > >>> >>> Multiple analysis fixes.
452
492
return _astMap . TryGetValue ( o , out var n ) ? n : null ;
453
493
}
454
494
}
455
495
456
496
public void AddAstNode ( object o , Node n ) {
497
+ < << << << HEAD
457
498
lock ( _syncObj ) {
499
+ = == == ==
500
+ lock ( _analysisLock ) {
501
+ > >>> >>> Multiple analysis fixes .
458
502
Debug . Assert ( ! _astMap . ContainsKey ( o ) || _astMap [ o ] == n ) ;
459
503
_astMap [ o ] = n ;
460
504
}
461
505
}
462
506
463
507
public void ClearContent ( ) {
508
+ < << << << HEAD
464
509
lock ( _syncObj ) {
510
+ = == == ==
511
+ lock ( _analysisLock ) {
512
+ > >>> >>> Multiple analysis fixes.
465
513
if ( ModuleType != ModuleType . User ) {
466
514
_buffer . Reset ( _buffer . Version , string . Empty ) ;
467
515
_astMap . Clear ( ) ;
@@ -492,7 +540,11 @@ protected virtual string LoadContent() {
492
540
}
493
541
494
542
private void InitializeContent ( string content , int version ) {
543
+ < << << << HEAD
495
544
lock ( _syncObj ) {
545
+ = == == ==
546
+ lock ( _analysisLock ) {
547
+ > >>> >>> Multiple analysis fixes .
496
548
LoadContent ( content , version ) ;
497
549
498
550
var startParse = ContentState < State . Parsing && ( _parsingTask == null || version > 0 ) ;
0 commit comments