| File: Compilation\LexicalOrderSymbolComparer.vb | Web Access |
| Project: src\roslyn\src\Compilers\VisualBasic\Portable\Microsoft.CodeAnalysis.VisualBasic.vbproj (Microsoft.CodeAnalysis.VisualBasic) |
' 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 Microsoft.CodeAnalysis.VisualBasic.Symbols Namespace Microsoft.CodeAnalysis.VisualBasic ''' <summary> ''' This is an implementation of a special symbol comparer, which is supposed to be used for ''' sorting original definition symbols (explicitly or explicitly declared in source within the same ''' container) in lexical order of their declarations. It will not work on anything that uses non-source locations. ''' </summary> Friend Class LexicalOrderSymbolComparer Implements IComparer(Of Symbol) Public Shared ReadOnly Instance As New LexicalOrderSymbolComparer() Private Sub New() End Sub Public Function Compare(x As Symbol, y As Symbol) As Integer Implements IComparer(Of Symbol).Compare Dim comparison As Integer If x Is y Then Return 0 End If Dim xSortKey = x.GetLexicalSortKey() Dim ySortKey = y.GetLexicalSortKey() comparison = LexicalSortKey.Compare(xSortKey, ySortKey) If comparison <> 0 Then Return comparison End If comparison = DirectCast(x, ISymbol).Kind.ToSortOrder() - DirectCast(y, ISymbol).Kind.ToSortOrder() If comparison <> 0 Then Return comparison End If comparison = IdentifierComparison.Compare(x.Name, y.Name) Debug.Assert(comparison <> 0) Return comparison End Function End Class End Namespace