| File: Symbols\Source\SourceDeclareMethodSymbol.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.Diagnostics Imports System.Threading Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols ''' <summary> ''' Represents a declare method defined in source. ''' </summary> Friend NotInheritable Class SourceDeclareMethodSymbol Inherits SourceNonPropertyAccessorMethodSymbol Private ReadOnly _name As String Private _lazyMetadataName As String ' Flags indicates results of quick scan of the attributes Private ReadOnly _quickAttributes As QuickAttributes ' Platform Invoke information for Declare Method Private ReadOnly _platformInvokeInfo As DllImportData Public Sub New(container As SourceMemberContainerTypeSymbol, name As String, flags As SourceMemberFlags, binder As Binder, syntax As MethodBaseSyntax, platformInvokeInfo As DllImportData) MyBase.New(container, flags, binder.GetSyntaxReference(syntax)) Debug.Assert(MyBase.MethodKind = MethodKind.DeclareMethod) Debug.Assert(platformInvokeInfo IsNot Nothing) _platformInvokeInfo = platformInvokeInfo _name = name ' Check attributes quickly. _quickAttributes = binder.QuickAttributeChecker.CheckAttributes(syntax.AttributeLists) If ContainingType.TypeKind <> TypeKind.Module Then ' Extension methods in source can only be inside modules. _quickAttributes = _quickAttributes And Not QuickAttributes.Extension End If End Sub Public Overrides ReadOnly Property Name As String Get Return _name End Get End Property Public Overrides ReadOnly Property MetadataName As String Get If _lazyMetadataName Is Nothing Then OverloadingHelper.SetMetadataNameForAllOverloads(_name, SymbolKind.Method, m_containingType) Debug.Assert(_lazyMetadataName IsNot Nothing) End If Return _lazyMetadataName End Get End Property Friend Overrides Sub SetMetadataName(metadataName As String) Dim old = Interlocked.CompareExchange(_lazyMetadataName, metadataName, Nothing) Debug.Assert(old Is Nothing OrElse old = metadataName) End Sub Public Overrides ReadOnly Property IsExternalMethod As Boolean Get Return True End Get End Property Friend Overrides ReadOnly Property MayBeReducibleExtensionMethod As Boolean Get Return (_quickAttributes And QuickAttributes.Extension) <> 0 End Get End Property Public Overrides ReadOnly Property IsExtensionMethod As Boolean Get If MayBeReducibleExtensionMethod Then Return MyBase.IsExtensionMethod Else Return False End If End Get End Property Friend Overrides ReadOnly Property ObsoleteAttributeData As ObsoleteAttributeData Get If (_quickAttributes And QuickAttributes.Obsolete) <> 0 Then Return MyBase.ObsoleteAttributeData Else Return Nothing End If End Get End Property Public Overrides Function GetDllImportData() As DllImportData Return Me._platformInvokeInfo End Function Public Overrides ReadOnly Property TypeParameters As ImmutableArray(Of TypeParameterSymbol) Get Return ImmutableArray(Of TypeParameterSymbol).Empty End Get End Property Friend Overrides ReadOnly Property ImplementationAttributes As Reflection.MethodImplAttributes Get Return Reflection.MethodImplAttributes.PreserveSig End Get End Property End Class End Namespace