diff --git a/src/Compilers/CSharp/Portable/Compilation/CSharpCompilation.cs b/src/Compilers/CSharp/Portable/Compilation/CSharpCompilation.cs index 82619d6989c06c77a31c1f86b03afbd46fd7fcae..c8aabdde90c365cdd86082c67b0d8c1efc7cd5f7 100644 --- a/src/Compilers/CSharp/Portable/Compilation/CSharpCompilation.cs +++ b/src/Compilers/CSharp/Portable/Compilation/CSharpCompilation.cs @@ -1698,34 +1698,23 @@ private AliasSymbol CreateGlobalNamespaceAlias() private void CompleteTree(SyntaxTree tree) { - bool completedCompilationUnit = false; - bool completedCompilation = false; - if (_lazyCompilationUnitCompletedTrees == null) Interlocked.CompareExchange(ref _lazyCompilationUnitCompletedTrees, new HashSet(), null); lock (_lazyCompilationUnitCompletedTrees) { if (_lazyCompilationUnitCompletedTrees.Add(tree)) { - completedCompilationUnit = true; + // signal the end of the compilation unit + EventQueue.TryEnqueue(new CompilationUnitCompletedEvent(this, tree)); + if (_lazyCompilationUnitCompletedTrees.Count == this.SyntaxTrees.Length) { - completedCompilation = true; + // if that was the last tree, signal the end of compilation + EventQueue.TryEnqueue(new CompilationCompletedEvent(this)); + EventQueue.PromiseNotToEnqueue(); + EventQueue.TryComplete(); } } } - - if (completedCompilationUnit) - { - EventQueue.TryEnqueue(new CompilationUnitCompletedEvent(this, tree)); - } - - if (completedCompilation) - { - // signal the end of compilation events - EventQueue.TryEnqueue(new CompilationCompletedEvent(this)); - EventQueue.PromiseNotToEnqueue(); - EventQueue.TryComplete(); - } } internal void ReportUnusedImports(DiagnosticBag diagnostics, CancellationToken cancellationToken, SyntaxTree filterTree = null) diff --git a/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb b/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb index 6f85986d5f09cbde3a11f3c7325038531c214e2f..15305add050dabd1fec1e87cb830583ed2a77499 100644 --- a/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb +++ b/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb @@ -1632,8 +1632,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic End If Debug.Assert(AllSyntaxTrees.Contains(tree)) - Dim completedCompilationUnit As Boolean = False - Dim completedCompilation As Boolean = False If _lazyCompilationUnitCompletedTrees Is Nothing Then Interlocked.CompareExchange(_lazyCompilationUnitCompletedTrees, New HashSet(Of SyntaxTree)(), Nothing) @@ -1641,22 +1639,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic SyncLock _lazyCompilationUnitCompletedTrees If _lazyCompilationUnitCompletedTrees.Add(tree) Then - completedCompilationUnit = True + ' signal the end of the compilation unit + EventQueue.TryEnqueue(New CompilationUnitCompletedEvent(Me, tree)) + If _lazyCompilationUnitCompletedTrees.Count = SyntaxTrees.Length Then - completedCompilation = True + ' if that was the last tree, signal the end of compilation + EventQueue.TryEnqueue(New CompilationCompletedEvent(Me)) + EventQueue.PromiseNotToEnqueue() + EventQueue.TryComplete() End If End If End SyncLock - - If completedCompilationUnit Then - EventQueue.TryEnqueue(New CompilationUnitCompletedEvent(Me, tree)) - End If - - If completedCompilation Then - EventQueue.TryEnqueue(New CompilationCompletedEvent(Me)) - EventQueue.PromiseNotToEnqueue() - EventQueue.TryComplete() ' signal the End Of compilation events - End If End Sub Friend Function ShouldAddEvent(symbol As Symbol) As Boolean