diff --git a/src/Compilers/VisualBasic/Portable/Binding/BinderFactory.vb b/src/Compilers/VisualBasic/Portable/Binding/BinderFactory.vb index bd38a3d680f51e3b32912ab29a8765ead80a2966..2b2804f7a31e34dca5ef6e465904f5e026cc6f0c 100644 --- a/src/Compilers/VisualBasic/Portable/Binding/BinderFactory.vb +++ b/src/Compilers/VisualBasic/Portable/Binding/BinderFactory.vb @@ -382,7 +382,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Case SyntaxKind.FunctionLambdaHeader, SyntaxKind.SubLambdaHeader, SyntaxKind.SetAccessorStatement, - SyntaxKind.GetAccessorStatement + SyntaxKind.GetAccessorStatement, + SyntaxKind.AddHandlerAccessorStatement, + SyntaxKind.RemoveHandlerAccessorStatement, + SyntaxKind.RaiseEventAccessorStatement ' Default values are not valid (and not bound) for lambda parameters or property accessors Return Nothing diff --git a/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetSemanticInfoTests.vb b/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetSemanticInfoTests.vb index 07d1cf0abb26d852c51148fc37959001da9619ee..f260a5b829874a6957f0635abf0d38bc22f879bb 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetSemanticInfoTests.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Semantics/GetSemanticInfoTests.vb @@ -6062,5 +6062,56 @@ BC30521: Overload resolution failed because no accessible 'Color' is most specif Assert.Equal("ReadOnly Property Program.Color([x As System.String = """"]) As Color", sortedCandidates(1).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(1).Kind) End Sub + + + + Public Sub EventAccessorsWithOptionalParameters() + Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + + +Class Program + Shared Sub Main() + End Sub + + Custom Event E1 As System.Action(Of Object) + AddHandler(Optional value As System.Action(Of Object) = Nothing) + + End AddHandler + RemoveHandler(Optional value As System.Action(Of Object) = Nothing) + + End RemoveHandler + RaiseEvent(Optional value As Object = Nothing) + + End RaiseEvent + End Event +End Class + +) + + AssertTheseDiagnostics(compilation, + +BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. + AddHandler(Optional value As System.Action(Of Object) = Nothing) + ~~~~~~~~ +BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. + RemoveHandler(Optional value As System.Action(Of Object) = Nothing) + ~~~~~~~~ +BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. + RaiseEvent(Optional value As Object = Nothing) + ~~~~~~~~ +) + + Dim tree = compilation.SyntaxTrees(0) + Dim model = compilation.GetSemanticModel(tree) + + Dim nodes = tree.GetRoot().DescendantNodes.OfType(Of LiteralExpressionSyntax)().ToArray() + + Assert.Equal(3, nodes.Length) + For Each literal In nodes + Assert.Equal("Nothing", literal.ToString()) + Assert.Null(model.GetTypeInfo(literal).Type) + Next + End Sub + End Class End Namespace