| File: Emit\SpecializedGenericNestedTypeInstanceReference.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.Emit Imports Microsoft.CodeAnalysis.PooledObjects Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Namespace Microsoft.CodeAnalysis.VisualBasic.Emit ''' <summary> ''' Represents a reference to an instantiation of a generic type nested in an instantiation of another generic type. ''' e.g. ''' A{int}.B{string} ''' A.B{int}.C.D{string} ''' </summary> Friend NotInheritable Class SpecializedGenericNestedTypeInstanceReference Inherits SpecializedNestedTypeReference Implements Cci.IGenericTypeInstanceReference Public Sub New(underlyingNamedType As NamedTypeSymbol) MyBase.New(underlyingNamedType) Debug.Assert(underlyingNamedType.IsDefinition) ' Definition doesn't have custom modifiers on type arguments Debug.Assert(Not underlyingNamedType.HasTypeArgumentsCustomModifiers) End Sub Public Overrides Sub Dispatch(visitor As Cci.MetadataVisitor) visitor.Visit(DirectCast(Me, Cci.IGenericTypeInstanceReference)) End Sub Private Function IGenericTypeInstanceReferenceGetGenericArguments(context As EmitContext) As ImmutableArray(Of Cci.ITypeReference) Implements Cci.IGenericTypeInstanceReference.GetGenericArguments Dim moduleBeingBuilt As PEModuleBuilder = DirectCast(context.Module, PEModuleBuilder) Dim builder = ArrayBuilder(Of Cci.ITypeReference).GetInstance() For Each t In m_UnderlyingNamedType.TypeArgumentsNoUseSiteDiagnostics builder.Add(moduleBeingBuilt.Translate(t, syntaxNodeOpt:=DirectCast(context.SyntaxNode, VisualBasicSyntaxNode), diagnostics:=context.Diagnostics)) Next Return builder.ToImmutableAndFree() End Function Private Function IGenericTypeInstanceReferenceGetGenericType(context As EmitContext) As Cci.INamedTypeReference Implements Cci.IGenericTypeInstanceReference.GetGenericType Debug.Assert(m_UnderlyingNamedType.OriginalDefinition Is m_UnderlyingNamedType.OriginalDefinition.OriginalDefinition) Dim moduleBeingBuilt As PEModuleBuilder = DirectCast(context.Module, PEModuleBuilder) Return moduleBeingBuilt.Translate(m_UnderlyingNamedType.OriginalDefinition, syntaxNodeOpt:=DirectCast(context.SyntaxNode, VisualBasicSyntaxNode), diagnostics:=context.Diagnostics, needDeclaration:=True) End Function Public Overrides ReadOnly Property AsGenericTypeInstanceReference As Cci.IGenericTypeInstanceReference Get Return Me End Get End Property Public Overrides ReadOnly Property AsNamespaceTypeReference As Cci.INamespaceTypeReference Get Return Nothing End Get End Property Public Overrides ReadOnly Property AsNestedTypeReference As Cci.INestedTypeReference Get Return Me End Get End Property Public Overrides ReadOnly Property AsSpecializedNestedTypeReference As Cci.ISpecializedNestedTypeReference Get Return Nothing End Get End Property End Class End Namespace