File: Symbols\Retargeting\RetargetingParameterSymbol.vb
Web Access
Project: src\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 System.Globalization
Imports System.Threading
Imports Microsoft.CodeAnalysis.VisualBasic.Emit
 
Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Retargeting
 
    ''' <summary>
    ''' Represents a parameter of a RetargetingMethodSymbol. Essentially this is a wrapper around 
    ''' another ParameterSymbol that is responsible for retargeting symbols from one assembly to another. 
    ''' It can retarget symbols for multiple assemblies at the same time.
    ''' </summary>
    Friend MustInherit Class RetargetingParameterSymbol
        Inherits ParameterSymbol
 
        ''' <summary>
        ''' The underlying ParameterSymbol, cannot be another RetargetingParameterSymbol.
        ''' </summary>
        Private ReadOnly _underlyingParameter As ParameterSymbol
 
        Private _lazyCustomModifiers As CustomModifiersTuple
 
        ''' <summary>
        ''' Retargeted custom attributes
        ''' </summary>
        ''' <remarks></remarks>
        Private _lazyCustomAttributes As ImmutableArray(Of VisualBasicAttributeData)
 
        Public Shared Function CreateMethodParameter(retargetingMethod As RetargetingMethodSymbol, underlyingParameter As ParameterSymbol) As RetargetingParameterSymbol
            Return New RetargetingMethodParameterSymbol(retargetingMethod, underlyingParameter)
        End Function
 
        Public Shared Function CreatePropertyParameter(retargetingProperty As RetargetingPropertySymbol, underlyingParameter As ParameterSymbol) As RetargetingParameterSymbol
            Return New RetargetingPropertyParameterSymbol(retargetingProperty, underlyingParameter)
        End Function
 
        Protected Sub New(underlyingParameter As ParameterSymbol)
 
            Debug.Assert(underlyingParameter IsNot Nothing)
 
            If TypeOf underlyingParameter Is RetargetingParameterSymbol Then
                Throw New ArgumentException()
            End If
 
            _underlyingParameter = underlyingParameter
        End Sub
 
        Public ReadOnly Property UnderlyingParameter As ParameterSymbol
            Get
                Return _underlyingParameter
            End Get
        End Property
 
        Protected MustOverride ReadOnly Property RetargetingModule As RetargetingModuleSymbol
 
        Private ReadOnly Property RetargetingTranslator As RetargetingModuleSymbol.RetargetingSymbolTranslator
            Get
                Return RetargetingModule.RetargetingTranslator
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsImplicitlyDeclared As Boolean
            Get
                Return _underlyingParameter.IsImplicitlyDeclared
            End Get
        End Property
 
        Public Overrides ReadOnly Property Type As TypeSymbol
            Get
                Return RetargetingTranslator.Retarget(_underlyingParameter.Type, RetargetOptions.RetargetPrimitiveTypesByTypeCode)
            End Get
        End Property
 
        Public Overrides ReadOnly Property CustomModifiers As ImmutableArray(Of CustomModifier)
            Get
                Return CustomModifiersTuple.TypeCustomModifiers
            End Get
        End Property
 
        Public Overrides ReadOnly Property RefCustomModifiers As ImmutableArray(Of CustomModifier)
            Get
                Return CustomModifiersTuple.RefCustomModifiers
            End Get
        End Property
 
        Private ReadOnly Property CustomModifiersTuple As CustomModifiersTuple
            Get
                Return RetargetingTranslator.RetargetModifiers(_underlyingParameter.CustomModifiers, _underlyingParameter.RefCustomModifiers, _lazyCustomModifiers)
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsParamArray As Boolean
            Get
                Return _underlyingParameter.IsParamArray
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsByRef As Boolean
            Get
                Return _underlyingParameter.IsByRef
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsExplicitByRef As Boolean
            Get
                Return _underlyingParameter.IsExplicitByRef
            End Get
        End Property
 
        Public Overrides ReadOnly Property Ordinal As Integer
            Get
                Return _underlyingParameter.Ordinal
            End Get
        End Property
 
        Public Overrides ReadOnly Property IsOptional As Boolean
            Get
                Return _underlyingParameter.IsOptional
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsMetadataOut As Boolean
            Get
                Return _underlyingParameter.IsMetadataOut
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsMetadataIn As Boolean
            Get
                Return _underlyingParameter.IsMetadataIn
            End Get
        End Property
 
        Public Overrides ReadOnly Property HasExplicitDefaultValue As Boolean
            Get
                Return _underlyingParameter.HasExplicitDefaultValue
            End Get
        End Property
 
        Friend Overrides ReadOnly Property ExplicitDefaultConstantValue(inProgress As SymbolsInProgress(Of ParameterSymbol)) As ConstantValue
            Get
                Return _underlyingParameter.ExplicitDefaultConstantValue(inProgress)
            End Get
        End Property
 
        Friend Overrides ReadOnly Property MarshallingInformation As MarshalPseudoCustomAttributeData
            Get
                Return Me.RetargetingTranslator.Retarget(Me.UnderlyingParameter.MarshallingInformation)
            End Get
        End Property
 
        Friend Overrides ReadOnly Property HasOptionCompare As Boolean
            Get
                Return _underlyingParameter.HasOptionCompare
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsIDispatchConstant As Boolean
            Get
                Return _underlyingParameter.IsIDispatchConstant
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsIUnknownConstant As Boolean
            Get
                Return _underlyingParameter.IsIUnknownConstant
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsCallerLineNumber As Boolean
            Get
                Return _underlyingParameter.IsCallerLineNumber
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsCallerMemberName As Boolean
            Get
                Return _underlyingParameter.IsCallerMemberName
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsCallerFilePath As Boolean
            Get
                Return _underlyingParameter.IsCallerFilePath
            End Get
        End Property
 
        Friend NotOverridable Overrides ReadOnly Property CallerArgumentExpressionParameterIndex As Integer
            Get
                Return _underlyingParameter.CallerArgumentExpressionParameterIndex
            End Get
        End Property
 
        Public Overrides ReadOnly Property ContainingSymbol As Symbol
            Get
                Return RetargetingTranslator.Retarget(_underlyingParameter.ContainingSymbol)
            End Get
        End Property
 
        Public Overrides ReadOnly Property Locations As ImmutableArray(Of Location)
            Get
                Return _underlyingParameter.Locations
            End Get
        End Property
 
        Public Overrides ReadOnly Property DeclaringSyntaxReferences As ImmutableArray(Of SyntaxReference)
            Get
                Return _underlyingParameter.DeclaringSyntaxReferences
            End Get
        End Property
 
        Public Overrides Function GetAttributes() As ImmutableArray(Of VisualBasicAttributeData)
            Return RetargetingTranslator.GetRetargetedAttributes(_underlyingParameter, _lazyCustomAttributes)
        End Function
 
        Friend Overrides Function GetCustomAttributesToEmit(moduleBuilder As PEModuleBuilder) As IEnumerable(Of VisualBasicAttributeData)
            Return RetargetingTranslator.RetargetAttributes(_underlyingParameter.GetCustomAttributesToEmit(moduleBuilder))
        End Function
 
        Public Overrides ReadOnly Property ContainingAssembly As AssemblySymbol
            Get
                Return RetargetingModule.ContainingAssembly
            End Get
        End Property
 
        Public Overrides ReadOnly Property ContainingModule As ModuleSymbol
            Get
                Return RetargetingModule
            End Get
        End Property
 
        Public Overrides ReadOnly Property Name As String
            Get
                Return _underlyingParameter.Name
            End Get
        End Property
 
        Public Overrides ReadOnly Property MetadataName As String
            Get
                Return _underlyingParameter.MetadataName
            End Get
        End Property
 
        Friend Overrides ReadOnly Property HasMetadataConstantValue As Boolean
            Get
                Return _underlyingParameter.HasMetadataConstantValue
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsMetadataOptional As Boolean
            Get
                Return _underlyingParameter.IsMetadataOptional
            End Get
        End Property
 
        Friend Overrides ReadOnly Property IsMarshalledExplicitly As Boolean
            Get
                Return _underlyingParameter.IsMarshalledExplicitly
            End Get
        End Property
 
        Friend Overrides ReadOnly Property MarshallingDescriptor As ImmutableArray(Of Byte)
            Get
                Return _underlyingParameter.MarshallingDescriptor
            End Get
        End Property
 
        Private NotInheritable Class RetargetingMethodParameterSymbol
            Inherits RetargetingParameterSymbol
 
            ''' <summary>
            ''' Owning RetargetingMethodSymbol.
            ''' </summary>
            Private ReadOnly _retargetingMethod As RetargetingMethodSymbol
 
            Public Sub New(retargetingMethod As RetargetingMethodSymbol, underlyingParameter As ParameterSymbol)
                MyBase.New(underlyingParameter)
 
                Debug.Assert(retargetingMethod IsNot Nothing)
                _retargetingMethod = retargetingMethod
            End Sub
 
            Protected Overrides ReadOnly Property RetargetingModule As RetargetingModuleSymbol
                Get
                    Return _retargetingMethod.RetargetingModule
                End Get
            End Property
        End Class
 
        Private NotInheritable Class RetargetingPropertyParameterSymbol
            Inherits RetargetingParameterSymbol
 
            ''' <summary>
            ''' Owning RetargetingPropertySymbol.
            ''' </summary>
            Private ReadOnly _retargetingProperty As RetargetingPropertySymbol
 
            Public Sub New(retargetingProperty As RetargetingPropertySymbol, underlyingParameter As ParameterSymbol)
                MyBase.New(underlyingParameter)
 
                Debug.Assert(retargetingProperty IsNot Nothing)
                _retargetingProperty = retargetingProperty
            End Sub
 
            Protected Overrides ReadOnly Property RetargetingModule As RetargetingModuleSymbol
                Get
                    Return _retargetingProperty.RetargetingModule
                End Get
            End Property
        End Class
 
        ''' <remarks>
        ''' This is for perf, not for correctness.
        ''' </remarks>
        Friend NotOverridable Overrides ReadOnly Property DeclaringCompilation As VisualBasicCompilation
            Get
                Return Nothing
            End Get
        End Property
 
        Public Overrides Function GetDocumentationCommentXml(Optional preferredCulture As CultureInfo = Nothing, Optional expandIncludes As Boolean = False, Optional cancellationToken As CancellationToken = Nothing) As String
            Return _underlyingParameter.GetDocumentationCommentXml(preferredCulture, expandIncludes, cancellationToken)
        End Function
    End Class
End Namespace