| File: Declarations\SingleTypeDeclaration.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 System.Collections.Immutable Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols Friend Class SingleTypeDeclaration Inherits SingleNamespaceOrTypeDeclaration Private ReadOnly _children As ImmutableArray(Of SingleTypeDeclaration) ' CONSIDER: It may be possible to merge the flags and arity into a single ' 32-bit quantity if space is needed. Private ReadOnly _kind As DeclarationKind Private ReadOnly _flags As TypeDeclarationFlags Private ReadOnly _arity As UShort Private ReadOnly _modifiers As DeclarationModifiers Public ReadOnly QuickAttributes As QuickAttributes Friend Enum TypeDeclarationFlags As Byte None = 0 HasAnyAttributes = 1 << 1 HasBaseDeclarations = 1 << 2 AnyMemberHasAttributes = 1 << 3 HasAnyNontypeMembers = 1 << 4 End Enum Public Sub New(kind As DeclarationKind, name As String, arity As Integer, modifiers As DeclarationModifiers, declFlags As TypeDeclarationFlags, syntaxReference As SyntaxReference, nameLocation As Location, memberNames As ImmutableHashSet(Of String), children As ImmutableArray(Of SingleTypeDeclaration), quickAttributes As QuickAttributes) MyBase.New(name, syntaxReference, nameLocation) Debug.Assert(kind <> DeclarationKind.Namespace) Me._kind = kind Me._arity = CUShort(arity) Me._flags = declFlags Me._modifiers = modifiers Me.MemberNames = memberNames Me._children = children Me.QuickAttributes = quickAttributes End Sub Public Overrides ReadOnly Property Kind As DeclarationKind Get Return Me._kind End Get End Property Public ReadOnly Property Arity As Integer Get Return _arity End Get End Property Public ReadOnly Property HasAnyAttributes As Boolean Get Return (_flags And TypeDeclarationFlags.HasAnyAttributes) <> 0 End Get End Property Public ReadOnly Property HasBaseDeclarations As Boolean Get Return (_flags And TypeDeclarationFlags.HasBaseDeclarations) <> 0 End Get End Property Public ReadOnly Property HasAnyNontypeMembers As Boolean Get Return (_flags And TypeDeclarationFlags.HasAnyNontypeMembers) <> 0 End Get End Property Public ReadOnly Property AnyMemberHasAttributes As Boolean Get Return (_flags And TypeDeclarationFlags.AnyMemberHasAttributes) <> 0 End Get End Property Public Overloads ReadOnly Property Children As ImmutableArray(Of SingleTypeDeclaration) Get Return _children End Get End Property Public ReadOnly Property Modifiers As DeclarationModifiers Get Return Me._modifiers End Get End Property Public ReadOnly Property MemberNames As ImmutableHashSet(Of String) Protected Overrides Function GetNamespaceOrTypeDeclarationChildren() As ImmutableArray(Of SingleNamespaceOrTypeDeclaration) Return StaticCast(Of SingleNamespaceOrTypeDeclaration).From(_children) End Function Private Function GetEmbeddedSymbolKind() As EmbeddedSymbolKind Return SyntaxReference.SyntaxTree.GetEmbeddedKind() End Function Private NotInheritable Class Comparer Implements IEqualityComparer(Of SingleTypeDeclaration) Private Shadows Function Equals(decl1 As SingleTypeDeclaration, decl2 As SingleTypeDeclaration) As Boolean Implements IEqualityComparer(Of SingleTypeDeclaration).Equals ' We should not merge types across embedded code / user code boundary. Return IdentifierComparison.Equals(decl1.Name, decl2.Name) _ AndAlso decl1.Kind = decl2.Kind _ AndAlso decl1.Kind <> DeclarationKind.Enum _ AndAlso decl1.Arity = decl2.Arity _ AndAlso decl1.GetEmbeddedSymbolKind() = decl2.GetEmbeddedSymbolKind() End Function Private Shadows Function GetHashCode(decl1 As SingleTypeDeclaration) As Integer Implements IEqualityComparer(Of SingleTypeDeclaration).GetHashCode Return Hash.Combine(IdentifierComparison.GetHashCode(decl1.Name), Hash.Combine(decl1.Arity.GetHashCode(), CType(decl1.Kind, Integer))) End Function End Class Public Shared ReadOnly EqualityComparer As IEqualityComparer(Of SingleTypeDeclaration) = New Comparer() End Class End Namespace