| File: Symbols\Retargeting\RetargetingParameterSymbol.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 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