| File: Symbols\Retargeting\RetargetingFieldSymbol.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 Imports System.Collections.Generic Imports System.Collections.Immutable Imports System.Globalization Imports System.Threading Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Emit Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols.Retargeting ''' <summary> ''' Represents a field in a RetargetingModuleSymbol. Essentially this is a wrapper around ''' another FieldSymbol that is responsible for retargeting symbols from one assembly to another. ''' It can retarget symbols for multiple assemblies at the same time. ''' </summary> Friend NotInheritable Class RetargetingFieldSymbol Inherits FieldSymbol ''' <summary> ''' Owning RetargetingModuleSymbol. ''' </summary> Private ReadOnly _retargetingModule As RetargetingModuleSymbol ''' <summary> ''' The underlying FieldSymbol, cannot be another RetargetingFieldSymbol. ''' </summary> Private ReadOnly _underlyingField As FieldSymbol Private _lazyCustomModifiers As ImmutableArray(Of CustomModifier) ''' <summary> ''' Retargeted custom attributes ''' </summary> ''' <remarks></remarks> Private _lazyCustomAttributes As ImmutableArray(Of VisualBasicAttributeData) Private _lazyCachedUseSiteInfo As CachedUseSiteInfo(Of AssemblySymbol) = CachedUseSiteInfo(Of AssemblySymbol).Uninitialized ' Indicates unknown state. Public Sub New(retargetingModule As RetargetingModuleSymbol, underlyingField As FieldSymbol) Debug.Assert(retargetingModule IsNot Nothing) Debug.Assert(underlyingField IsNot Nothing) If TypeOf underlyingField Is RetargetingFieldSymbol Then Throw New ArgumentException() End If _retargetingModule = retargetingModule _underlyingField = underlyingField End Sub Private ReadOnly Property RetargetingTranslator As RetargetingModuleSymbol.RetargetingSymbolTranslator Get Return _retargetingModule.RetargetingTranslator End Get End Property Public ReadOnly Property UnderlyingField As FieldSymbol Get Return _underlyingField End Get End Property Public Overrides ReadOnly Property IsImplicitlyDeclared As Boolean Get Return _underlyingField.IsImplicitlyDeclared End Get End Property Public ReadOnly Property RetargetingModule As RetargetingModuleSymbol Get Return _retargetingModule End Get End Property Public Overrides ReadOnly Property Type As TypeSymbol Get Return RetargetingTranslator.Retarget(_underlyingField.Type, RetargetOptions.RetargetPrimitiveTypesByTypeCode) End Get End Property Public Overrides ReadOnly Property CustomModifiers As ImmutableArray(Of CustomModifier) Get Return RetargetingTranslator.RetargetModifiers(_underlyingField.CustomModifiers, _lazyCustomModifiers) End Get End Property Public Overrides ReadOnly Property ContainingSymbol As Symbol Get Return RetargetingTranslator.Retarget(_underlyingField.ContainingSymbol) End Get End Property Public Overrides ReadOnly Property DeclaredAccessibility As Accessibility Get Return _underlyingField.DeclaredAccessibility End Get End Property Public Overrides Function GetAttributes() As ImmutableArray(Of VisualBasicAttributeData) Return RetargetingTranslator.GetRetargetedAttributes(_underlyingField, _lazyCustomAttributes) End Function Friend Overrides Function GetCustomAttributesToEmit(moduleBuilder As PEModuleBuilder) As IEnumerable(Of VisualBasicAttributeData) Return RetargetingTranslator.RetargetAttributes(_underlyingField.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 _underlyingField.Name End Get End Property Public Overrides ReadOnly Property MetadataName As String Get Return _underlyingField.MetadataName End Get End Property Friend Overrides ReadOnly Property HasSpecialName As Boolean Get Return _underlyingField.HasSpecialName End Get End Property Friend Overrides ReadOnly Property HasRuntimeSpecialName As Boolean Get Return _underlyingField.HasRuntimeSpecialName End Get End Property Friend Overrides ReadOnly Property IsNotSerialized As Boolean Get Return _underlyingField.IsNotSerialized End Get End Property Friend Overrides ReadOnly Property IsMarshalledExplicitly As Boolean Get Return _underlyingField.IsMarshalledExplicitly End Get End Property Friend Overrides ReadOnly Property MarshallingInformation As MarshalPseudoCustomAttributeData Get Return Me.RetargetingTranslator.Retarget(Me.UnderlyingField.MarshallingInformation) End Get End Property Friend Overrides ReadOnly Property MarshallingDescriptor As ImmutableArray(Of Byte) Get Return _underlyingField.MarshallingDescriptor End Get End Property Friend Overrides ReadOnly Property TypeLayoutOffset As Integer? Get Return _underlyingField.TypeLayoutOffset End Get End Property Public Overrides ReadOnly Property AssociatedSymbol As Symbol Get Dim associated As Symbol = _underlyingField.AssociatedSymbol Return If(associated Is Nothing, Nothing, Me.RetargetingTranslator.Retarget(associated)) End Get End Property Public Overrides ReadOnly Property IsReadOnly As Boolean Get Return _underlyingField.IsReadOnly End Get End Property Public Overrides ReadOnly Property IsConst As Boolean Get Return _underlyingField.IsConst End Get End Property Public Overrides ReadOnly Property ConstantValue As Object Get Return _underlyingField.ConstantValue End Get End Property Friend Overrides Function GetConstantValue(inProgress As ConstantFieldsInProgress) As ConstantValue Return _underlyingField.GetConstantValue(inProgress) End Function Public Overrides ReadOnly Property IsRequired As Boolean Get Debug.Assert(Not _underlyingField.IsRequired) Return False End Get End Property Public Overrides ReadOnly Property Locations As ImmutableArray(Of Location) Get Return _underlyingField.Locations End Get End Property Public Overrides ReadOnly Property DeclaringSyntaxReferences As ImmutableArray(Of SyntaxReference) Get Return _underlyingField.DeclaringSyntaxReferences End Get End Property Public Overrides ReadOnly Property IsShared As Boolean Get Return _underlyingField.IsShared End Get End Property Friend Overrides ReadOnly Property ObsoleteAttributeData As ObsoleteAttributeData Get Return _underlyingField.ObsoleteAttributeData End Get End Property Friend Overrides Function GetUseSiteInfo() As UseSiteInfo(Of AssemblySymbol) Dim primaryDependency As AssemblySymbol = Me.PrimaryDependency If Not _lazyCachedUseSiteInfo.IsInitialized Then _lazyCachedUseSiteInfo.Initialize(primaryDependency, CalculateUseSiteInfo()) End If Return _lazyCachedUseSiteInfo.ToUseSiteInfo(primaryDependency) End Function ''' <remarks> ''' This is for perf, not for correctness. ''' </remarks> Friend 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 _underlyingField.GetDocumentationCommentXml(preferredCulture, expandIncludes, cancellationToken) End Function End Class End Namespace