File: IncrementalParser\SyntaxDifferences.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Syntax\Microsoft.CodeAnalysis.VisualBasic.Syntax.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Syntax.UnitTests)
' Licensed to the .NET Foundation under one or more agreements.
' The .NET Foundation licenses this file to you under the MIT license.
' See the LICENSE file in the project root for more information.
 
Imports System.Collections.Generic
Imports System.Collections.Immutable
Imports Microsoft.CodeAnalysis.PooledObjects
Imports Microsoft.CodeAnalysis.Text
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
 
Friend Module SyntaxDifferences
 
    Public Function GetRebuiltNodes(oldTree As SyntaxTree, newTree As SyntaxTree) As ImmutableArray(Of SyntaxNodeOrToken)
        Dim hashSet = New HashSet(Of GreenNode)
        GatherNodes(oldTree.GetRoot(), hashSet)
 
        Dim nodes = ArrayBuilder(Of SyntaxNodeOrToken).GetInstance()
        GetRebuiltNodes(newTree.GetRoot(), hashSet, nodes)
        Return nodes.ToImmutableAndFree()
    End Function
 
    Private Sub GetRebuiltNodes(newNode As SyntaxNodeOrToken, hashSet As HashSet(Of GreenNode), nodes As ArrayBuilder(Of SyntaxNodeOrToken))
        If hashSet.Contains(newNode.UnderlyingNode) Then
            Return
        End If
 
        nodes.Add(newNode)
 
        For Each child In newNode.ChildNodesAndTokens()
            GetRebuiltNodes(child, hashSet, nodes)
        Next
    End Sub
 
    Private Sub GatherNodes(node As SyntaxNodeOrToken, hashSet As HashSet(Of GreenNode))
        hashSet.Add(node.UnderlyingNode)
 
        For Each child In node.ChildNodesAndTokens()
            GatherNodes(child, hashSet)
        Next
    End Sub
 
End Module