File: Compilation\DocumentationComments\DocumentationCommentCompiler.Event.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
Imports System.Collections.Generic
Imports System.Collections.Immutable
Imports System.Diagnostics
Imports System.Globalization
Imports System.IO
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Threading
Imports Microsoft.CodeAnalysis.Collections
Imports Microsoft.CodeAnalysis.PooledObjects
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
 
Namespace Microsoft.CodeAnalysis.VisualBasic
    Partial Public Class VisualBasicCompilation
 
        Partial Friend Class DocumentationCommentCompiler
            Inherits VisualBasicSymbolVisitor
 
            Public Overrides Sub VisitEvent(symbol As EventSymbol)
                Me._cancellationToken.ThrowIfCancellationRequested()
 
                If Not ShouldSkipSymbol(symbol) Then
                    Dim sourceEvent = TryCast(symbol, SourceEventSymbol)
                    If sourceEvent IsNot Nothing Then
                        WriteDocumentationCommentForEvent(sourceEvent)
                    End If
                End If
            End Sub
 
            Private Sub WriteDocumentationCommentForEvent([event] As SourceEventSymbol)
 
                Dim docCommentTrivia As DocumentationCommentTriviaSyntax =
                    TryGetDocCommentTriviaAndGenerateDiagnostics(
                        [event].SyntaxReference.GetVisualBasicSyntax(Me._cancellationToken))
 
                If docCommentTrivia Is Nothing Then
                    Return
                End If
 
                Dim wellKnownElementNodes As New Dictionary(Of WellKnownTag, ArrayBuilder(Of XmlNodeSyntax))
 
                Dim docCommentXml As String =
                    GetDocumentationCommentForSymbol([event], docCommentTrivia, wellKnownElementNodes)
 
                ' No further processing
                If docCommentXml Is Nothing Then
                    FreeWellKnownElementNodes(wellKnownElementNodes)
                    Return
                End If
 
                If docCommentTrivia.SyntaxTree.ReportDocumentationCommentDiagnostics OrElse _writer.IsSpecified Then
                    Dim symbolName As String = GetSymbolName([event])
 
                    ' Duplicate top-level well known tags
                    ReportWarningsForDuplicatedTags(wellKnownElementNodes, isEvent:=True)
 
                    ' <exception>
                    ReportWarningsForExceptionTags(wellKnownElementNodes)
 
                    ' <returns>
                    ReportIllegalWellKnownTagIfAny(WellKnownTag.Returns, wellKnownElementNodes, symbolName)
 
                    ' <param> & <paramref>
                    Dim parameters As ImmutableArray(Of ParameterSymbol) = ImmutableArray(Of ParameterSymbol).Empty
                    Dim delegateType = TryCast([event].Type, NamedTypeSymbol)
                    If delegateType IsNot Nothing Then
                        Dim invokeMethod As MethodSymbol = delegateType.DelegateInvokeMethod
                        If invokeMethod IsNot Nothing Then
                            parameters = invokeMethod.Parameters
                        End If
                    End If
 
                    ReportWarningsForParamAndParamRefTags(wellKnownElementNodes, symbolName, parameters)
 
                    ' <value>
                    ReportIllegalWellKnownTagIfAny(WellKnownTag.Value, wellKnownElementNodes, symbolName)
 
                    ' <typeparam>
                    ReportIllegalWellKnownTagIfAny(WellKnownTag.TypeParam, wellKnownElementNodes, symbolName)
 
                    ' <typeparamref>
                    ReportWarningsForTypeParamRefTags(wellKnownElementNodes, symbolName, [event], docCommentTrivia.SyntaxTree)
                End If
 
                FreeWellKnownElementNodes(wellKnownElementNodes)
 
                WriteDocumentationCommentForSymbol(docCommentXml)
            End Sub
 
        End Class
 
    End Class
End Namespace