diff --git a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb index f42d11ca428bcb37b5b81d74a798a3655aa85d51..d03ab957b4f5395d3c46a7365bd9a1dbcfb685f5 100644 --- a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb +++ b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb @@ -1337,15 +1337,20 @@ Namespace Microsoft.CodeAnalysis.Semantics Dim eventReferenceSyntax = receiver.Syntax Dim eventReferenceType As ITypeSymbol = eventSymbol.Type Dim eventReferenceConstantValue As [Optional](Of Object) = ConvertToOptional(receiver.ConstantValueOpt) - dim eventReferenceIsImplicit as Boolean = eventInvocation.WasCompilerGenerated + ' EventReference in a raise event statement is never implicit. However, the way it is implemented, we don't get + ' a "BoundEventAccess" for either field backed event or custom event, and the bound nodes we get are marked as + ' generated by compiler. As a result, we have to explicitly set IsImplicit to false. + dim eventReferenceIsImplicit as Boolean = False Dim boundInstance As BoundNode If receiver.Kind = BoundKind.FieldAccess - Dim eventFieldAccess = CType(eventInvocation.ReceiverOpt, BoundFieldAccess) + ' For raising a field backed event, we will only get a field access node in bound tree. + Dim eventFieldAccess = CType(receiver, BoundFieldAccess) Debug.Assert(eventFieldAccess.FieldSymbol.AssociatedSymbol = eventSymbol) boundInstance = eventFieldAccess.ReceiverOpt Else + ' This is for a custom event boundInstance = receiver End If diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb index a5d712e6e1705a7de77c1ee1aba2c3b7f2ffa13d..cd5d56c1985612824cd2871b75895e0639780c19 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IRaiseEventExpression.vb @@ -26,7 +26,7 @@ End Class]]>.Value Dim expectedOperationTree = .Value Dim expectedOperationTree = .Value Dim expectedOperationTree = .Value Dim expectedOperationTree = .Value Dim expectedOperationTree = + + Public Sub EventAccessFromRaiseEventShouldReturnEventReference() + Dim source = .Value + + Dim expectedOperationTree = .Value + Dim expectedDiagnostics = String.Empty + VerifyOperationTreeAndDiagnosticsForTest(Of IdentifierNameSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub - Public Sub EventAccessFromRaiseCustomEventShouldNotReturnOperation() + Public Sub EventAccessFromRaiseCustomEventShouldReturnEventReference() Dim source = .Value - + + Dim expectedOperationTree = .Value Dim expectedDiagnostics = String.Empty - VerifyNoOperationTreeForTest(Of IdentifierNameSyntax)(source) + VerifyOperationTreeAndDiagnosticsForTest(Of IdentifierNameSyntax)(source, expectedOperationTree, expectedDiagnostics) End Sub End Class End Namespace