| File: Symbols\CustomModifier.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 Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols ''' <summary> ''' Represents a custom modifier (modopt/modreq). ''' </summary> Partial Friend MustInherit Class VisualBasicCustomModifier Inherits CustomModifier Protected ReadOnly m_Modifier As NamedTypeSymbol Private Sub New(modifier As NamedTypeSymbol) Debug.Assert(modifier IsNot Nothing) Me.m_Modifier = modifier End Sub ''' <summary> ''' A type used as a tag that indicates which type of modification applies. ''' </summary> Public Overrides ReadOnly Property Modifier As INamedTypeSymbol Get Return m_Modifier End Get End Property Public ReadOnly Property ModifierSymbol As NamedTypeSymbol Get Return m_Modifier End Get End Property Public MustOverride Overrides Function GetHashCode() As Integer Public MustOverride Overrides Function Equals(obj As Object) As Boolean Friend Shared Function CreateOptional(modifier As NamedTypeSymbol) As CustomModifier Return New OptionalCustomModifier(modifier) End Function Friend Shared Function CreateRequired(modifier As NamedTypeSymbol) As CustomModifier Return New RequiredCustomModifier(modifier) End Function Friend Shared Function Convert(customModifiers As ImmutableArray(Of ModifierInfo(Of TypeSymbol))) As ImmutableArray(Of CustomModifier) If customModifiers.IsDefault Then Return ImmutableArray(Of CustomModifier).Empty End If Return customModifiers.SelectAsArray(AddressOf Convert) End Function Private Shared Function Convert(customModifier As ModifierInfo(Of TypeSymbol)) As CustomModifier Dim modifier = DirectCast(customModifier.Modifier, NamedTypeSymbol) Return If(customModifier.IsOptional, CreateOptional(modifier), CreateRequired(modifier)) End Function Private Class OptionalCustomModifier Inherits VisualBasicCustomModifier Public Sub New(modifier As NamedTypeSymbol) MyBase.New(modifier) End Sub Public Overrides ReadOnly Property IsOptional As Boolean Get Return True End Get End Property Public Overrides Function GetHashCode() As Integer Return m_Modifier.GetHashCode() End Function Public Overrides Function Equals(obj As Object) As Boolean If obj Is Me Then Return True End If Dim other = TryCast(obj, OptionalCustomModifier) Return other IsNot Nothing AndAlso other.m_Modifier.Equals(m_Modifier) End Function End Class Private Class RequiredCustomModifier Inherits VisualBasicCustomModifier Public Sub New(modifier As NamedTypeSymbol) MyBase.New(modifier) End Sub Public Overrides ReadOnly Property IsOptional As Boolean Get Return False End Get End Property Public Overrides Function GetHashCode() As Integer Return m_Modifier.GetHashCode() End Function Public Overrides Function Equals(obj As Object) As Boolean If obj Is Me Then Return True End If Dim other = TryCast(obj, RequiredCustomModifier) Return other IsNot Nothing AndAlso other.m_Modifier.Equals(m_Modifier) End Function End Class End Class End Namespace