|
' 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.Xml.Linq
Imports Basic.Reference.Assemblies
Imports Microsoft.CodeAnalysis.Test.Utilities
Imports Microsoft.CodeAnalysis.VisualBasic
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols.Metadata.PE
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
' this place is dedicated to various parser and/or symbol errors
Public Class SymbolErrorTests
Inherits BasicTestBase
#Region "Targeted Error Tests"
<Fact>
Public Sub BC30002ERR_UndefinedType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UndefinedType1">
<file name="a.vb"><![CDATA[
Structure myStruct
Sub Scen1(FixedRankArray_7(,) As unknowntype)
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'unknowntype' is not defined.
Sub Scen1(FixedRankArray_7(,) As unknowntype)
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30002ERR_UndefinedType1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UndefinedType1">
<file name="a.vb"><![CDATA[
Namespace NS1
Structure myStruct
Sub Scen1()
End Sub
End Structure
End Namespace
Namespace NS2
Structure myStruct1
Sub Scen1(ByVal S As myStruct)
End Sub
End Structure
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'myStruct' is not defined.
Sub Scen1(ByVal S As myStruct)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30015ERR_InheritsFromRestrictedType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsFromRestrictedType1">
<file name="a.vb"><![CDATA[
Structure myStruct1
Class C1
'COMPILEERROR: BC30015, "System.Enum"
Inherits System.Enum
End Class
Class C2
'COMPILEERROR: BC30015, "System.MulticastDelegate"
Inherits System.MulticastDelegate
End Class
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30015: Inheriting from '[Enum]' is not valid.
Inherits System.Enum
~~~~~~~~~~~
BC30015: Inheriting from 'MulticastDelegate' is not valid.
Inherits System.MulticastDelegate
~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30022ERR_ReadOnlyHasSet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ReadOnlyHasSet">
<file name="a.vb"><![CDATA[
Class C1
Private newPropertyValue As String
Public ReadOnly Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
Set(ByVal value As String)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30022ERR_ReadOnlyHasSet2()
Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="ReadOnlyHasSet2">
<file name="a.vb"><![CDATA[
Class C1
Inherits D2
Public Overrides ReadOnly Property P_rw_rw_r As Integer
Get
Return MyBase.P_rw_rw_r
End Get
Set(value As Integer)
MyBase.P_rw_rw_r = value
End Set
End Property
End Class
]]></file>
</compilation>, ClassesWithReadWriteProperties)
Dim expectedErrors1 = <errors><![CDATA[
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
Set(value As Integer)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30023ERR_WriteOnlyHasGet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="WriteOnlyHasGet">
<file name="a.vb"><![CDATA[
Class C1
Private newPropertyValue As String
Public WriteOnly Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
Get
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30023ERR_WriteOnlyHasGet2()
Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="WriteOnlyHasGet2">
<file name="a.vb"><![CDATA[
Class C1
Inherits D2
Public Overrides WriteOnly Property P_rw_rw_w As Integer
Get
Return MyBase.P_rw_rw_w
End Get
Set(value As Integer)
MyBase.P_rw_rw_w = value
End Set
End Property
End Class
]]></file>
</compilation>, ClassesWithReadWriteProperties)
Dim expectedErrors1 = <errors><![CDATA[
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
Get
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30031ERR_FullyQualifiedNameTooLong1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
Namespace EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Namespace HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
Namespace n
Delegate Sub s()
End Namespace
Namespace KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
Namespace NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP
Namespace QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
Namespace TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVv
Class CCCCC(Of T)
Sub s1()
End Sub
Dim x As Integer
Class nestedCCCC
End Class
End Class
Structure ssssss
End Structure
Module mmmmmm
End Module
Enum eee
dummy
End Enum
Interface iii
End Interface
Delegate Sub s()
Delegate Function f() As Integer
End Namespace
End Namespace
End Namespace
End Namespace
End Namespace
End Namespace
End Namespace
]]></file>
</compilation>)
Dim namespaceName As String = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB.CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC.DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD.EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG.HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH.IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ.KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM.NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN.OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ.RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT.UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU.VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVv"
Dim expectedErrors = <errors>
BC37220: Name '<%= namespaceName %>.CCCCC`1' exceeds the maximum length allowed in metadata.
Class CCCCC(Of T)
~~~~~
BC37220: Name '<%= namespaceName %>.ssssss' exceeds the maximum length allowed in metadata.
Structure ssssss
~~~~~~
BC37220: Name '<%= namespaceName %>.mmmmmm' exceeds the maximum length allowed in metadata.
Module mmmmmm
~~~~~~
BC37220: Name '<%= namespaceName %>.eee' exceeds the maximum length allowed in metadata.
Enum eee
~~~
BC37220: Name '<%= namespaceName %>.iii' exceeds the maximum length allowed in metadata.
Interface iii
~~~
BC37220: Name '<%= namespaceName %>.s' exceeds the maximum length allowed in metadata.
Delegate Sub s()
~
BC37220: Name '<%= namespaceName %>.f' exceeds the maximum length allowed in metadata.
Delegate Function f() As Integer
~
</errors>
CompilationUtils.AssertNoDeclarationDiagnostics(compilation)
CompilationUtils.AssertTheseEmitDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30050ERR_ParamArrayNotArray()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ERR_ParamArrayNotArray">
<file name="a.vb"><![CDATA[
Option Explicit
Structure myStruct1
Public sub m1(ParamArray byval q)
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30050: ParamArray parameter must be an array.
Public sub m1(ParamArray byval q)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30051ERR_ParamArrayRank()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ParamArrayRank">
<file name="a.vb"><![CDATA[
Class zzz
Shared Sub Main()
End Sub
Sub abc(ByVal ParamArray s(,) As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30051: ParamArray parameter must be a one-dimensional array.
Sub abc(ByVal ParamArray s(,) As Integer)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30121ERR_MultipleExtends()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MultipleExtends">
<file name="a.vb"><![CDATA[
Class C1(of T)
Inherits Object
Inherits system.StringComparer
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
Inherits system.StringComparer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30124ERR_PropMustHaveGetSet_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
'COMPILEERROR: BC30124, "aprop"
Property aprop() As String
Get
Return "30124"
End Get
End Property
End Class
Partial Class C1
'COMPILEERROR: BC30124, "aprop"
Property aprop() As String
Set(ByVal Value As String)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Property aprop() As String
~~~~~
BC30269: 'Public Property aprop As String' has multiple definitions with identical signatures.
Property aprop() As String
~~~~~
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Property aprop() As String
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30124ERR_PropMustHaveGetSet_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Property P
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Property P
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30125ERR_WriteOnlyHasNoWrite_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
'COMPILEERROR: BC30125, "aprop"
WriteOnly Property aprop() As String
End Property
End Class
Partial Class C1
Property aprop() As String
Set(ByVal Value As String)
End Set
Get
Return "30125"
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30125: 'WriteOnly' property must provide a 'Set'.
WriteOnly Property aprop() As String
~~~~~
BC30366: 'Public WriteOnly Property aprop As String' and 'Public Property aprop As String' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
WriteOnly Property aprop() As String
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30126ERR_ReadOnlyHasNoGet_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
'COMPILEERROR: BC30126, "aprop"
ReadOnly Property aprop() As String
End Property
End Class
Partial Class C1
Property aprop() As String
Set(ByVal Value As String)
End Set
Get
Return "30126"
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30126: 'ReadOnly' property must provide a 'Get'.
ReadOnly Property aprop() As String
~~~~~
BC30366: 'Public ReadOnly Property aprop As String' and 'Public Property aprop As String' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
ReadOnly Property aprop() As String
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30149ERR_UnimplementedMember3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnimplementedMember3">
<file name="a.vb"><![CDATA[
Interface Ibase
Function one() As String
End Interface
Interface Iderived
Inherits Ibase
Function two() As String
End Interface
Class C1
Implements Iderived
End Class
Partial Class C1
Public Function two() As String Implements Iderived.two
Return "two"
End Function
End Class
Class C2
Implements Iderived
End Class
Partial Class C2
Public Function one() As String Implements Iderived.one
Return "one"
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'C1' must implement 'Function one() As String' for interface 'Ibase'.
Implements Iderived
~~~~~~~~
BC30149: Class 'C2' must implement 'Function two() As String' for interface 'Iderived'.
Implements Iderived
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Spec changed in Roslyn
<WorkItem(528701, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528701")>
<Fact>
Public Sub BC30154ERR_UnimplementedProperty3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnimplementedProperty3">
<file name="a.vb"><![CDATA[
Interface PropInterface
Property Scen1() As System.Collections.Generic.IEnumerable(Of Integer)
End Interface
Class HasProps
'COMPILEERROR:BC30154,"PropInterface"
Implements PropInterface
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'HasProps' must implement 'Property Scen1 As IEnumerable(Of Integer)' for interface 'PropInterface'.
Implements PropInterface
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30177ERR_DuplicateModifierCategoryUsed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateModifierCategoryUsed">
<file name="a.vb"><![CDATA[
MustInherit Class C1
MustOverride notoverridable Overridable Function StringFunc() As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
MustOverride notoverridable Overridable Function StringFunc() As String
~~~~~~~~~~~~~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
MustOverride notoverridable Overridable Function StringFunc() As String
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30177ERR_DuplicateModifierCategoryUsed_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateModifierCategoryUsed">
<file name="a.vb"><![CDATA[
MustInherit Class C1
MustOverride Overridable Function StringFunc() As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
MustOverride Overridable Function StringFunc() As String
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30178ERR_DuplicateSpecifier()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateSpecifier">
<file name="a.vb"><![CDATA[
Class test
Shared Shared Sub Goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
Shared Shared Sub Goo()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30178ERR_DuplicateSpecifier_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateSpecifier">
<file name="a.vb"><![CDATA[
class test
friend shared friend function Goo()
End function
End class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
friend shared friend function Goo()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Checks for duplicate type declarations
<Fact>
Public Sub BC30179ERR_TypeConflict6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class cc1
End Class
Class cC1
End Class
Class Cc1
End Class
structure CC1
end structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: class 'cc1' and structure 'CC1' conflict in namespace '<Default>'.
Class cc1
~~~
BC30179: class 'cC1' and structure 'CC1' conflict in namespace '<Default>'.
Class cC1
~~~
BC30179: class 'Cc1' and structure 'CC1' conflict in namespace '<Default>'.
Class Cc1
~~~
BC30179: structure 'CC1' and class 'cc1' conflict in namespace '<Default>'.
structure CC1
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30179ERR_TypeConflict6_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Enum Unicode
one
End Enum
Class Unicode
End Class
Module Unicode
End Module
Interface Unicode
End Interface
Delegate Sub Unicode()
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'Unicode' and class 'Unicode' conflict in namespace '<Default>'.
Enum Unicode
~~~~~~~
BC30179: class 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
Class Unicode
~~~~~~~
BC30179: module 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
Module Unicode
~~~~~~~
BC30179: interface 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
Interface Unicode
~~~~~~~
BC30179: delegate Class 'Unicode' and enum 'Unicode' conflict in namespace '<Default>'.
Delegate Sub Unicode()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528149, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528149")>
<Fact>
Public Sub BC30179ERR_TypeConflict6_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Interface I
ReadOnly Property P
ReadOnly Property Q
End Interface
Interface I ' BC30179
Property Q
End Interface
Structure S
Class T
End Class
Interface I
End Interface
End Structure
Structure S ' BC30179
Structure T
End Structure
Dim I
End Structure
Enum E
A
B
End Enum
Enum E ' BC30179
A
End Enum
Class S ' BC30179
Dim T
End Class
Delegate Sub D()
Delegate Function D(s$) ' BC30179
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: interface 'I' and interface 'I' conflict in namespace 'N'.
Interface I ' BC30179
~
BC30179: structure 'S' and class 'S' conflict in namespace 'N'.
Structure S
~
BC30179: structure 'S' and class 'S' conflict in namespace 'N'.
Structure S ' BC30179
~
BC30179: enum 'E' and enum 'E' conflict in namespace 'N'.
Enum E
~
BC30179: enum 'E' and enum 'E' conflict in namespace 'N'.
Enum E ' BC30179
~
BC30179: class 'S' and structure 'S' conflict in namespace 'N'.
Class S ' BC30179
~
BC30179: delegate Class 'D' and delegate Class 'D' conflict in namespace 'N'.
Delegate Function D(s$) ' BC30179
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528149, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528149")>
<Fact>
Public Sub BC30179ERR_TypeConflict6_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Interface I
ReadOnly Property P
ReadOnly Property Q
End Interface
Interface I ' BC30179
Property Q
End Interface
Structure S
Class T
End Class
Interface I
End Interface
End Structure
Structure S ' BC30179
Structure T
End Structure
Dim I
End Structure
Enum E
A
B
End Enum
Enum E ' BC30179
A
End Enum
Class S ' BC30179
Dim T
End Class
Delegate Sub D()
Delegate Function D(s$) ' BC30179
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: interface 'I' and interface 'I' conflict in class 'C'.
Interface I ' BC30179
~
BC30179: structure 'S' and class 'S' conflict in class 'C'.
Structure S
~
BC30179: structure 'S' and class 'S' conflict in class 'C'.
Structure S ' BC30179
~
BC30179: enum 'E' and enum 'E' conflict in class 'C'.
Enum E
~
BC30179: enum 'E' and enum 'E' conflict in class 'C'.
Enum E ' BC30179
~
BC30179: class 'S' and structure 'S' conflict in class 'C'.
Class S ' BC30179
~
BC30179: delegate Class 'D' and delegate Class 'D' conflict in class 'C'.
Delegate Function D(s$) ' BC30179
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30179ERR_TypeConflict6_DupNestedEnumDeclarations()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateEnum1">
<file name="a.vb"><![CDATA[
Structure S1
Enum goo
bar
End Enum
Enum goo
bar
another_bar
End Enum
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'goo' and enum 'goo' conflict in structure 'S1'.
Enum goo
~~~
BC30179: enum 'goo' and enum 'goo' conflict in structure 'S1'.
Enum goo
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30179ERR_TypeConflict6_DupEnumDeclarations()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateEnum2">
<file name="a.vb"><![CDATA[
Enum goo
bar
End Enum
Enum goo
bar
another_bar
End Enum
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30179: enum 'goo' and enum 'goo' conflict in namespace '<Default>'.
Enum goo
~~~
BC30179: enum 'goo' and enum 'goo' conflict in namespace '<Default>'.
Enum goo
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30182_ERR_UnrecognizedType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnrecognizedType">
<file name="a.vb"><![CDATA[
Namespace NS
Class C1
Function GOO() As NS
End Function
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30182: Type expected.
Function GOO() As NS
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30182_ERR_UnrecognizedType_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnrecognizedType">
<file name="a.vb"><![CDATA[
Namespace NS
Class C1
inherits NS
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30182: Type expected.
inherits NS
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30210ERR_StrictDisallowsImplicitProc()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Structure S1
Public Function Goo()
End Function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Public Function Goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30210ERR_StrictDisallowsImplicitProc_1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
option strict on
Public Class c1
Shared Operator + (ByVal c As c1, ByVal b As c1)
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_StrictDisallowsImplicitProc, "+"),
Diagnostic(ERRID.WRN_DefAsgNoRetValOpRef1, "End Operator").WithArguments("+"))
End Sub
<Fact>
Public Sub BC30210ERR_StrictDisallowsImplicitProc_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Interface I
ReadOnly Property P
End Interface
Structure S
WriteOnly Property P
Set(value As Object)
End Set
End Property
End Structure
Class C
Property P(i As Integer)
Get
Return Nothing
End Get
Set(value As Object)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
ReadOnly Property P
~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
WriteOnly Property P
~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Property P(i As Integer)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30210ERR_StrictDisallowsImplicitProc_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Delegate Sub D()
Delegate Function E(o As Object)
Delegate Function F() As Object
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Delegate Function E(o As Object)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30210ERR_StrictDisallowsImplicitProc_Declare()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Module M
Declare Sub test Lib "???" (a As Integer)
Declare Sub F Lib "bar" ()
Declare Function G Lib "bar" ()
End Module
]]></file>
</compilation>)
Dim expectedErrors1 =
<errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Declare Function G Lib "bar" ()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30211ERR_StrictDisallowsImplicitArgs()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Structure S1
Public Function Goo(byval x) as integer
return 1
End Function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
Public Function Goo(byval x) as integer
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30211ERR_StrictDisallowsImplicitArgs_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Interface I
ReadOnly Property P(i) As Object
End Interface
Structure S
WriteOnly Property P(x) As Object
Set(value)
End Set
End Property
End Structure
Class C
Property P(val) As I
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
ReadOnly Property P(i) As Object
~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
WriteOnly Property P(x) As Object
~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
Set(value)
~~~~~
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
Property P(val) As I
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30230ERR_ModuleCantInherit()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantInherit">
<file name="a.vb"><![CDATA[
interface I1
End interface
module M1
Inherits I1
End module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30230: 'Inherits' not valid in Modules.
Inherits I1
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30231ERR_ModuleCantImplement()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantImplement">
<file name="a.vb"><![CDATA[
Module M1
Implements Object
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30231: 'Implements' not valid in Modules.
Implements Object
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30232ERR_BadImplementsType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadImplementsType">
<file name="a.vb"><![CDATA[
Class cls1
Implements system.Enum
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30232: Implemented type must be an interface.
Implements system.Enum
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30233ERR_BadConstFlags1()
Dim source =
<compilation name="delegates">
<file name="a.vb"><![CDATA[
Option strict on
imports system
Class C1
' BC30233: 'Shared' is not valid on a constant declaration.
Public Shared Const b As String = "goo"
Public Const Shared c As String = "goo"
' BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
Public Const ReadOnly e As String = "goo"
' BC30233: 'ReadOnly' is not valid on a constant declaration.
Public Shared ReadOnly Const f As String = "goo"
End Class
Module M1
' Roslyn: Only BC30593: Variables in Modules cannot be declared 'Shared'.
' Dev10: Additional BC30233: 'Shared' is not valid on a constant declaration.
Public Shared Const b As String = "goo"
Public Const Shared c As String = "goo"
' BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
Public Const ReadOnly e As String = "goo"
End Module
Structure S1
' BC30233: 'Shared' is not valid on a constant declaration.
Public Shared Const b As String = "goo"
Public Const Shared c As String = "goo"
' BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
Public Const ReadOnly e As String = "goo"
End Structure
]]></file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected><![CDATA[
BC30233: 'Shared' is not valid on a constant declaration.
Public Shared Const b As String = "goo"
~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
Public Const Shared c As String = "goo"
~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public Const ReadOnly e As String = "goo"
~~~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
Public Shared ReadOnly Const f As String = "goo"
~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public Shared ReadOnly Const f As String = "goo"
~~~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
Public Shared Const b As String = "goo"
~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
Public Const Shared c As String = "goo"
~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public Const ReadOnly e As String = "goo"
~~~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
Public Shared Const b As String = "goo"
~~~~~~
BC30233: 'Shared' is not valid on a constant declaration.
Public Const Shared c As String = "goo"
~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public ReadOnly Const d As String = "goo"
~~~~~~~~
BC30233: 'ReadOnly' is not valid on a constant declaration.
Public Const ReadOnly e As String = "goo"
~~~~~~~~
]]></expected>)
End Sub
<WorkItem(528365, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528365")>
<Fact>
Public Sub BC30233ERR_BadConstFlags1_02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadConstFlags1">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
Module M1
'COMPILEERROR: BC30233, "Static"
Static Const p As Integer = AscW("10")
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30235: 'Static' is not valid on a member variable declaration.
Static Const p As Integer = AscW("10")
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30234ERR_BadWithEventsFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadWithEventsFlags1">
<file name="a.vb"><![CDATA[
Module M1
'COMPILEERROR: BC30234, "ReadOnly"
ReadOnly WithEvents var1 As Object
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30234: 'ReadOnly' is not valid on a WithEvents declaration.
ReadOnly WithEvents var1 As Object
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30235ERR_BadDimFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadDimFlags1">
<file name="a.vb"><![CDATA[
Class cls1
Default i As Integer
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30235: 'Default' is not valid on a member variable declaration.
Default i As Integer
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30237ERR_DuplicateParamName1_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option strict on
Module m
Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30237: Parameter already declared with name 'a'.
Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)
~
BC30237: Parameter already declared with name 'a'.
Sub s1(ByVal a As Integer, ByVal a As Integer, a as string)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30237ERR_DuplicateParamName1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
WriteOnly Property P(ByVal a, ByVal b)
Set(ByVal b)
End Set
End Property
Property Q(x, y, x)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30237: Parameter already declared with name 'b'.
Set(ByVal b)
~
BC30237: Parameter already declared with name 'x'.
Property Q(x, y, x)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30237ERR_DuplicateParamName1_ExternalMethods()
Dim source =
<compilation>
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
Public Class C
<MethodImplAttribute(MethodCodeType:=MethodCodeType.Runtime)>
Shared Sub Runtime(a As Integer, a As Integer)
End Sub
<MethodImpl(MethodImplOptions.InternalCall)>
Shared Sub InternalCall(b As Integer, b As Integer)
End Sub
<DllImport("goo")>
Shared Sub DllImp(c As Integer, c As Integer)
End Sub
Declare Sub DeclareSub Lib "bar" (d As Integer, d As Integer)
End Class
]]></file>
</compilation>
CreateCompilationWithMscorlib40(source).VerifyDiagnostics(
Diagnostic(ERRID.ERR_DuplicateParamName1, "a").WithArguments("a"),
Diagnostic(ERRID.ERR_DuplicateParamName1, "b").WithArguments("b"),
Diagnostic(ERRID.ERR_DuplicateParamName1, "c").WithArguments("c"))
End Sub
<Fact>
Public Sub BC30242ERR_BadMethodFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadMethodFlags1">
<file name="a.vb"><![CDATA[
Structure S1
Default function goo()
End function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30242: 'Default' is not valid on a method declaration.
Default function goo()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30243ERR_BadEventFlags1()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadEventFlags1">
<file name="a.vb"><![CDATA[
Class c1
Shared Event e1()
Public Event e2()
Sub raiser1()
RaiseEvent e1()
End Sub
Sub raiser2()
RaiseEvent e2()
End Sub
End Class
Class c2
Inherits c1
'COMPILEERROR: BC30243, "Overrides"
Overrides Event e1()
'COMPILEERROR: BC30243, "Overloads"
Overloads Event e2(ByVal i As Integer)
'COMPILEERROR: BC30243, "Overloads", BC30243, "Overrides"
Overloads Overrides Event e3(ByVal i As Integer)
'COMPILEERROR: BC30243, "NotOverridable"
NotOverridable Event e4()
'COMPILEERROR: BC30243, "Default"
Default Event e5()
'COMPILEERROR: BC30243, "Static"
Static Event e6()
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_BadEventFlags1, "Overrides").WithArguments("Overrides"),
Diagnostic(ERRID.ERR_BadEventFlags1, "Overloads").WithArguments("Overloads"),
Diagnostic(ERRID.ERR_BadEventFlags1, "Overloads").WithArguments("Overloads"),
Diagnostic(ERRID.ERR_BadEventFlags1, "Overrides").WithArguments("Overrides"),
Diagnostic(ERRID.ERR_BadEventFlags1, "NotOverridable").WithArguments("NotOverridable"),
Diagnostic(ERRID.ERR_BadEventFlags1, "Default").WithArguments("Default"),
Diagnostic(ERRID.ERR_BadEventFlags1, "Static").WithArguments("Static"),
Diagnostic(ERRID.WRN_OverrideType5, "e1").WithArguments("event", "e1", "event", "class", "c1"),
Diagnostic(ERRID.WRN_OverrideType5, "e2").WithArguments("event", "e2", "event", "class", "c1"))
End Sub
' BC30244ERR_BadDeclareFlags1
' see AttributeTests
<WorkItem(527697, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527697")>
<Fact>
Public Sub BC30246ERR_BadLocalConstFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadLocalConstFlags1">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
'COMPILEERROR: BC30246, "Shared"
Shared Const x As Integer = 10
End Sub
End Module
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_BadLocalDimFlags1, "Shared").WithArguments("Shared"),
Diagnostic(ERRID.WRN_UnusedLocalConst, "x").WithArguments("x"))
End Sub
<WorkItem(538967, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538967")>
<Fact>
Public Sub BC30247ERR_BadLocalDimFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadLocalDimFlags1">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
'COMPILEERROR: BC30247, "Shared"
Shared x As Integer = 10
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30247: 'Shared' is not valid on a local variable declaration.
Shared x As Integer = 10
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30257ERR_InheritanceCycle1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InheritanceCycle1">
<file name="a.vb"><![CDATA[
Public Class C1
Inherits C2
End Class
Public Class C2
Inherits C1
End Class
Module M1
Sub Main()
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30257: Class 'C1' cannot inherit from itself:
'C1' inherits from 'C2'.
'C2' inherits from 'C1'.
Inherits C2
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30258ERR_InheritsFromNonClass()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsFrom2">
<file name="a.vb"><![CDATA[
Structure myStruct1
Class C1
Inherits myStruct1
End Class
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30258: Classes can inherit only from other classes.
Inherits myStruct1
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Checks for duplicate type declarations
' DEV code
<Fact>
Public Sub BC30260ERR_MultiplyDefinedType3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
class c
sub i(ByVal i As Integer)
End Sub
dim i(,,) as integer
Public i, i As Integer
Private i As Integer
Sub i()
End Sub
end class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
dim i(,,) as integer
~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
Public i, i As Integer
~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
Public i, i As Integer
~
BC30260: 'i' is already declared as 'Public Sub i(i As Integer)' in this class.
Private i As Integer
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30260ERR_MultiplyDefinedType3_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Enum E As Short
A
End Enum
Function E()
End Function
End Class
Interface I
Structure S
End Structure
Sub S()
End Interface
Structure S
Class C
End Class
Property C
Interface I
End Interface
Private I
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'E' is already declared as 'Enum E' in this class.
Function E()
~
BC30260: 'S' is already declared as 'Structure S' in this interface.
Sub S()
~
BC30260: 'C' is already declared as 'Class C' in this structure.
Property C
~
BC30260: 'I' is already declared as 'Interface I' in this structure.
Private I
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30260ERR_MultiplyDefinedType3_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class C
Overloads Property P
Overloads Function P(o)
Return Nothing
End Function
Overloads Shared Property Q(o)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Overloads Sub Q()
End Sub
Class R
End Class
ReadOnly Property R(x, y)
Get
Return Nothing
End Get
End Property
Private WriteOnly Property S As Integer
Set(value As Integer)
End Set
End Property
Structure S
End Structure
Private Shared ReadOnly Property T As Integer
Get
Return 0
End Get
End Property
Private T
Friend MustOverride Overloads Function U()
Protected Property U
Protected V As Object
Friend Shared Property V
End Class
]]></file>
</compilation>)
' Note: Unlike Dev10, the error with 'S' is reported on the property
' rather than the struct, even though the struct appears first in source.
' That is because types are resolved before other members.
Dim expectedErrors1 = <errors><![CDATA[
BC30260: 'P' is already declared as 'Public Overloads Property P As Object' in this class.
Overloads Function P(o)
~
BC30260: 'Q' is already declared as 'Public Shared Overloads Property Q(o As Object) As Object' in this class.
Overloads Sub Q()
~
BC30260: 'R' is already declared as 'Class R' in this class.
ReadOnly Property R(x, y)
~
BC30260: 'S' is already declared as 'Structure S' in this class.
Private WriteOnly Property S As Integer
~
BC30260: 'T' is already declared as 'Private Shared ReadOnly Property T As Integer' in this class.
Private T
~
BC30260: 'U' is already declared as 'Friend MustOverride Overloads Function U() As Object' in this class.
Protected Property U
~
BC30260: 'V' is already declared as 'Protected V As Object' in this class.
Friend Shared Property V
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30266ERR_BadOverrideAccess2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadLocalDimFlags1">
<file name="a.vb"><![CDATA[
Namespace NS1
Class base
Protected Overridable Function scen2(Of t)(ByVal x As t) As String
Return "30266"
End Function
Public Overridable Function scen1(Of t)(ByVal x As t) As String
Return "30266"
End Function
End Class
Partial Class base
Friend Overridable Function scen3(Of t)(ByVal x As t) As String
Return "30266"
End Function
Protected Friend Overridable Function scen4(Of t)(ByVal x As t) As String
Return "30266"
End Function
Private Protected Overridable Function scen5(Of t)(ByVal x As t) As String
Return "30266"
End Function
Protected Overridable Function scen6(Of t)(ByVal x As t) As String
Return "30266"
End Function
End Class
Partial Class derived
'COMPILEERROR: BC30266, "scen4"
Protected Overrides Function scen4(Of t)(ByVal x As t) As String
Return "30266"
End Function
End Class
Class derived
Inherits base
'COMPILEERROR: BC30266, "scen2"
Friend Overrides Function scen2(Of t)(ByVal x As t) As String
Return "30266"
End Function
'COMPILEERROR: BC30266, "scen3"
Public Overrides Function scen3(Of t)(ByVal x As t) As String
Return "30266"
End Function
'COMPILEERROR: BC30266, "scen1"
Protected Overrides Function scen1(Of t)(ByVal x As t) As String
Return "30266"
End Function
'COMPILEERROR: BC30266, "scen5"
Protected Overrides Function scen5(Of t)(ByVal x As t) As String
Return "30266"
End Function
'COMPILEERROR: BC30266, "scen6"
Private Protected Overrides Function scen6(Of t)(ByVal x As t) As String
Return "30266"
End Function
End Class
End Namespace
]]></file>
</compilation>,
parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15_5))
Dim expectedErrors1 = <errors><![CDATA[
BC30266: 'Protected Overrides Function scen4(Of t)(x As t) As String' cannot override 'Protected Friend Overridable Function scen4(Of t)(x As t) As String' because they have different access levels.
Protected Overrides Function scen4(Of t)(ByVal x As t) As String
~~~~~
BC30266: 'Friend Overrides Function scen2(Of t)(x As t) As String' cannot override 'Protected Overridable Function scen2(Of t)(x As t) As String' because they have different access levels.
Friend Overrides Function scen2(Of t)(ByVal x As t) As String
~~~~~
BC30266: 'Public Overrides Function scen3(Of t)(x As t) As String' cannot override 'Friend Overridable Function scen3(Of t)(x As t) As String' because they have different access levels.
Public Overrides Function scen3(Of t)(ByVal x As t) As String
~~~~~
BC30266: 'Protected Overrides Function scen1(Of t)(x As t) As String' cannot override 'Public Overridable Function scen1(Of t)(x As t) As String' because they have different access levels.
Protected Overrides Function scen1(Of t)(ByVal x As t) As String
~~~~~
BC30266: 'Protected Overrides Function scen5(Of t)(x As t) As String' cannot override 'Private Protected Overridable Function scen5(Of t)(x As t) As String' because they have different access levels.
Protected Overrides Function scen5(Of t)(ByVal x As t) As String
~~~~~
BC30266: 'Private Protected Overrides Function scen6(Of t)(x As t) As String' cannot override 'Protected Overridable Function scen6(Of t)(x As t) As String' because they have different access levels.
Private Protected Overrides Function scen6(Of t)(ByVal x As t) As String
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30267ERR_CantOverrideNotOverridable2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantOverrideNotOverridable2">
<file name="a.vb"><![CDATA[
Class c1
Class c1_0
Overridable Sub goo()
End Sub
End Class
Class c1_1
Inherits c1_0
NotOverridable Overrides Sub goo()
End Sub
End Class
Class c1_2
Inherits c1_1
'COMPILEERROR: BC30267, "goo"
Overrides Sub goo()
End Sub
End Class
End Class
Class c1_2
Inherits c1.c1_1
'COMPILEERROR: BC30267, "goo"
Overrides Sub goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30267: 'Public Overrides Sub goo()' cannot override 'Public NotOverridable Overrides Sub goo()' because it is declared 'NotOverridable'.
Overrides Sub goo()
~~~
BC30267: 'Public Overrides Sub goo()' cannot override 'Public NotOverridable Overrides Sub goo()' because it is declared 'NotOverridable'.
Overrides Sub goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30269ERR_DuplicateProcDef1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateProcDef1">
<file name="a.vb"><![CDATA[
Class C1
Public Sub New() ' 1
End Sub
Public Sub New() ' 2
End Sub
Shared Sub New() ' ok :)
End Sub
Public Sub Goo1() ' 1
End Sub
Public Sub Goo1() ' 2
End Sub
Public Sub Goo1() ' 3
End Sub
Public overloads Sub Goo2() ' 1
End Sub
Public overloads Sub Goo2() ' 2
End Sub
Public Sub Goo3(Of T)(X As T) ' 1
End Sub
Public Sub Goo3(Of TT)(X As TT) ' 2
End Sub
Public Sub GooOK(x as Integer) ' 1
End Sub
Public Sub GooOK(x as Decimal) ' 2
End Sub
Public Shared Sub Main()
End Sub
End Class
Class Base
public overridable sub goo4() ' base
End sub
End Class
Class Derived
Inherits Base
public overrides sub goo4() ' derived 1
End sub
public overloads sub goo4() ' derived 2
End sub
End Class
Class PartialClass
Public Sub Goo5() ' 1
End Sub
Public Sub Goo6(x as integer)
End Sub
End Class
Partial Class PartialClass
Public Sub Goo5() ' 2
End Sub
Public Sub Goo6(y as integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Sub New()' has multiple definitions with identical signatures.
Public Sub New() ' 1
~~~
BC30269: 'Public Sub Goo1()' has multiple definitions with identical signatures.
Public Sub Goo1() ' 1
~~~~
BC30269: 'Public Sub Goo1()' has multiple definitions with identical signatures.
Public Sub Goo1() ' 2
~~~~
BC30269: 'Public Overloads Sub Goo2()' has multiple definitions with identical signatures.
Public overloads Sub Goo2() ' 1
~~~~
BC30269: 'Public Sub Goo3(Of T)(X As T)' has multiple definitions with identical signatures.
Public Sub Goo3(Of T)(X As T) ' 1
~~~~
BC30269: 'Public Overrides Sub goo4()' has multiple definitions with identical signatures.
public overrides sub goo4() ' derived 1
~~~~
BC30269: 'Public Sub Goo5()' has multiple definitions with identical signatures.
Public Sub Goo5() ' 1
~~~~
BC30269: 'Public Sub Goo6(x As Integer)' has multiple definitions with identical signatures.
Public Sub Goo6(x as integer)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30269ERR_DuplicateProcDef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateProcDef1">
<file name="a.vb"><![CDATA[
Interface ii
Sub abc()
End Interface
Structure teststruct
Implements ii
'COMPILEERROR: BC30269, "abc"
Public Sub abc() Implements ii.abc
End Sub
'COMPILEERROR: BC30269, "New"
Public Sub New(ByVal x As String)
End Sub
End Structure
Partial Structure teststruct
Implements ii
Public Sub New(ByVal x As String)
End Sub
Public Sub abc() Implements ii.abc
End Sub
End Structure
]]></file>
</compilation>)
' TODO: The last error is expected to go away once "Implements" is supported.
Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Sub abc()' has multiple definitions with identical signatures.
Public Sub abc() Implements ii.abc
~~~
BC30269: 'Public Sub New(x As String)' has multiple definitions with identical signatures.
Public Sub New(ByVal x As String)
~~~
BC30583: 'ii.abc' cannot be implemented more than once.
Public Sub abc() Implements ii.abc
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(543162, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543162")>
<Fact()>
Public Sub BC30269ERR_DuplicateProcDef1_Shared()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateProcDef1">
<file name="a.vb"><![CDATA[
Class C1
Public Sub New1() ' 1
End Sub
Public Shared Sub New1() ' 2
End Sub
End Class
]]></file>
</compilation>)
AssertTheseDiagnostics(compilation1, errs:=<expected><![CDATA[
BC30269: 'Public Sub New1()' has multiple definitions with identical signatures.
Public Sub New1() ' 1
~~~~
]]></expected>)
End Sub
<Fact>
Public Sub BC30270ERR_BadInterfaceMethodFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceMethodFlags1">
<file name="a.vb"><![CDATA[
Imports System.Collections
Interface I
Public Function A()
Private Function B()
Protected Function C()
Friend Function D()
Shared Function E()
MustInherit Function F()
NotInheritable Function G()
Overrides Function H()
Partial Function J()
NotOverridable Function K()
Overridable Function L()
Iterator Function Goo() as IEnumerator
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30270: 'Public' is not valid on an interface method declaration.
Public Function A()
~~~~~~
BC30270: 'Private' is not valid on an interface method declaration.
Private Function B()
~~~~~~~
BC30270: 'Protected' is not valid on an interface method declaration.
Protected Function C()
~~~~~~~~~
BC30270: 'Friend' is not valid on an interface method declaration.
Friend Function D()
~~~~~~
BC30270: 'Shared' is not valid on an interface method declaration.
Shared Function E()
~~~~~~
BC30242: 'MustInherit' is not valid on a method declaration.
MustInherit Function F()
~~~~~~~~~~~
BC30242: 'NotInheritable' is not valid on a method declaration.
NotInheritable Function G()
~~~~~~~~~~~~~~
BC30270: 'Overrides' is not valid on an interface method declaration.
Overrides Function H()
~~~~~~~~~
BC30270: 'Partial' is not valid on an interface method declaration.
Partial Function J()
~~~~~~~
BC30270: 'NotOverridable' is not valid on an interface method declaration.
NotOverridable Function K()
~~~~~~~~~~~~~~
BC30270: 'Overridable' is not valid on an interface method declaration.
Overridable Function L()
~~~~~~~~~~~
BC30270: 'Iterator' is not valid on an interface method declaration.
Iterator Function Goo() as IEnumerator
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30273ERR_BadInterfacePropertyFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfacePropertyFlags1">
<file name="a.vb"><![CDATA[
Imports System.Collections
Interface I
Public Property A
Private Property B
Protected Property C
Friend Property D
Shared Property E
MustInherit Property F
NotInheritable Property G
Overrides Property H
NotOverridable Property J
Overridable Property K
ReadOnly Property L ' No error
WriteOnly Property M ' No error
Default Property N(o) ' No error
Iterator Property Goo() as IEnumerator
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30273: 'Public' is not valid on an interface property declaration.
Public Property A
~~~~~~
BC30273: 'Private' is not valid on an interface property declaration.
Private Property B
~~~~~~~
BC30273: 'Protected' is not valid on an interface property declaration.
Protected Property C
~~~~~~~~~
BC30273: 'Friend' is not valid on an interface property declaration.
Friend Property D
~~~~~~
BC30273: 'Shared' is not valid on an interface property declaration.
Shared Property E
~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
MustInherit Property F
~~~~~~~~~~~
BC30639: Properties cannot be declared 'NotInheritable'.
NotInheritable Property G
~~~~~~~~~~~~~~
BC30273: 'Overrides' is not valid on an interface property declaration.
Overrides Property H
~~~~~~~~~
BC30273: 'NotOverridable' is not valid on an interface property declaration.
NotOverridable Property J
~~~~~~~~~~~~~~
BC30273: 'Overridable' is not valid on an interface property declaration.
Overridable Property K
~~~~~~~~~~~
BC30273: 'Iterator' is not valid on an interface property declaration.
Iterator Property Goo() as IEnumerator
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30275ERR_InterfaceCantUseEventSpecifier1()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceCantUseEventSpecifier1">
<file name="a.vb"><![CDATA[
Interface I1
'COMPILEERROR: BC30275, "friend"
Friend Event goo()
End Interface
Interface I2
'COMPILEERROR: BC30275, "protected"
Protected Event goo()
End Interface
Interface I3
'COMPILEERROR: BC30275, "Private"
Private Event goo()
End Interface
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Friend").WithArguments("Friend"),
Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Protected").WithArguments("Protected"),
Diagnostic(ERRID.ERR_InterfaceCantUseEventSpecifier1, "Private").WithArguments("Private"))
End Sub
<WorkItem(539943, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539943")>
<Fact>
Public Sub BC30280ERR_BadEmptyEnum1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadEmptyEnum1">
<file name="a.vb"><![CDATA[
Enum SEX
End Enum
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30280: Enum 'SEX' must contain at least one member.
Enum SEX
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30283ERR_CantOverrideConstructor()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantOverrideConstructor">
<file name="a.vb"><![CDATA[
Class Class2
Inherits Class1
Overrides Sub New()
End Sub
End Class
Class Class1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30283: 'Sub New' cannot be declared 'Overrides'.
Overrides Sub New()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30284ERR_OverrideNotNeeded3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverrideNotNeeded3">
<file name="a.vb"><![CDATA[
Imports System
Namespace NS30284
Public Class Class1
Dim xprop2, xprop3, xprop5
End Class
Public Class Class2
Inherits Class1
Interface interface1
ReadOnly Property prop1()
WriteOnly Property prop2()
WriteOnly Property prop3()
ReadOnly Property prop5()
End Interface
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal val As Short)
MyBase.New()
End Sub
'COMPILEERROR: BC30284, "prop1"
Overrides WriteOnly Property prop1() As String
Set(ByVal Value As String)
End Set
End Property
'COMPILEERROR: BC30284, "prop2"
Overrides ReadOnly Property prop2() As String
Get
Return "30284"
End Get
End Property
'COMPILEERROR: BC30284, "prop3"
Overrides Property prop3() As String
Get
Return "30284"
End Get
Set(ByVal Value As String)
End Set
End Property
'COMPILEERROR: BC30284, "prop5"
Overrides ReadOnly Property prop5()
Get
Return "30284"
End Get
End Property
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30284: property 'prop1' cannot be declared 'Overrides' because it does not override a property in a base class.
Overrides WriteOnly Property prop1() As String
~~~~~
BC30284: property 'prop2' cannot be declared 'Overrides' because it does not override a property in a base class.
Overrides ReadOnly Property prop2() As String
~~~~~
BC30284: property 'prop3' cannot be declared 'Overrides' because it does not override a property in a base class.
Overrides Property prop3() As String
~~~~~
BC30284: property 'prop5' cannot be declared 'Overrides' because it does not override a property in a base class.
Overrides ReadOnly Property prop5()
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' <Fact()>
' Public Sub BC30293ERR_RecordEmbeds2()
' Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
' <compilation name="RecordEmbeds2">
' <file name="a.vb"><![CDATA[
' Class C1
' End Class
' Class C2
' Inherits C1
' Overrides WriteOnly Property prop1() As String
' Set(ByVal value As String)
' End Set
' End Property
' End Class
' ]]></file>
' </compilation>)
' Dim expectedErrors1 = <errors><![CDATA[
'BC30293: property 'prop1' cannot be declared 'Overrides' because it does not override a property in a base class.
' Overrides WriteOnly Property prop1() As String
' ~~~~~~
' ]]></errors>
' CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
' End Sub
<Fact>
Public Sub BC30294ERR_RecordCycle2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RecordCycle2">
<file name="a.vb"><![CDATA[
Public Structure yyy
Dim a As yyy
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30294: Structure 'yyy' cannot contain an instance of itself:
'yyy' contains 'yyy' (variable 'a').
Dim a As yyy
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30296ERR_InterfaceCycle1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceCycle1">
<file name="a.vb"><![CDATA[
Public Class c0
Protected Class cls1
Public Interface I2
Interface I2
Inherits I2
End Interface
End Interface
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30296: Interface 'c0.cls1.I2.I2' cannot inherit from itself:
'c0.cls1.I2.I2' inherits from 'c0.cls1.I2.I2'.
Inherits I2
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30299ERR_InheritsFromCantInherit3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsFromCantInherit3">
<file name="a.vb"><![CDATA[
Class c1
NotInheritable Class c1_1
Class c1_4
Inherits c1_1
End Class
End Class
Class c1_2
Inherits c1_1
End Class
End Class
Class c1_3
Inherits c1.c1_1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30299: 'c1_4' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
Inherits c1_1
~~~~
BC30299: 'c1_2' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
Inherits c1_1
~~~~
BC30299: 'c1_3' cannot inherit from class 'c1_1' because 'c1_1' is declared 'NotInheritable'.
Inherits c1.c1_1
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30300ERR_OverloadWithOptional2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithOptional2">
<file name="a.vb"><![CDATA[
Class Cla30300
'COMPILEERROR: BC30300, "goo"
Public Function goo(ByVal arg As ULong)
Return "BC30300"
End Function
Public Function goo(Optional ByVal arg As ULong = 1)
Return "BC30300"
End Function
'COMPILEERROR: BC30300, "goo1"
Public Function goo1()
Return "BC30300"
End Function
Public Function goo1(Optional ByVal arg As ULong = 1)
Return "BC30300"
End Function
'COMPILEERROR: BC30300, "goo2"
Public Function goo2(ByVal arg As Integer)
Return "BC30300"
End Function
Public Function goo2(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
Return "BC30300"
End Function
'COMPILEERROR: BC30300, "goo3"
Public Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
Return "BC30300"
End Function
Public Function goo3(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
Return "BC30300"
End Function
End Class
Interface Scen2_1
'COMPILEERROR: BC30300, "goo"
Function goo(ByVal arg As ULong)
Function goo(Optional ByVal arg As ULong = 1)
'COMPILEERROR: BC30300, "goo1"
Function goo1()
Function goo1(Optional ByVal arg As ULong = 1)
'COMPILEERROR: BC30300, "goo2"
Function goo2(ByVal arg As Integer)
Function goo2(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
'COMPILEERROR: BC30300, "goo3"
Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
Function goo3(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30300: 'Public Function goo(arg As ULong) As Object' and 'Public Function goo([arg As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
Public Function goo(ByVal arg As ULong)
~~~
BC30300: 'Public Function goo3(arg As Integer, arg1 As ULong) As Object' and 'Public Function goo3(arg As Integer, [arg1 As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
Public Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
~~~~
BC30300: 'Function goo(arg As ULong) As Object' and 'Function goo([arg As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
Function goo(ByVal arg As ULong)
~~~
BC30300: 'Function goo3(arg As Integer, arg1 As ULong) As Object' and 'Function goo3(arg As Integer, [arg1 As ULong = 1]) As Object' cannot overload each other because they differ only by optional parameters.
Function goo3(ByVal arg As Integer, ByVal arg1 As ULong)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30301ERR_OverloadWithReturnType2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateProcDef1">
<file name="a.vb"><![CDATA[
Class C1
End Class
Class C2
End Class
Class C3
Public Function Goo1(x as Integer) as Boolean ' 1
return true
End Function
Public Function Goo1(x as Integer) as Boolean ' 2
return true
End Function
Public Function Goo1(x as Integer) as Boolean ' 3
return true
End Function
Public Function Goo1(x as Integer) as Decimal ' 4
return 2.2
End Function
Public Function Goo1(x as Integer) as String ' 5
return "42"
End Function
Public Function Goo2(Of T as C1)(x as Integer) as T ' 1
return nothing
End Function
Public Function Goo2(Of S as C2)(x as Integer) as S ' 2
return nothing
End Function
Public Function Goo3(x as Integer) as Boolean ' 1
return true
End Function
Public Function Goo3(x as Decimal) as Boolean ' 2
return true
End Function
Public Function Goo3(x as Integer) as Boolean ' 3
return true
End Function
Public Function Goo3(x as Integer) as Boolean ' 4
return true
End Function
Public Function Goo3(x as Integer) as String ' 5
return true
End Function
Public Shared Sub Main()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Public Function Goo1(x As Integer) As Boolean' has multiple definitions with identical signatures.
Public Function Goo1(x as Integer) as Boolean ' 1
~~~~
BC30269: 'Public Function Goo1(x As Integer) As Boolean' has multiple definitions with identical signatures.
Public Function Goo1(x as Integer) as Boolean ' 2
~~~~
BC30301: 'Public Function Goo1(x As Integer) As Boolean' and 'Public Function Goo1(x As Integer) As Decimal' cannot overload each other because they differ only by return types.
Public Function Goo1(x as Integer) as Boolean ' 3
~~~~
BC30301: 'Public Function Goo1(x As Integer) As Decimal' and 'Public Function Goo1(x As Integer) As String' cannot overload each other because they differ only by return types.
Public Function Goo1(x as Integer) as Decimal ' 4
~~~~
BC30269: 'Public Function Goo2(Of T As C1)(x As Integer) As T' has multiple definitions with identical signatures.
Public Function Goo2(Of T as C1)(x as Integer) as T ' 1
~~~~
BC30269: 'Public Function Goo3(x As Integer) As Boolean' has multiple definitions with identical signatures.
Public Function Goo3(x as Integer) as Boolean ' 1
~~~~
BC30269: 'Public Function Goo3(x As Integer) As Boolean' has multiple definitions with identical signatures.
Public Function Goo3(x as Integer) as Boolean ' 3
~~~~
BC30301: 'Public Function Goo3(x As Integer) As Boolean' and 'Public Function Goo3(x As Integer) As String' cannot overload each other because they differ only by return types.
Public Function Goo3(x as Integer) as Boolean ' 4
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30301ERR_OverloadWithReturnType2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithReturnType2">
<file name="a.vb"><![CDATA[
Class Cla30301
'COMPILEERROR: BC30301, "goo"
Public Function goo(ByVal arg As ULong)
Return "BC30301"
End Function
Public Function goo(ByVal arg As ULong) As String
Return "BC30301"
End Function
'COMPILEERROR: BC30301, "goo1"
Public Function goo1()
Return "BC30301"
End Function
Public Function goo1() As String
Return "BC30301"
End Function
End Class
Interface Interface30301
'COMPILEERROR: BC30301, "goo"
Function goo(ByVal arg As ULong)
Function goo(ByVal arg As ULong) As String
'COMPILEERROR: BC30301, "goo1"
Function goo1()
Function goo1() As String
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30301: 'Public Function goo(arg As ULong) As Object' and 'Public Function goo(arg As ULong) As String' cannot overload each other because they differ only by return types.
Public Function goo(ByVal arg As ULong)
~~~
BC30301: 'Public Function goo1() As Object' and 'Public Function goo1() As String' cannot overload each other because they differ only by return types.
Public Function goo1()
~~~~
BC30301: 'Function goo(arg As ULong) As Object' and 'Function goo(arg As ULong) As String' cannot overload each other because they differ only by return types.
Function goo(ByVal arg As ULong)
~~~
BC30301: 'Function goo1() As Object' and 'Function goo1() As String' cannot overload each other because they differ only by return types.
Function goo1()
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30302ERR_TypeCharWithType1_01()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="c.vb"><![CDATA[
Class C
Dim A% As Integer
Dim B& As Long
Dim C@ As Decimal
Dim D! As Single
Dim E# As Double
Dim F$ As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
Dim A% As Integer
~~
BC30302: Type character '&' cannot be used in a declaration with an explicit type.
Dim B& As Long
~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
Dim C@ As Decimal
~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
Dim D! As Single
~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
Dim E# As Double
~~
BC30302: Type character '$' cannot be used in a declaration with an explicit type.
Dim F$ As String
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30302ERR_TypeCharWithType1_02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="c.vb"><![CDATA[
Class C
Property A% As Integer
Property B& As Long
Property C@ As Decimal
Property D! As Single
Property E# As Double
Property F$ As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
Property A% As Integer
~~
BC30302: Type character '&' cannot be used in a declaration with an explicit type.
Property B& As Long
~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
Property C@ As Decimal
~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
Property D! As Single
~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
Property E# As Double
~~
BC30302: Type character '$' cannot be used in a declaration with an explicit type.
Property F$ As String
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30302ERR_TypeCharWithType1_03()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="c.vb"><![CDATA[
Option Infer On
Class C
Shared Sub Main()
For Each x% In New Integer() {1, 1}
Next
For Each x& In New Long() {1, 1}
Next
For Each x! In New Double() {1, 1}
Next
For Each x# In New Double() {1, 1}
Next
For Each x@ In New Decimal() {1, 1}
Next
'COMPILEERROR: BC30302
For Each x% As Long In New Long() {1, 1, 1}
Next
For Each x# As Single In New Double() {1, 1, 1}
Next
For Each x@ As Decimal In New Decimal() {1, 1, 1}
Next
For Each x! As Object In New Long() {1, 1, 1}
Next
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
For Each x% As Long In New Long() {1, 1, 1}
~~
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
For Each x# As Single In New Double() {1, 1, 1}
~~
BC30302: Type character '@' cannot be used in a declaration with an explicit type.
For Each x@ As Decimal In New Decimal() {1, 1, 1}
~~
BC30302: Type character '!' cannot be used in a declaration with an explicit type.
For Each x! As Object In New Long() {1, 1, 1}
~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30302ERR_TypeCharWithType1_04()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="c.vb"><![CDATA[
Option Infer On
Imports System
Module Module1
Sub Main()
Dim arr15#(,) As Double ' Invalid
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30302: Type character '#' cannot be used in a declaration with an explicit type.
Dim arr15#(,) As Double ' Invalid
~~~~~~
BC42024: Unused local variable: 'arr15'.
Dim arr15#(,) As Double ' Invalid
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30303ERR_TypeCharOnSub()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeCharOnSub">
<file name="a.vb"><![CDATA[
Interface I1
Sub x%()
Sub x#()
Sub x@()
Sub x!()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30269: 'Sub x()' has multiple definitions with identical signatures.
Sub x%()
~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
Sub x%()
~~
BC30269: 'Sub x()' has multiple definitions with identical signatures.
Sub x#()
~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
Sub x#()
~~
BC30269: 'Sub x()' has multiple definitions with identical signatures.
Sub x@()
~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
Sub x@()
~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
Sub x!()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30305ERR_PartialMethodDefaultParameterValue2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
'COMPILEERROR: BC30305, "Goo6"
Partial Private Sub Goo6(Optional ByVal x As Integer = 1)
End Sub
Private Sub Goo6(Optional ByVal x As Integer = 2)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC37203: Optional parameter of a method 'Private Sub Goo6([x As Integer = 2])' does not have the same default value as the corresponding parameter of the partial method 'Private Sub Goo6([x As Integer = 1])'.
Private Sub Goo6(Optional ByVal x As Integer = 2)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30305ERR_OverloadWithDefault2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
'COMPILEERROR: BC30305, "Goo6"
Partial Private Sub Goo6(Optional ByVal x As Integer = 1)
End Sub
Sub Goo6(Optional ByVal x As Integer = 2)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31441: Method 'Goo6' must be declared 'Private' in order to implement partial method 'Goo6'.
Sub Goo6(Optional ByVal x As Integer = 2)
~~~~
BC37203: Optional parameter of a method 'Public Sub Goo6([x As Integer = 2])' does not have the same default value as the corresponding parameter of the partial method 'Private Sub Goo6([x As Integer = 1])'.
Sub Goo6(Optional ByVal x As Integer = 2)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(ParamArray x() As Integer)
End Sub
Private Sub Goo6(x() As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC37204: Parameter of a method 'Private Sub Goo6(x As Integer())' differs by ParamArray modifier from the corresponding parameter of the partial method 'Private Sub Goo6(ParamArray x As Integer())'.
Private Sub Goo6(x() As Integer)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(x() As Integer)
End Sub
Private Sub Goo6(ParamArray x() As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC37204: Parameter of a method 'Private Sub Goo6(ParamArray x As Integer())' differs by ParamArray modifier from the corresponding parameter of the partial method 'Private Sub Goo6(x As Integer())'.
Private Sub Goo6(ParamArray x() As Integer)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
''' <remarks>Only use with PEModuleSymbol and PEParameterSymbol</remarks>
Private Sub AssertHasExactlyOneParamArrayAttribute(m As ModuleSymbol, paramSymbol As ParameterSymbol)
Dim peModule = DirectCast(m, PEModuleSymbol).Module
Dim paramHandle = DirectCast(paramSymbol, PEParameterSymbol).Handle
Assert.Equal(1, peModule.GetParamArrayCountOrThrow(paramHandle))
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
Private Sub Goo6(x() As Integer)
End Sub
Sub Use()
Goo6()
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.True(GooParam.IsParamArray)
AssertHasExactlyOneParamArrayAttribute(m, GooParam)
End Sub)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(x() As Integer)
End Sub
Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
Sub Use()
Goo6()
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.True(GooParam.IsParamArray)
AssertHasExactlyOneParamArrayAttribute(m, GooParam)
End Sub)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(ParamArray x() As Integer)
End Sub
Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
Sub Use()
Goo6()
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.True(GooParam.IsParamArray)
AssertHasExactlyOneParamArrayAttribute(m, GooParam)
End Sub)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
Private Sub Goo6(ParamArray x() As Integer)
End Sub
Sub Use()
Goo6()
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.True(GooParam.IsParamArray)
AssertHasExactlyOneParamArrayAttribute(m, GooParam)
End Sub)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_7()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
Private Sub Goo6(<System.ParamArray()> x() As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30663: Attribute 'ParamArrayAttribute' cannot be applied multiple times.
Private Sub Goo6(<System.ParamArray()> x() As Integer)
~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_8()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(ParamArray x() As Integer)
End Sub
Private Sub Goo6(ParamArray x() As Integer)
End Sub
Sub Use()
Goo6()
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.True(GooParam.IsParamArray)
AssertHasExactlyOneParamArrayAttribute(m, GooParam)
End Sub)
End Sub
<Fact>
Public Sub ERR_PartialMethodParamArrayMismatch2_9()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Public Class Cls30305
Partial Private Sub Goo6(x() As Integer)
End Sub
Private Sub Goo6(x() As Integer)
End Sub
Sub Use()
Goo6(Nothing)
End Sub
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All))
CompileAndVerify(compilation1,
symbolValidator:=Sub(m As ModuleSymbol)
Dim Cls30305 = m.GlobalNamespace.GetTypeMember("Cls30305")
Dim Goo6 = Cls30305.GetMember(Of MethodSymbol)("Goo6")
Dim GooParam = Goo6.Parameters(0)
Assert.Equal(0, GooParam.GetAttributes().Length)
Assert.False(GooParam.IsParamArray)
End Sub)
End Sub
<Fact()>
Public Sub BC30307ERR_OverrideWithDefault2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OverloadWithDefault2">
<file name="a.vb"><![CDATA[
Module mod30307
Class Class1
Overridable Sub Scen1(Optional ByVal x As String = "bob")
End Sub
Overridable Sub Scen2(Optional ByVal x As Object = "bob")
End Sub
Overridable Function Scen3(Optional ByVal x As Integer = 3)
End Function
Overridable Function Scen4(Optional ByVal x As Integer = 3)
End Function
End Class
Class class2
Inherits Class1
'COMPILEERROR: BC30307, "Scen1"
Overrides Sub Scen1(Optional ByVal x As String = "BOB")
End Sub
'COMPILEERROR: BC30307, "Scen2"
Overrides Sub Scen2(Optional ByVal x As Object = "BOB")
End Sub
Overrides Function Scen3(Optional ByVal x As Integer = 2 + 1)
End Function
'COMPILEERROR: BC30307, "Scen4"
Overrides Function Scen4(Optional ByVal x As Integer = 4)
End Function
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30307: 'Public Overrides Sub Scen1([x As String = "BOB"])' cannot override 'Public Overridable Sub Scen1([x As String = "bob"])' because they differ by the default values of optional parameters.
Overrides Sub Scen1(Optional ByVal x As String = "BOB")
~~~~~
BC30307: 'Public Overrides Sub Scen2([x As Object = "BOB"])' cannot override 'Public Overridable Sub Scen2([x As Object = "bob"])' because they differ by the default values of optional parameters.
Overrides Sub Scen2(Optional ByVal x As Object = "BOB")
~~~~~
BC30307: 'Public Overrides Function Scen4([x As Integer = 4]) As Object' cannot override 'Public Overridable Function Scen4([x As Integer = 3]) As Object' because they differ by the default values of optional parameters.
Overrides Function Scen4(Optional ByVal x As Integer = 4)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30308ERR_OverrideWithOptional2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OverrideWithOptional2">
<file name="a.vb"><![CDATA[
Module mod30308
Class Class1
Overridable Sub Scen1(Optional ByVal x As String = "bob")
End Sub
Overridable Sub Scen2(Optional ByVal x As Object = "bob")
End Sub
Overridable Function Scen3(Optional ByVal x As Integer = 3)
End Function
Overridable Function Scen4(Optional ByVal x As Integer = 3)
End Function
End Class
Class class2
Inherits Class1
'COMPILEERROR: BC30308, "Scen1"
Overrides Sub Scen1(ByVal x As String)
End Sub
'COMPILEERROR: BC30308, "Scen2"
Overrides Sub Scen2(ByVal x As Object)
End Sub
Overrides Function Scen3(ByVal x As Integer)
End Function
'COMPILEERROR: BC30308, "Scen4"
Overrides Function Scen4(ByVal x As Integer)
End Function
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30308: 'Public Overrides Sub Scen1(x As String)' cannot override 'Public Overridable Sub Scen1([x As String = "bob"])' because they differ by optional parameters.
Overrides Sub Scen1(ByVal x As String)
~~~~~
BC30308: 'Public Overrides Sub Scen2(x As Object)' cannot override 'Public Overridable Sub Scen2([x As Object = "bob"])' because they differ by optional parameters.
Overrides Sub Scen2(ByVal x As Object)
~~~~~
BC30308: 'Public Overrides Function Scen3(x As Integer) As Object' cannot override 'Public Overridable Function Scen3([x As Integer = 3]) As Object' because they differ by optional parameters.
Overrides Function Scen3(ByVal x As Integer)
~~~~~
BC30308: 'Public Overrides Function Scen4(x As Integer) As Object' cannot override 'Public Overridable Function Scen4([x As Integer = 3]) As Object' because they differ by optional parameters.
Overrides Function Scen4(ByVal x As Integer)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30345ERR_OverloadWithByref2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithByref2">
<file name="a.vb"><![CDATA[
Public Class Cls30345
Public overloads Sub Goo1(ByVal x as Integer) ' 1
End Sub
Public overloads Sub Goo1(ByRef x as Integer) ' 2
End Sub
Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
return 1
End Function
Public overloads Function Goo2(ByRef x as Integer) as Decimal' 2
return 2.2
End Function
Public Shared Sub Main()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30345: 'Public Overloads Sub Goo1(x As Integer)' and 'Public Overloads Sub Goo1(ByRef x As Integer)' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
Public overloads Sub Goo1(ByVal x as Integer) ' 1
~~~~
BC30301: 'Public Overloads Function Goo2(x As Integer) As Integer' and 'Public Overloads Function Goo2(ByRef x As Integer) As Decimal' cannot overload each other because they differ only by return types.
Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
~~~~
BC30345: 'Public Overloads Function Goo2(x As Integer) As Integer' and 'Public Overloads Function Goo2(ByRef x As Integer) As Decimal' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
Public overloads Function Goo2(ByVal x as Integer) as Integer' 1
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30345ERR_OverloadWithByref2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithByref2">
<file name="a.vb"><![CDATA[
Public Class Cls30345
'COMPILEERROR: BC30345, "Goo"
Partial Private Sub Goo(Optional ByVal x As Integer = 2)
End Sub
Sub Goo(Optional ByRef x As Integer = 2)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30345: 'Private Sub Goo([x As Integer = 2])' and 'Public Sub Goo([ByRef x As Integer = 2])' cannot overload each other because they differ only by parameters declared 'ByRef' or 'ByVal'.
Partial Private Sub Goo(Optional ByVal x As Integer = 2)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30354ERR_InheritsFromNonInterface()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InheritsFromNonInterface">
<file name="a.vb"><![CDATA[
Module M1
Interface I1
Inherits System.Enum
End Interface
Interface I2
Inherits Scen1
End Interface
Interface I3
Inherits System.Exception
End Interface
NotInheritable Class Scen1
End Class
END Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30354: Interface can inherit only from another interface.
Inherits System.Enum
~~~~~~~~~~~
BC30354: Interface can inherit only from another interface.
Inherits Scen1
~~~~~
BC30354: Interface can inherit only from another interface.
Inherits System.Exception
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30359ERR_DuplicateDefaultProps1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
Default Property P(o)
ReadOnly Property Q(o)
Default WriteOnly Property R(o) ' BC30359
Default Property P(x, y)
Default Property Q(x, y) ' BC30359
Property R(x, y)
End Interface
Class C
Default Property P(o)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
ReadOnly Property Q(o)
Get
Return Nothing
End Get
End Property
Default WriteOnly Property R(o) ' BC30359
Set(value)
End Set
End Property
Default Property P(x, y)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Default Property Q(x, y) ' BC30359
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Property R(x, y)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Class
Structure S
Default Property P(o)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
ReadOnly Property Q(o)
Get
Return Nothing
End Get
End Property
Default WriteOnly Property R(o) ' BC30359
Set(value)
End Set
End Property
Default Property P(x, y)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Default Property Q(x, y) ' BC30359
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Property R(x, y)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
compilation1.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC30359: 'Default' can be applied to only one property name in a interface.
Default WriteOnly Property R(o) ' BC30359
~
BC30359: 'Default' can be applied to only one property name in a interface.
Default Property Q(x, y) ' BC30359
~
BC30359: 'Default' can be applied to only one property name in a class.
Default WriteOnly Property R(o) ' BC30359
~
BC30359: 'Default' can be applied to only one property name in a class.
Default Property Q(x, y) ' BC30359
~
BC30359: 'Default' can be applied to only one property name in a structure.
Default WriteOnly Property R(o) ' BC30359
~
BC30359: 'Default' can be applied to only one property name in a structure.
Default Property Q(x, y) ' BC30359
~
]]></errors>)
End Sub
' Property names with different case.
<Fact>
Public Sub BC30359ERR_DuplicateDefaultProps1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
Default ReadOnly Property P(o)
Default WriteOnly Property p(x, y)
End Interface
Class C
Default ReadOnly Property q(o)
Get
Return Nothing
End Get
End Property
Default WriteOnly Property Q(x, y)
Set(value)
End Set
End Property
End Class
Structure S
Default ReadOnly Property R(o)
Get
Return Nothing
End Get
End Property
Default WriteOnly Property r(x, y)
Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
compilation1.AssertNoErrors()
End Sub
<Fact>
Public Sub BC30361ERR_DefaultMissingFromProperty2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefaultMissingFromProperty2">
<file name="a.vb"><![CDATA[
MustInherit Class C
Default Overridable Overloads ReadOnly Property P(x, y)
Get
Return Nothing
End Get
End Property
MustOverride Overloads Property P
End Class
Interface I
Overloads WriteOnly Property Q(o)
Overloads ReadOnly Property Q
Default Overloads Property Q(x, y)
End Interface
Structure S
ReadOnly Property R(x)
Get
Return Nothing
End Get
End Property
Default ReadOnly Property R(x, y)
Get
Return Nothing
End Get
End Property
Default ReadOnly Property R(x, y, z)
Get
Return Nothing
End Get
End Property
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30361: 'Public Overridable Overloads ReadOnly Default Property P(x As Object, y As Object) As Object' and 'Public MustOverride Overloads Property P As Object' cannot overload each other because only one is declared 'Default'.
MustOverride Overloads Property P
~
BC30361: 'Default Property Q(x As Object, y As Object) As Object' and 'WriteOnly Property Q(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
Overloads WriteOnly Property Q(o)
~
BC30361: 'Default Property Q(x As Object, y As Object) As Object' and 'ReadOnly Property Q As Object' cannot overload each other because only one is declared 'Default'.
Overloads ReadOnly Property Q
~
BC30361: 'Public ReadOnly Default Property R(x As Object, y As Object) As Object' and 'Public ReadOnly Property R(x As Object) As Object' cannot overload each other because only one is declared 'Default'.
ReadOnly Property R(x)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Property names with different case.
<Fact>
Public Sub BC30361ERR_DefaultMissingFromProperty2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DefaultMissingFromProperty2">
<file name="a.vb"><![CDATA[
Interface I
Default Overloads ReadOnly Property P(o)
Overloads WriteOnly Property p(x, y)
End Interface
Class C
Overloads ReadOnly Property q(o)
Get
Return Nothing
End Get
End Property
Default Overloads WriteOnly Property Q(x, y)
Set(value)
End Set
End Property
End Class
Structure S
Overloads ReadOnly Property R(o)
Get
Return Nothing
End Get
End Property
Default Overloads WriteOnly Property r(x, y)
Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
compilation1.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC30361: 'ReadOnly Default Property P(o As Object) As Object' and 'WriteOnly Property p(x As Object, y As Object) As Object' cannot overload each other because only one is declared 'Default'.
Overloads WriteOnly Property p(x, y)
~
BC30361: 'Public Overloads WriteOnly Default Property Q(x As Object, y As Object) As Object' and 'Public Overloads ReadOnly Property q(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
Overloads ReadOnly Property q(o)
~
BC30361: 'Public Overloads WriteOnly Default Property r(x As Object, y As Object) As Object' and 'Public Overloads ReadOnly Property R(o As Object) As Object' cannot overload each other because only one is declared 'Default'.
Overloads ReadOnly Property R(o)
~
]]></errors>)
End Sub
<Fact>
Public Sub BC30362ERR_OverridingPropertyKind2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverridingPropertyKind2">
<file name="a.vb"><![CDATA[
Public Class Class1
Dim xprop11, xprop12
Public Overridable ReadOnly Property prop10()
Get
Return "Class1 prop10"
End Get
End Property
Public Overridable WriteOnly Property prop11()
Set(ByVal Value)
xprop11 = Value
End Set
End Property
Public Overridable Property prop12()
Get
prop12 = xprop12
End Get
Set(ByVal Value)
xprop12 = Value
End Set
End Property
End Class
Public Class Class2
Inherits Class1
'COMPILEERROR: BC30362, "prop10"
Overrides WriteOnly Property prop10()
Set(ByVal Value)
End Set
End Property
'COMPILEERROR: BC30362, "prop11"
Overrides ReadOnly Property prop11()
Get
End Get
End Property
'COMPILEERROR: BC30362, "prop12"
Overrides ReadOnly Property prop12()
Get
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30362: 'Public Overrides WriteOnly Property prop10 As Object' cannot override 'Public Overridable ReadOnly Property prop10 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
Overrides WriteOnly Property prop10()
~~~~~~
BC30362: 'Public Overrides ReadOnly Property prop11 As Object' cannot override 'Public Overridable WriteOnly Property prop11 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
Overrides ReadOnly Property prop11()
~~~~~~
BC30362: 'Public Overrides ReadOnly Property prop12 As Object' cannot override 'Public Overridable Property prop12 As Object' because they differ by 'ReadOnly' or 'WriteOnly'.
Overrides ReadOnly Property prop12()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30362ERR_OverridingPropertyKind3()
Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="OverridingPropertyKind3">
<file name="a.vb"><![CDATA[
Class D3
Inherits D2
Public Overrides Property P_rw_rw_r As Integer
Get
Return MyBase.P_rw_rw_r
End Get
Set(value As Integer)
MyBase.P_rw_r_w = value
End Set
End Property
Public Overrides Property P_rw_rw_w As Integer
Get
Return MyBase.P_rw_rw_r
End Get
Set(value As Integer)
MyBase.P_rw_rw_w = value
End Set
End Property
End Class
]]></file>
</compilation>, ClassesWithReadWriteProperties)
Dim expectedErrors1 = <errors><![CDATA[
BC30362: 'Public Overrides Property P_rw_rw_r As Integer' cannot override 'Public Overrides ReadOnly Property P_rw_rw_r As Integer' because they differ by 'ReadOnly' or 'WriteOnly'.
Public Overrides Property P_rw_rw_r As Integer
~~~~~~~~~
BC30362: 'Public Overrides Property P_rw_rw_w As Integer' cannot override 'Public Overrides WriteOnly Property P_rw_rw_w As Integer' because they differ by 'ReadOnly' or 'WriteOnly'.
Public Overrides Property P_rw_rw_w As Integer
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30364ERR_BadFlagsOnNew1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadFlagsOnNew1">
<file name="a.vb"><![CDATA[
Class S1
overridable SUB NEW()
end sub
End Class
Class S2
Shadows SUB NEW()
end sub
End Class
Class S3
MustOverride SUB NEW()
End Class
Class S4
notoverridable SUB NEW()
end sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30364: 'Sub New' cannot be declared 'overridable'.
overridable SUB NEW()
~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'Shadows'.
Shadows SUB NEW()
~~~~~~~
BC30364: 'Sub New' cannot be declared 'MustOverride'.
MustOverride SUB NEW()
~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'notoverridable'.
notoverridable SUB NEW()
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30366ERR_OverloadingPropertyKind2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadingPropertyKind2">
<file name="a.vb"><![CDATA[
Class Cls30366(Of T)
' COMPILEERROR: BC30366, "P1"
ReadOnly Property P1() As T
Get
End Get
End Property
' COMPILEERROR: BC30366, "P2"
WriteOnly Property P2() As T
Set(ByVal Value As T)
End Set
End Property
Default Property P3(ByVal i As Integer) As T
Get
End Get
Set(ByVal Value As T)
End Set
End Property
End Class
Partial Class Cls30366(Of T)
WriteOnly Property P1() As T
Set(ByVal Value As T)
End Set
End Property
ReadOnly Property P2() As T
Get
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30366: 'Public ReadOnly Property P1 As T' and 'Public WriteOnly Property P1 As T' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
ReadOnly Property P1() As T
~~
BC30366: 'Public WriteOnly Property P2 As T' and 'Public ReadOnly Property P2 As T' cannot overload each other because they differ only by 'ReadOnly' or 'WriteOnly'.
WriteOnly Property P2() As T
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30368ERR_OverloadWithArrayVsParamArray2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithArrayVsParamArray2">
<file name="a.vb"><![CDATA[
Class Cls30368_1(Of T)
Sub goo(ByVal p() As String)
End Sub
Sub goo(ByVal ParamArray v() As String)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30368: 'Public Sub goo(p As String())' and 'Public Sub goo(ParamArray v As String())' cannot overload each other because they differ only by parameters declared 'ParamArray'.
Sub goo(ByVal p() As String)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30368ERR_OverloadWithArrayVsParamArray2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithArrayVsParamArray2">
<file name="a.vb"><![CDATA[
Class Cls30368_1(Of T)
Sub goo(ByVal p() As String)
End Sub
Sub goo(ByVal ParamArray v() As String)
End Sub
End Class
Class Cls30368(Of T)
Overloads Property Goo1(ByVal x()) As String
Get
Goo1 = "get: VariantArray"
End Get
Set(ByVal Value As String)
End Set
End Property
Overloads Property Goo1(ByVal ParamArray x()) As String
Get
Goo1 = "get: ParamArray"
End Get
Set(ByVal Value As String)
End Set
End Property
Overloads Property Goo2(ByVal x()) As String
Get
Goo2 = "get: FixedArray"
End Get
Set(ByVal Value As String)
End Set
End Property
Overloads Property Goo2(ByVal ParamArray x()) As String
Get
Goo2 = "get: ParamArray"
End Get
Set(ByVal Value As String)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30368: 'Public Sub goo(p As String())' and 'Public Sub goo(ParamArray v As String())' cannot overload each other because they differ only by parameters declared 'ParamArray'.
Sub goo(ByVal p() As String)
~~~
BC30368: 'Public Overloads Property Goo1(x As Object()) As String' and 'Public Overloads Property Goo1(ParamArray x As Object()) As String' cannot overload each other because they differ only by parameters declared 'ParamArray'.
Overloads Property Goo1(ByVal x()) As String
~~~~
BC30368: 'Public Overloads Property Goo2(x As Object()) As String' and 'Public Overloads Property Goo2(ParamArray x As Object()) As String' cannot overload each other because they differ only by parameters declared 'ParamArray'.
Overloads Property Goo2(ByVal x()) As String
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30371ERR_ModuleAsType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
End Module
Module M2
End Module
Module M3
End Module
Interface IA(Of T As M1)
End Interface
Interface IB
Sub M(Of T As M2)()
End Interface
Interface IC(Of T)
End Interface
Class C
Shared Sub M(o As IC(Of M3))
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30371: Module 'M1' cannot be used as a type.
Interface IA(Of T As M1)
~~
BC30371: Module 'M2' cannot be used as a type.
Sub M(Of T As M2)()
~~
BC30371: Module 'M3' cannot be used as a type.
Shared Sub M(o As IC(Of M3))
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30371ERR_ModuleAsType1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
Class C1
Function goo As M1
Return Nothing
End Function
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30371: Module 'M1' cannot be used as a type.
Function goo As M1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30385ERR_BadDelegateFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadDelegateFlags1">
<file name="a.vb"><![CDATA[
Class C1
MustOverride Delegate Sub Del1()
NotOverridable Delegate Sub Del2()
Shared Delegate Sub Del3()
Overrides Delegate Sub Del4()
Overloads Delegate Sub Del5(ByRef y As Integer)
Partial Delegate Sub Del6()
Default Delegate Sub Del7()
ReadOnly Delegate Sub Del8()
WriteOnly Delegate Sub Del9()
MustInherit Delegate Sub Del10()
NotInheritable Delegate Sub Del11()
Widening Delegate Sub Del12()
Narrowing Delegate Sub Del13()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30385: 'MustOverride' is not valid on a Delegate declaration.
MustOverride Delegate Sub Del1()
~~~~~~~~~~~~
BC30385: 'NotOverridable' is not valid on a Delegate declaration.
NotOverridable Delegate Sub Del2()
~~~~~~~~~~~~~~
BC30385: 'Shared' is not valid on a Delegate declaration.
Shared Delegate Sub Del3()
~~~~~~
BC30385: 'Overrides' is not valid on a Delegate declaration.
Overrides Delegate Sub Del4()
~~~~~~~~~
BC30385: 'Overloads' is not valid on a Delegate declaration.
Overloads Delegate Sub Del5(ByRef y As Integer)
~~~~~~~~~
BC30385: 'Partial' is not valid on a Delegate declaration.
Partial Delegate Sub Del6()
~~~~~~~
BC30385: 'Default' is not valid on a Delegate declaration.
Default Delegate Sub Del7()
~~~~~~~
BC30385: 'ReadOnly' is not valid on a Delegate declaration.
ReadOnly Delegate Sub Del8()
~~~~~~~~
BC30385: 'WriteOnly' is not valid on a Delegate declaration.
WriteOnly Delegate Sub Del9()
~~~~~~~~~
BC30385: 'MustInherit' is not valid on a Delegate declaration.
MustInherit Delegate Sub Del10()
~~~~~~~~~~~
BC30385: 'NotInheritable' is not valid on a Delegate declaration.
NotInheritable Delegate Sub Del11()
~~~~~~~~~~~~~~
BC30385: 'Widening' is not valid on a Delegate declaration.
Widening Delegate Sub Del12()
~~~~~~~~
BC30385: 'Narrowing' is not valid on a Delegate declaration.
Narrowing Delegate Sub Del13()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(538884, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538884")>
<Fact>
Public Sub BC30385ERR_BadDelegateFlags1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadDelegateFlags1">
<file name="a.vb"><![CDATA[
Structure S1
MustOverride Delegate Sub Del1()
NotOverridable Delegate Sub Del1()
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30385: 'MustOverride' is not valid on a Delegate declaration.
MustOverride Delegate Sub Del1()
~~~~~~~~~~~~
BC30385: 'NotOverridable' is not valid on a Delegate declaration.
NotOverridable Delegate Sub Del1()
~~~~~~~~~~~~~~
BC30179: delegate Class 'Del1' and delegate Class 'Del1' conflict in structure 'S1'.
NotOverridable Delegate Sub Del1()
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30389ERR_InaccessibleSymbol2_AccessCheckCrossAssemblyDerived()
Dim other As VisualBasicCompilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AccessCheckCrossAssemblyDerived1">
<file name="a.vb"><![CDATA[
Public Class C
Public Shared c_pub As Integer
Friend Shared c_int As Integer
Protected Shared c_pro As Integer
Protected Friend Shared c_intpro As Integer
Private Shared c_priv As Integer
End Class
Friend Class D
Public Shared d_pub As Integer
End Class
]]></file>
</compilation>)
CompilationUtils.AssertNoErrors(other)
Dim comp As VisualBasicCompilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="AccessCheckCrossAssemblyDerived2">
<file name="a.vb"><![CDATA[
Public Class A
Inherits C
Public Sub m()
Dim aa As Integer = C.c_pub
Dim bb As Integer = C.c_int
Dim cc As Integer = C.c_pro
Dim dd As Integer = C.c_intpro
Dim ee As Integer = C.c_priv
Dim ff As Integer = D.d_pub
End Sub
End Class
]]></file>
</compilation>,
{New VisualBasicCompilationReference(other)})
'BC30389: 'C.c_int' is not accessible in this context because it is 'Friend'.
' Dim bb As Integer = C.c_int
' ~~~~~~~
'BC30389: 'C.c_priv' is not accessible in this context because it is 'Private'.
' Dim ee As Integer = C.c_priv
' ~~~~~~~~
'BC30389: 'D' is not accessible in this context because it is 'Friend'.
' Dim ff As Integer = D.d_pub
' ~
comp.VerifyDiagnostics(Diagnostic(ERRID.ERR_InaccessibleSymbol2, "C.c_int").WithArguments("C.c_int", "Friend"),
Diagnostic(ERRID.ERR_InaccessibleSymbol2, "C.c_priv").WithArguments("C.c_priv", "Private"),
Diagnostic(ERRID.ERR_InaccessibleSymbol2, "D").WithArguments("D", "Friend"))
End Sub
<Fact>
Public Sub BC30395ERR_BadRecordFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ERR_BadRecordFlags1">
<file name="a.vb"><![CDATA[
MustOverride Structure Del1
End Structure
NotOverridable Structure Del2
End Structure
Shared Structure Del3
End Structure
Overrides Structure Del4
End Structure
Overloads Structure Del5
End Structure
Partial Structure Del6
End Structure
Default Structure Del7
End Structure
ReadOnly Structure Del8
End Structure
WriteOnly Structure Del9
End Structure
Widening Structure Del12
End Structure
Narrowing Structure Del13
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30395: 'MustOverride' is not valid on a Structure declaration.
MustOverride Structure Del1
~~~~~~~~~~~~
BC30395: 'NotOverridable' is not valid on a Structure declaration.
NotOverridable Structure Del2
~~~~~~~~~~~~~~
BC30395: 'Shared' is not valid on a Structure declaration.
Shared Structure Del3
~~~~~~
BC30395: 'Overrides' is not valid on a Structure declaration.
Overrides Structure Del4
~~~~~~~~~
BC30395: 'Overloads' is not valid on a Structure declaration.
Overloads Structure Del5
~~~~~~~~~
BC30395: 'Default' is not valid on a Structure declaration.
Default Structure Del7
~~~~~~~
BC30395: 'ReadOnly' is not valid on a Structure declaration.
ReadOnly Structure Del8
~~~~~~~~
BC30395: 'WriteOnly' is not valid on a Structure declaration.
WriteOnly Structure Del9
~~~~~~~~~
BC30395: 'Widening' is not valid on a Structure declaration.
Widening Structure Del12
~~~~~~~~
BC30395: 'Narrowing' is not valid on a Structure declaration.
Narrowing Structure Del13
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30396ERR_BadEnumFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadEnumFlags1">
<file name="a.vb"><![CDATA[
MustOverride enum Del1
male
End enum
NotOverridable enum Del2
male
End enum
Shared enum Del3
male
End enum
Overrides enum Del4
male
End enum
Overloads enum Del5
male
End enum
Partial enum Del6
male
End enum
Default enum Del7
male
End enum
ReadOnly enum Del8
male
End enum
WriteOnly enum Del9
male
End enum
Widening enum Del12
male
End enum
Narrowing enum Del13
male
End enum
MustInherit Enum Del14
male
End Enum
NotInheritable Enum Del15
male
End Enum
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30396: 'MustOverride' is not valid on an Enum declaration.
MustOverride enum Del1
~~~~~~~~~~~~
BC30396: 'NotOverridable' is not valid on an Enum declaration.
NotOverridable enum Del2
~~~~~~~~~~~~~~
BC30396: 'Shared' is not valid on an Enum declaration.
Shared enum Del3
~~~~~~
BC30396: 'Overrides' is not valid on an Enum declaration.
Overrides enum Del4
~~~~~~~~~
BC30396: 'Overloads' is not valid on an Enum declaration.
Overloads enum Del5
~~~~~~~~~
BC30396: 'Partial' is not valid on an Enum declaration.
Partial enum Del6
~~~~~~~
BC30396: 'Default' is not valid on an Enum declaration.
Default enum Del7
~~~~~~~
BC30396: 'ReadOnly' is not valid on an Enum declaration.
ReadOnly enum Del8
~~~~~~~~
BC30396: 'WriteOnly' is not valid on an Enum declaration.
WriteOnly enum Del9
~~~~~~~~~
BC30396: 'Widening' is not valid on an Enum declaration.
Widening enum Del12
~~~~~~~~
BC30396: 'Narrowing' is not valid on an Enum declaration.
Narrowing enum Del13
~~~~~~~~~
BC30396: 'MustInherit' is not valid on an Enum declaration.
MustInherit Enum Del14
~~~~~~~~~~~
BC30396: 'NotInheritable' is not valid on an Enum declaration.
NotInheritable Enum Del15
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30397ERR_BadInterfaceFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceFlags1">
<file name="a.vb"><![CDATA[
Class C1
MustOverride Interface Del1
End Interface
NotOverridable Interface Del2
End Interface
Shared Interface Del3
End Interface
Overrides Interface Del4
End Interface
Overloads Interface Del5
End Interface
Default Interface Del7
End Interface
ReadOnly Interface Del8
End Interface
WriteOnly Interface Del9
End Interface
Widening Interface Del12
End Interface
Narrowing Interface Del13
End Interface
MustInherit Interface Del14
End Interface
NotInheritable Interface Del15
End Interface
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30397: 'MustOverride' is not valid on an Interface declaration.
MustOverride Interface Del1
~~~~~~~~~~~~
BC30397: 'NotOverridable' is not valid on an Interface declaration.
NotOverridable Interface Del2
~~~~~~~~~~~~~~
BC30397: 'Shared' is not valid on an Interface declaration.
Shared Interface Del3
~~~~~~
BC30397: 'Overrides' is not valid on an Interface declaration.
Overrides Interface Del4
~~~~~~~~~
BC30397: 'Overloads' is not valid on an Interface declaration.
Overloads Interface Del5
~~~~~~~~~
BC30397: 'Default' is not valid on an Interface declaration.
Default Interface Del7
~~~~~~~
BC30397: 'ReadOnly' is not valid on an Interface declaration.
ReadOnly Interface Del8
~~~~~~~~
BC30397: 'WriteOnly' is not valid on an Interface declaration.
WriteOnly Interface Del9
~~~~~~~~~
BC30397: 'Widening' is not valid on an Interface declaration.
Widening Interface Del12
~~~~~~~~
BC30397: 'Narrowing' is not valid on an Interface declaration.
Narrowing Interface Del13
~~~~~~~~~
BC30397: 'MustInherit' is not valid on an Interface declaration.
MustInherit Interface Del14
~~~~~~~~~~~
BC30397: 'NotInheritable' is not valid on an Interface declaration.
NotInheritable Interface Del15
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30398ERR_OverrideWithByref2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OverrideWithByref2">
<file name="a.vb"><![CDATA[
Module mod30398
Class Class1
Overridable Sub Scen1(ByRef x As String)
End Sub
Overridable Sub Scen2(ByRef x As Object)
End Sub
Overridable Function Scen3(ByRef x As Integer)
End Function
Overridable Function Scen4(ByRef x As Integer)
End Function
End Class
Class class2
Inherits Class1
'COMPILEERROR: BC30398, "Scen1"
Overrides Sub Scen1(ByVal x As String)
End Sub
'COMPILEERROR: BC30398, "Scen2"
Overrides Sub Scen2(ByVal x As Object)
End Sub
Overrides Function Scen3(ByVal x As Integer)
End Function
'COMPILEERROR: BC30398, "Scen4"
Overrides Function Scen4(ByVal x As Integer)
End Function
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30398: 'Public Overrides Sub Scen1(x As String)' cannot override 'Public Overridable Sub Scen1(ByRef x As String)' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
Overrides Sub Scen1(ByVal x As String)
~~~~~
BC30398: 'Public Overrides Sub Scen2(x As Object)' cannot override 'Public Overridable Sub Scen2(ByRef x As Object)' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
Overrides Sub Scen2(ByVal x As Object)
~~~~~
BC30398: 'Public Overrides Function Scen3(x As Integer) As Object' cannot override 'Public Overridable Function Scen3(ByRef x As Integer) As Object' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
Overrides Function Scen3(ByVal x As Integer)
~~~~~
BC30398: 'Public Overrides Function Scen4(x As Integer) As Object' cannot override 'Public Overridable Function Scen4(ByRef x As Integer) As Object' because they differ by a parameter that is marked as 'ByRef' versus 'ByVal'.
Overrides Function Scen4(ByVal x As Integer)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30401ERR_IdentNotMemberOfInterface4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="IdentNotMemberOfInterface4">
<file name="a.vb"><![CDATA[
Interface IA
Function F() As Integer
Property P As Object
End Interface
Interface IB
End Interface
Class A
Implements IA
Public Function F(o As Object) As Integer Implements IA.F
Return Nothing
End Function
Public Property P As Boolean Implements IA.P
End Class
Class B
Implements IB
Public Function F() As Integer Implements IB.F
Return Nothing
End Function
Public Property P As Boolean Implements IB.P
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'A' must implement 'Function F() As Integer' for interface 'IA'.
Implements IA
~~
BC30149: Class 'A' must implement 'Property P As Object' for interface 'IA'.
Implements IA
~~
BC30401: 'F' cannot implement 'F' because there is no matching function on interface 'IA'.
Public Function F(o As Object) As Integer Implements IA.F
~~~~
BC30401: 'P' cannot implement 'P' because there is no matching property on interface 'IA'.
Public Property P As Boolean Implements IA.P
~~~~
BC30401: 'F' cannot implement 'F' because there is no matching function on interface 'IB'.
Public Function F() As Integer Implements IB.F
~~~~
BC30401: 'P' cannot implement 'P' because there is no matching property on interface 'IB'.
Public Property P As Boolean Implements IB.P
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30412ERR_WithEventsRequiresClass()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="WithEventsRequiresClass">
<file name="a.vb"><![CDATA[
Class ClsTest30412
'COMPILEERROR: BC30412, "Field003WithEvents"
Public WithEvents Field003WithEvents = {1, 2, 3}
End Class
Class ClsTest30412_2
'COMPILEERROR: BC30412, "Field002WithEvents"
Public WithEvents Field002WithEvents = New List(Of Integer) From {1, 2, 3}
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30412: 'WithEvents' variables must have an 'As' clause.
Public WithEvents Field003WithEvents = {1, 2, 3}
~~~~~~~~~~~~~~~~~~
BC30412: 'WithEvents' variables must have an 'As' clause.
Public WithEvents Field002WithEvents = New List(Of Integer) From {1, 2, 3}
~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30413ERR_WithEventsAsStruct()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="WithEventsAsStruct">
<file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Structure S
End Structure
Class C(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)
WithEvents _i As I
WithEvents _a As A
WithEvents _s As S
WithEvents _1 As T1
WithEvents _2 As T2
WithEvents _3 As T3
WithEvents _4 As T4
WithEvents _5 As T5
WithEvents _6 As T6
WithEvents _7 As T7
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _s As S
~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _1 As T1
~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _3 As T3
~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _4 As T4
~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _5 As T5
~~
BC30413: 'WithEvents' variables can only be typed as classes, interfaces or type parameters with class constraints.
WithEvents _7 As T7
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30433ERR_ModuleCantUseMethodSpecifier1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M
Protected Sub M()
End Sub
Shared Sub N()
End Sub
MustOverride Sub O()
Overridable Sub P()
End Sub
Overrides Sub Q()
End Sub
Shadows Sub R()
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30433: Methods in a Module cannot be declared 'Protected'.
Protected Sub M()
~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Shared'.
Shared Sub N()
~~~~~~
BC30433: Methods in a Module cannot be declared 'MustOverride'.
MustOverride Sub O()
~~~~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Overridable'.
Overridable Sub P()
~~~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Overrides'.
Overrides Sub Q()
~~~~~~~~~
BC30433: Methods in a Module cannot be declared 'Shadows'.
Shadows Sub R()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30434ERR_ModuleCantUseEventSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantUseEventSpecifier1">
<file name="a.vb"><![CDATA[
Module Shdmod
'COMPILEERROR: BC30434, "Shadows"
Shadows Event testx()
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30434: Events in a Module cannot be declared 'Shadows'.
Shadows Event testx()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30435ERR_StructCantUseVarSpecifier1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Structure S
Protected F
Protected Property P
Property Q
Protected Get
Return Nothing
End Get
Set(value)
End Set
End Property
Property R
Get
Return Nothing
End Get
Protected Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected'.
Protected F
~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
Protected Property P
~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
Protected Get
~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected'.
Protected Set(value)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30435ERR_StructCantUseVarSpecifier1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Structure S
Protected Friend F
Protected Friend Property P
Property Q
Protected Friend Get
Return Nothing
End Get
Set(value)
End Set
End Property
Property R
Get
Return Nothing
End Get
Protected Friend Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
Protected Friend F
~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
Protected Friend Property P
~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
Protected Friend Get
~~~~~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
Protected Friend Set(value)
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30435ERR_StructCantUseVarSpecifier1_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Structure S
Property P
Protected Get
Return Nothing
End Get
Protected Friend Set(value)
End Set
End Property
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Protected'.
Protected Get
~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Protected Friend'.
Protected Friend Set(value)
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(531467, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531467")>
<Fact>
Public Sub BC30435ERR_StructCantUseVarSpecifier1_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Structure ms
Dim s As Integer
Public Overridable Property p1()
Get
Return Nothing
End Get
Friend Set(ByVal Value)
End Set
End Property
Public NotOverridable Property p2()
Get
Return Nothing
End Get
Friend Set(ByVal Value)
End Set
End Property
Public MustOverride Property p3()
Public Overridable Sub T1()
End Sub
Public NotOverridable Sub T2()
End Sub
Public MustOverride Sub T3()
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30435: Members in a Structure cannot be declared 'Overridable'.
Public Overridable Property p1()
~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'NotOverridable'.
Public NotOverridable Property p2()
~~~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
Public NotOverridable Property p2()
~~
BC30435: Members in a Structure cannot be declared 'MustOverride'.
Public MustOverride Property p3()
~~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'Overridable'.
Public Overridable Sub T1()
~~~~~~~~~~~
BC30435: Members in a Structure cannot be declared 'NotOverridable'.
Public NotOverridable Sub T2()
~~~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
Public NotOverridable Sub T2()
~~
BC30435: Members in a Structure cannot be declared 'MustOverride'.
Public MustOverride Sub T3()
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30436ERR_ModuleCantUseMemberSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantUseMemberSpecifier1">
<file name="a.vb"><![CDATA[
Module m1
Protected Enum myenum As Integer
one
End Enum
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30735: Type in a Module cannot be declared 'Protected'.
Protected Enum myenum As Integer
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30437ERR_InvalidOverrideDueToReturn2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class base(Of t)
'COMPILEERROR: BC30437, "toString"
Overrides Function tostring() As t
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30437: 'Public Overrides Function tostring() As t' cannot override 'Public Overridable Overloads Function ToString() As String' because they differ by their return types.
Overrides Function tostring() As t
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30438ERR_ConstantWithNoValue()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Namespace NS30438
Class c1
'COMPILEERROR: BC30438,"c1"
Const c1 As UInt16
End Class
Structure s1
'COMPILEERROR: BC30438,"c1"
Const c1 As UInt16
End Structure
Friend Module USign_001mod
'COMPILEERROR: BC30438,"c1"
Const c1 As UInt16
End Module
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30438: Constants must have a value.
Const c1 As UInt16
~~
BC30438: Constants must have a value.
Const c1 As UInt16
~~
BC30438: Constants must have a value.
Const c1 As UInt16
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542127, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542127")>
<Fact>
Public Sub BC30438ERR_ConstantWithNoValue02()
Dim source =
<compilation name="delegates">
<file name="a.vb"><![CDATA[
Option strict on
imports system
Class C1
Sub GOO()
'COMPILEERROR: BC30438
Const l6 As UInt16
Const l7 as new UInt16
End Sub
End Class
]]></file>
</compilation>
Dim c1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(source)
CompilationUtils.AssertTheseDiagnostics(c1,
<expected><![CDATA[
BC30438: Constants must have a value.
Const l6 As UInt16
~~
BC30438: Constants must have a value.
Const l7 as new UInt16
~~
BC30246: 'new' is not valid on a local constant declaration.
Const l7 as new UInt16
~~~
]]></expected>)
End Sub
<Fact>
Public Sub BC30443ERR_DuplicatePropertyGet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicatePropertyGet">
<file name="a.vb"><![CDATA[
Class C
Property P
Get
Return Nothing
End Get
Get
Return Nothing
End Get
Set
End Set
Get
Return Nothing
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30443: 'Get' is already declared.
Get
~~~
BC30443: 'Get' is already declared.
Get
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30444ERR_DuplicatePropertySet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicatePropertySet">
<file name="a.vb"><![CDATA[
Class C
WriteOnly Property P
Set
End Set
Set
End Set
Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30444: 'Set' is already declared.
Set
~~~
BC30444: 'Set' is already declared.
Set
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' <Fact()>
' Public Sub BC30445ERR_ConstAggregate()
' Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
'<compilation name="DuplicatePropertySet">
' <file name="a.vb"><![CDATA[
' Module Constant
' Const d() As Long = {1, 2}, e() As Long = {1, 2}
' Sub main()
' End Sub
' End Module
' ]]></file>
'</compilation>)
' Dim expectedErrors1 = <errors><![CDATA[
' BC30445: 'Set' is already declared.
' Set(ByRef value)
' ~~~~~~
' ]]></errors>
' CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
' End Sub
<Fact>
Public Sub BC30461ERR_BadClassFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadClassFlags1">
<file name="a.vb"><![CDATA[
NotOverridable class C1
End class
Shared class C2
End class
Overrides class C3
End class
Overloads class C4
End class
Partial class C5
End class
Default class C6
End class
ReadOnly class C7
End class
WriteOnly class C8
End class
Widening class C9
End class
Narrowing class C10
End class
MustInherit class C11
End class
NotInheritable class C12
End class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30461: Classes cannot be declared 'NotOverridable'.
NotOverridable class C1
~~~~~~~~~~~~~~
BC30461: Classes cannot be declared 'Shared'.
Shared class C2
~~~~~~
BC30461: Classes cannot be declared 'Overrides'.
Overrides class C3
~~~~~~~~~
BC30461: Classes cannot be declared 'Overloads'.
Overloads class C4
~~~~~~~~~
BC30461: Classes cannot be declared 'Default'.
Default class C6
~~~~~~~
BC30461: Classes cannot be declared 'ReadOnly'.
ReadOnly class C7
~~~~~~~~
BC30461: Classes cannot be declared 'WriteOnly'.
WriteOnly class C8
~~~~~~~~~
BC30461: Classes cannot be declared 'Widening'.
Widening class C9
~~~~~~~~
BC30461: Classes cannot be declared 'Narrowing'.
Narrowing class C10
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30467ERR_NonNamespaceOrClassOnImport2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicatePropertySet">
<file name="a.vb"><![CDATA[
'COMPILEERROR: BC30467, "ns1.intfc1"
Imports ns1.Intfc1
'COMPILEERROR: BC30467, "ns1.intfc2(Of String)"
Imports ns1.Intfc2(Of String)
Namespace ns1
Public Interface Intfc1
Sub Intfc1goo()
End Interface
Public Interface Intfc2(Of t)
Inherits Intfc1
Sub intfc2goo()
End Interface
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30467: 'Intfc1' for the Imports 'Intfc1' does not refer to a Namespace, Class, Structure, Enum or Module.
Imports ns1.Intfc1
~~~~~~~~~~
BC30467: 'Intfc2' for the Imports 'Intfc2(Of String)' does not refer to a Namespace, Class, Structure, Enum or Module.
Imports ns1.Intfc2(Of String)
~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30468ERR_TypecharNotallowed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypecharNotallowed">
<file name="a.vb"><![CDATA[
Module M1
Function scen1() as System.Datetime@
End Function
End Module
Structure S1
Function scen1() as System.sTRING#
End Function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
Function scen1() as System.Datetime@
~~~~~~~~~
BC30468: Type declaration characters are not valid in this context.
Function scen1() as System.sTRING#
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30476ERR_EventSourceIsArray()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventSourceIsArray">
<file name="a.vb"><![CDATA[
Public Class Class1
Class Class2
Event Goo()
End Class
'COMPILEERROR: BC30591, "h(3)",BC30476, "Class2"
Dim WithEvents h(3) As Class2
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30476: 'WithEvents' variables cannot be typed as arrays.
Dim WithEvents h(3) As Class2
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30479ERR_SharedConstructorWithParams()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SharedConstructorWithParams">
<file name="a.vb"><![CDATA[
Structure Struct1
Shared Sub new(ByVal x As Integer)
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30479: Shared 'Sub New' cannot have any parameters.
Shared Sub new(ByVal x As Integer)
~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30480ERR_SharedConstructorIllegalSpec1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SharedConstructorIllegalSpec1">
<file name="a.vb"><![CDATA[
Structure Struct1
Shared public Sub new()
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30480: Shared 'Sub New' cannot be declared 'public'.
Shared public Sub new()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30490ERR_BadFlagsWithDefault1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadFlagsWithDefault1">
<file name="a.vb"><![CDATA[
Class A
Default Private Property P(o)
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Class B
Private ReadOnly Default Property Q(x, y)
Get
Return Nothing
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30490: 'Default' cannot be combined with 'Private'.
Default Private Property P(o)
~~~~~~~
BC30490: 'Default' cannot be combined with 'Private'.
Private ReadOnly Default Property Q(x, y)
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30497ERR_NewCannotHandleEvents()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NewCannotHandleEvents">
<file name="a.vb"><![CDATA[
Class Cla30497
'COMPILEERROR: BC30497, "New"
Sub New() Handles var1.event1
End Sub
End Class
Class Cla30497_1
'COMPILEERROR: BC30497, "New"
Shared Sub New() Handles var1.event1
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30497: 'Sub New' cannot handle events.
Sub New() Handles var1.event1
~~~
BC30497: 'Sub New' cannot handle events.
Shared Sub New() Handles var1.event1
~~~
]]></errors>
CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30501ERR_BadFlagsOnSharedMeth1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class C
Shared NotOverridable Function F()
Return Nothing
End Function
Shared Overrides Function G()
Return Nothing
End Function
Overridable Shared Sub M()
End Sub
MustOverride Shared Sub N()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30501: 'Shared' cannot be combined with 'NotOverridable' on a method declaration.
Shared NotOverridable Function F()
~~~~~~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overrides' on a method declaration.
Shared Overrides Function G()
~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overridable' on a method declaration.
Overridable Shared Sub M()
~~~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'MustOverride' on a method declaration.
MustOverride Shared Sub N()
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528324, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528324")>
<Fact>
Public Sub BC30501ERR_BadFlagsOnSharedMeth2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class A
Public Overridable Sub G()
Console.WriteLine("A.G")
End Sub
End Class
MustInherit Class B
Inherits A
Public Overrides Shared Sub G()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30501: 'Shared' cannot be combined with 'Overrides' on a method declaration.
Public Overrides Shared Sub G()
~~~~~~~~~
BC40005: sub 'G' shadows an overridable method in the base class 'A'. To override the base method, this method must be declared 'Overrides'.
Public Overrides Shared Sub G()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30502ERR_BadFlagsOnSharedProperty1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class C
NotOverridable Shared Property P
Overrides Shared Property Q
Overridable Shared Property R
Shared MustOverride Property S
Default Shared Property T(ByVal v)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30502: 'Shared' cannot be combined with 'NotOverridable' on a property declaration.
NotOverridable Shared Property P
~~~~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Overrides' on a property declaration.
Overrides Shared Property Q
~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Overridable' on a property declaration.
Overridable Shared Property R
~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'MustOverride' on a property declaration.
Shared MustOverride Property S
~~~~~~~~~~~~
BC30502: 'Shared' cannot be combined with 'Default' on a property declaration.
Default Shared Property T(ByVal v)
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30503ERR_BadFlagsOnStdModuleProperty1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadFlagsOnStdModuleProperty1">
<file name="a.vb"><![CDATA[
Module M
Protected Property P
Shared Property Q
MustOverride Property R
Overridable Property S
Overrides Property T
Shadows Property U
Default Property V(o)
Get
Return Nothing
End Get
Set
End Set
End Property
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30503: Properties in a Module cannot be declared 'Protected'.
Protected Property P
~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Shared'.
Shared Property Q
~~~~~~
BC30503: Properties in a Module cannot be declared 'MustOverride'.
MustOverride Property R
~~~~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Overridable'.
Overridable Property S
~~~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Overrides'.
Overrides Property T
~~~~~~~~~
BC30503: Properties in a Module cannot be declared 'Shadows'.
Shadows Property U
~~~~~~~
BC30503: Properties in a Module cannot be declared 'Default'.
Default Property V(o)
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30505ERR_SharedOnProcThatImpl()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SharedOnProcThatImpl">
<file name="a.vb"><![CDATA[
Delegate Sub D()
Interface I
Sub M()
Property P As Object
Event E As D
End Interface
Class C
Implements I
Shared Sub M() Implements I.M
End Sub
Shared Property P As Object Implements I.P
Shared Event E() Implements I.E
End Class
]]></file>
</compilation>)
compilation1.AssertTheseDiagnostics(<errors><![CDATA[
BC30149: Class 'C' must implement 'Event E As D' for interface 'I'.
Implements I
~
BC30149: Class 'C' must implement 'Property P As Object' for interface 'I'.
Implements I
~
BC30149: Class 'C' must implement 'Sub M()' for interface 'I'.
Implements I
~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
Shared Sub M() Implements I.M
~~~~~~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
Shared Property P As Object Implements I.P
~~~~~~
BC30505: Methods or events that implement interface members cannot be declared 'Shared'.
Shared Event E() Implements I.E
~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30506ERR_NoWithEventsVarOnHandlesList()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoWithEventsVarOnHandlesList">
<file name="a.vb"><![CDATA[
Module mod30506
'COMPILEERROR: BC30506, "clsEventError1"
Sub scenario1() Handles clsEventError1.Event1
End Sub
'COMPILEERROR: BC30506, "I1"
Sub scenario2() Handles I1.goo
End Sub
'COMPILEERROR: BC30506, "button1"
Sub scenario3() Handles button1.click
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Sub scenario1() Handles clsEventError1.Event1
~~~~~~~~~~~~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Sub scenario2() Handles I1.goo
~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Sub scenario3() Handles button1.click
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub HandlesHiddenEvent()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoWithEventsVarOnHandlesList">
<file name="a.vb"><![CDATA[
Imports System
Class HasEvents
Event E1()
End Class
Class HasWithEvents
Public WithEvents WE0 As HasEvents
Public WithEvents WE1 As HasEvents
Public WithEvents WE2 As HasEvents
Public WithEvents _WE3 As HasEvents
End Class
Class HasWithEventsDerived
Inherits HasWithEvents
Overrides Property WE0() As HasEvents
Get
Return Nothing
End Get
Set(value As HasEvents)
End Set
End Property
Overloads Property WE1(x As Integer) As Integer
Get
Return 1
End Get
Set(value As Integer)
End Set
End Property
Property WE2(x As Integer) As Integer
Get
Return 1
End Get
Set(value As Integer)
End Set
End Property
Property WE3 As Integer
Shared Sub goo0() Handles WE0.E1
Console.WriteLine("handled2")
End Sub
Shared Sub goo1() Handles WE1.E1
Console.WriteLine("handled2")
End Sub
Shared Sub goo2() Handles WE2.E2
Console.WriteLine("handled2")
End Sub
Shared Sub goo3() Handles WE3.E3
Console.WriteLine("handled2")
End Sub
End Class
Class Program
Shared Sub Main(args As String())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30284: property 'WE0' cannot be declared 'Overrides' because it does not override a property in a base class.
Overrides Property WE0() As HasEvents
~~~
BC40004: property 'WE0' conflicts with WithEvents variable 'WE0' in the base class 'HasWithEvents' and should be declared 'Shadows'.
Overrides Property WE0() As HasEvents
~~~
BC40004: property 'WE1' conflicts with WithEvents variable 'WE1' in the base class 'HasWithEvents' and should be declared 'Shadows'.
Overloads Property WE1(x As Integer) As Integer
~~~
BC40004: property 'WE2' conflicts with WithEvents variable 'WE2' in the base class 'HasWithEvents' and should be declared 'Shadows'.
Property WE2(x As Integer) As Integer
~~~
BC40012: property 'WE3' implicitly declares '_WE3', which conflicts with a member in the base class 'HasWithEvents', and so the property should be declared 'Shadows'.
Property WE3 As Integer
~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Shared Sub goo0() Handles WE0.E1
~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Shared Sub goo1() Handles WE1.E1
~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Shared Sub goo2() Handles WE2.E2
~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Shared Sub goo3() Handles WE3.E3
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub HandlesProperty001()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="HandlesProperty001">
<file name="a.vb"><![CDATA[
Imports System
Imports System.ComponentModel
Namespace Project1
Module m1
Public Sub main()
Dim c = New Sink
Dim s = New OuterClass
c.x = s
s.Test()
End Sub
End Module
Class EventSource
Public Event MyEvent()
Sub test()
RaiseEvent MyEvent()
End Sub
End Class
Class SomeBase
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property SomePropertyInBase() As EventSource
Get
Console.Write("#Get#")
Return Nothing
End Get
Set(value As EventSource)
End Set
End Property
End Class
Class OuterClass
Inherits SomeBase
Private Shared SubObject As New EventSource
<DesignOnly(True)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Shared Property SomePropertyWrongValue() As EventSource
Get
Console.Write("#Get#")
Return SubObject
End Get
Set(value As EventSource)
End Set
End Property
Public Property SomePropertyNoAttribute() As EventSource
Get
Console.Write("#Get#")
Return SubObject
End Get
Set(value As EventSource)
End Set
End Property
Public Shared Property SomePropertyWriteOnly() As EventSource
Get
Console.Write("#Get#")
Return SubObject
End Get
Set(value As EventSource)
End Set
End Property
Sub Test()
SubObject.test()
End Sub
End Class
Class Sink
Public WithEvents x As OuterClass
Sub goo1() Handles x.SomePropertyWrongValue.MyEvent
Console.Write("Handled Event On SubObject!")
End Sub
Sub goo2() Handles x.SomePropertyNoAttribute.MyEvent
Console.Write("Handled Event On SubObject!")
End Sub
Sub goo3() Handles x.SomePropertyWriteonly.MyEvent
Console.Write("Handled Event On SubObject!")
End Sub
Sub goo4() Handles x.SomePropertyInBase.MyEvent
Console.Write("Handled Event On SubObject!")
End Sub
Sub test()
x.Test()
End Sub
Sub New()
x = New OuterClass
End Sub
End Class
'.....
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
Sub goo1() Handles x.SomePropertyWrongValue.MyEvent
~~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
Sub goo2() Handles x.SomePropertyNoAttribute.MyEvent
~~~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
Sub goo3() Handles x.SomePropertyWriteonly.MyEvent
~~~~~~~~~~~~~~~~~~~~~~~
BC31412: 'Handles' in classes must specify a 'WithEvents' variable, 'MyBase', 'MyClass' or 'Me' qualified with a single identifier.
Sub goo4() Handles x.SomePropertyInBase.MyEvent
~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub WithEventsHides()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="WithEventsHides">
<file name="a.vb"><![CDATA[
Imports System
Class HasEvents
Event E1()
End Class
Class HasWithEvents
Public WithEvents WE0 As HasEvents
Public WithEvents WE1 As HasEvents
Public Property WE2 As HasEvents
Public Property WE3 As HasEvents
End Class
Class HasWithEventsDerived
Inherits HasWithEvents
Public WithEvents WE0 As HasEvents
' no warnings
Public Shadows WithEvents WE1 As HasEvents
Public WithEvents WE2 As HasEvents
' no warnings
Public Shadows WithEvents WE3 As HasEvents
Shared Sub goo0() Handles WE0.E1
Console.WriteLine("handled2")
End Sub
Shared Sub goo1() Handles WE1.E1
Console.WriteLine("handled2")
End Sub
Shared Sub goo2() Handles WE2.E1
Console.WriteLine("handled2")
End Sub
Shared Sub goo3() Handles WE3.E1
Console.WriteLine("handled2")
End Sub
End Class
Class Program
Shared Sub Main(args As String())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40004: WithEvents variable 'WE0' conflicts with WithEvents variable 'WE0' in the base class 'HasWithEvents' and should be declared 'Shadows'.
Public WithEvents WE0 As HasEvents
~~~
BC40004: WithEvents variable 'WE2' conflicts with property 'WE2' in the base class 'HasWithEvents' and should be declared 'Shadows'.
Public WithEvents WE2 As HasEvents
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub WithEventsOverloads()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="WithEventsOverloads">
<file name="a.vb"><![CDATA[
Imports System
Class HasEvents
Event E1()
End Class
Class HasWithEventsDerived
Public WithEvents _WE1 As HasEvents
Public Property WE0(x As Integer) As Integer
Get
Return 1
End Get
Set(value As Integer)
End Set
End Property
Public Overloads Property WE2(x As Integer, y As Long) As Integer
Get
Return 1
End Get
Set(value As Integer)
End Set
End Property
Public WithEvents WE0 As HasEvents
Public Property WE1
Public WithEvents WE2 As HasEvents
End Class
Class Program
Shared Sub Main(args As String())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31061: WithEvents variable '_WE1' conflicts with a member implicitly declared for property 'WE1' in class 'HasWithEventsDerived'.
Public WithEvents _WE1 As HasEvents
~~~~
BC30260: 'WE0' is already declared as 'Public Property WE0(x As Integer) As Integer' in this class.
Public WithEvents WE0 As HasEvents
~~~
BC30260: 'WE2' is already declared as 'Public Overloads Property WE2(x As Integer, y As Long) As Integer' in this class.
Public WithEvents WE2 As HasEvents
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30508ERR_AccessMismatch6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Public Class A
Protected Class C
End Class
Protected Structure S
End Structure
Private Interface I
End Interface
Public F As I
Friend Function M() As C
Return Nothing
End Function
End Class
Public Class B
Inherits A
Public G As C
Friend ReadOnly H As S
Public Function N(x As C) As S
Return Nothing
End Function
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'F' cannot expose type 'A.I' in namespace 'N' through class 'A'.
Public F As I
~
BC30508: 'M' cannot expose type 'A.C' in namespace 'N' through class 'A'.
Friend Function M() As C
~
BC30508: 'G' cannot expose type 'A.C' in namespace 'N' through class 'B'.
Public G As C
~
BC30508: 'H' cannot expose type 'A.S' in namespace 'N' through class 'B'.
Friend ReadOnly H As S
~
BC30508: 'x' cannot expose type 'A.C' in namespace 'N' through class 'B'.
Public Function N(x As C) As S
~
BC30508: 'N' cannot expose type 'A.S' in namespace 'N' through class 'B'.
Public Function N(x As C) As S
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30508ERR_AccessMismatch6_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace NS30508
Interface i1
End Interface
Interface i2
End Interface
Class C1(Of v)
Implements i1
End Class
Class c2
Implements i1
Implements i2
'COMPILEERROR: BC30508, "ProtectedClass"
Function fiveB(Of t As ProtectedClass)() As String
Return "In fiveB"
End Function
'COMPILEERROR: BC30508, "Privateclass"
Function fiveC(Of t As Privateclass)() As String
Return "In fiveC"
End Function
Protected Function fiveD(Of t As ProtectedClass)() As String
Return "In fiveB"
End Function
Private Function fiveE(Of t As Privateclass)() As String
Return "In fiveC"
End Function
Protected Class ProtectedClass
End Class
Private Class Privateclass
End Class
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'fiveB' cannot expose type 'c2.ProtectedClass' in namespace 'NS30508' through class 'c2'.
Function fiveB(Of t As ProtectedClass)() As String
~~~~~~~~~~~~~~
BC30508: 'fiveC' cannot expose type 'c2.Privateclass' in namespace 'NS30508' through class 'c2'.
Function fiveC(Of t As Privateclass)() As String
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30508ERR_AccessMismatch6_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Public Class A
Protected Class C
End Class
Protected Structure S
End Structure
Private Interface I
End Interface
Protected Enum E
A
End Enum
Property P As I
End Class
Public Class B
Inherits A
Property Q As C
Friend ReadOnly Property R(x As E) As S
Get
Return Nothing
End Get
End Property
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'P' cannot expose type 'A.I' in namespace 'N' through class 'A'.
Property P As I
~
BC30508: 'Q' cannot expose type 'A.C' in namespace 'N' through class 'B'.
Property Q As C
~
BC30508: 'x' cannot expose type 'A.E' in namespace 'N' through class 'B'.
Friend ReadOnly Property R(x As E) As S
~
BC30508: 'R' cannot expose type 'A.S' in namespace 'N' through class 'B'.
Friend ReadOnly Property R(x As E) As S
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
<Fact()>
Public Sub BC30508ERR_AccessMismatch6_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Public Class A
Protected Class B
End Class
Public Class C
Function F() As B
Return Nothing
End Function
Public Class D
Sub M(o As B)
End Sub
End Class
End Class
End Class
Public Class E
Inherits A
Function F() As B
Return Nothing
End Function
End Class
End Namespace
Public Class F
Inherits N.A
Sub M(o As B)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30508: 'F' cannot expose type 'A.B' in namespace 'N' through class 'C'.
Function F() As B
~
BC30508: 'o' cannot expose type 'A.B' in namespace 'N' through class 'D'.
Sub M(o As B)
~
BC30508: 'F' cannot expose type 'A.B' in namespace 'N' through class 'E'.
Function F() As B
~
BC30508: 'o' cannot expose type 'A.B' in namespace '<Default>' through class 'F'.
Sub M(o As B)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30509ERR_InheritanceAccessMismatch5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InheritanceAccessMismatch5">
<file name="a.vb"><![CDATA[
Module Module1
Private Class C1
End Class
Class C2
Inherits C1
End Class
Class C3
Protected Class C4
End Class
Class C5
Inherits C4
End Class
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30509: 'C2' cannot inherit from class 'Module1.C1' because it expands the access of the base class to namespace '<Default>'.
Inherits C1
~~
BC30509: 'C5' cannot inherit from class 'Module1.C3.C4' because it expands the access of the base class to namespace '<Default>'.
Inherits C4
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30529ERR_ParamTypingInconsistency()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ParamTypingInconsistency">
<file name="a.vb"><![CDATA[
class M1
Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
End Sub
End class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
~~~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
Sub Goo(ByVal [a], ByRef [continue], ByVal c As Single)
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30530ERR_ParamNameFunctionNameCollision_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
class M1
Function Goo(Of Goo)(ByVal Goo As Goo)
End Function
End class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32090: Type parameter cannot have the same name as its defining function.
Function Goo(Of Goo)(ByVal Goo As Goo)
~~~
BC30530: Parameter cannot have the same name as its defining function.
Function Goo(Of Goo)(ByVal Goo As Goo)
~~~
BC32089: 'Goo' is already declared as a type parameter of this method.
Function Goo(Of Goo)(ByVal Goo As Goo)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30530ERR_ParamNameFunctionNameCollision_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
WriteOnly Property P(p, q)
Set(value)
End Set
End Property
Private _q
WriteOnly Property Q
Set(Q) ' No error
_q = Q
End Set
End Property
Property R
Get
Return Nothing
End Get
Set(get_R) ' No error
End Set
End Property
WriteOnly Property S
Set(set_S) ' No error
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30530: Parameter cannot have the same name as its defining function.
WriteOnly Property P(p, q)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540629, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540629")>
<Fact>
Public Sub BC30548ERR_InvalidAssemblyAttribute1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidAssemblyAttribute1">
<file name="a.vb"><![CDATA[
Imports System
'COMPILEERROR: BC30548, "Assembly: c1()"
<Assembly: c1()>
'COMPILEERROR: BC30549, "Module: c1()"
<Module: c1()>
<AttributeUsageAttribute(AttributeTargets.Class, Inherited:=False)>
NotInheritable Class c1Attribute
Inherits Attribute
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_InvalidAssemblyAttribute1, "c1").WithArguments("c1Attribute"),
Diagnostic(ERRID.ERR_InvalidModuleAttribute1, "c1").WithArguments("c1Attribute"))
End Sub
<WorkItem(540629, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540629")>
<Fact>
Public Sub BC30549ERR_InvalidModuleAttribute1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidModuleAttribute1">
<file name="a.vb"><![CDATA[
Imports System
<Module: InternalsVisibleTo()>
<AttributeUsageAttribute(AttributeTargets.Delegate)>
Class InternalsVisibleTo
Inherits Attribute
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidModuleAttribute1, "InternalsVisibleTo").WithArguments("InternalsVisibleTo"))
End Sub
<Fact>
Public Sub BC30561ERR_AmbiguousInImports2()
Dim options = TestOptions.ReleaseExe.WithGlobalImports(GlobalImport.Parse({"N1", "N2"}))
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AmbiguousInImports2">
<file name="a.vb"><![CDATA[
Public Class Cls2
Implements i1
End Class
]]></file>
<file name="b.vb"><![CDATA[
Namespace N1
Interface I1
End Interface
End Namespace
Namespace N2
Interface I1
End Interface
End Namespace
]]></file>
</compilation>, options:=options)
Dim expectedErrors1 = <errors><![CDATA[
BC30561: 'I1' is ambiguous, imported from the namespaces or types 'N1, N2'.
Implements i1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30562ERR_AmbiguousInModules2()
Dim options = TestOptions.ReleaseExe.WithGlobalImports(GlobalImport.Parse({"N1", "N2"}))
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AmbiguousInModules2">
<file name="a.vb"><![CDATA[
Public Class Cls2
Implements i1
End Class
]]></file>
<file name="b.vb"><![CDATA[
Module N1
Interface I1
End Interface
End Module
Module N2
Interface I1
End Interface
End Module
]]></file>
</compilation>, options)
Dim expectedErrors1 = <errors><![CDATA[
BC30562: 'I1' is ambiguous between declarations in Modules 'N1, N2'.
Implements i1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30572ERR_DuplicateNamedImportAlias1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30572ERR_DuplicateNamedImportAlias1">
<file name="a.vb"><![CDATA[
Imports Alias1 = N1.C1(of String)
Imports Alias1 = N1.C1(of String)
]]></file>
<file name="b.vb"><![CDATA[
Module N1
Class C1(of T)
End class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30572: Alias 'Alias1' is already declared.
Imports Alias1 = N1.C1(of String)
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30573ERR_DuplicatePrefix()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports System.Xml.Linq
Imports <xmlns="default1">
Imports <xmlns="default2">
Imports <xmlns:p="p1">
Imports <xmlns:q="q">
Imports <xmlns:p="p2">
Class C
Private F As XElement = <p:a xmlns:p="p3" xmlns:q="q"/>
End Class
]]></file>
</compilation>, references:=XmlReferences)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30573: XML namespace prefix '' is already declared.
Imports <xmlns="default2">
~~~~~~~~~~~~~~~~~~
BC30573: XML namespace prefix 'p' is already declared.
Imports <xmlns:p="p2">
~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30573ERR_DuplicatePrefix_1()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"<xmlns=""default1"">", "<xmlns=""default2"">", "<xmlns:p=""p1"">", "<xmlns:q=""q"">", "<xmlns:p=""p2"">"}))
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="c.vb"><![CDATA[
Imports <xmlns="default">
Imports <xmlns:p="p">
Imports <xmlns:q="q">
Class C
End Class
]]></file>
</compilation>, references:=XmlReferences, options:=options)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC30573: Error in project-level import '<xmlns:p="p2">' at '<xmlns:p="p2">' : XML namespace prefix 'p' is already declared.
BC30573: Error in project-level import '<xmlns="default2">' at '<xmlns="default2">' : XML namespace prefix '' is already declared.
]]></errors>)
Dim embedded = compilation.GetTypeByMetadataName("Microsoft.VisualBasic.Embedded")
Assert.IsType(Of EmbeddedSymbolManager.EmbeddedNamedTypeSymbol)(embedded)
Assert.False(DirectCast(embedded, INamedTypeSymbol).IsSerializable)
End Sub
<Fact>
Public Sub BC30583ERR_MethodAlreadyImplemented2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MethodAlreadyImplemented2">
<file name="a.vb"><![CDATA[
Namespace NS1
Interface i1
Sub goo()
End Interface
Interface i2
Inherits i1
End Interface
Interface i3
Inherits i1
End Interface
Class cls1
Implements i2, i3
Sub i2goo() Implements i2.goo
Console.WriteLine("in i1, goo")
End Sub
'COMPILEERROR: BC30583, "i3.goo"
Sub i3goo() Implements i3.goo
Console.WriteLine("in i3, goo")
End Sub
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30583: 'i1.goo' cannot be implemented more than once.
Sub i3goo() Implements i3.goo
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30584ERR_DuplicateInInherits1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateInInherits1">
<file name="a.vb"><![CDATA[
Interface sce(Of T)
End Interface
Interface sce1
Inherits sce(Of Integer)
Inherits sce(Of Integer)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30584: 'sce(Of Integer)' cannot be inherited more than once.
Inherits sce(Of Integer)
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30584ERR_DuplicateInInherits1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateInInherits1">
<file name="a.vb"><![CDATA[
interface I1
End interface
Structure s1
Interface sce1
Inherits I1
Inherits I1
End Interface
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30584: 'I1' cannot be inherited more than once.
Inherits I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30590ERR_EventNotFound1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="EventNotFound1">
<file name="a.vb"><![CDATA[
Friend Module mod30590
Class cls1
Event Ev2()
End Class
Class cls2 : Inherits cls1
Public WithEvents o As cls2
Private Shadows Sub Ev2()
End Sub
'COMPILEERROR: BC30590, "Ev2"
Private Sub o_Ev2() Handles o.Ev2
End Sub
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30590: Event 'Ev2' cannot be found.
Private Sub o_Ev2() Handles o.Ev2
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30593ERR_ModuleCantUseVariableSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantUseVariableSpecifier1">
<file name="a.vb"><![CDATA[
Class class1
End Class
Structure struct1
End Structure
Friend Module ObjInit14mod
'COMPILEERROR: BC30593, "Shared"
Shared cls As New class1()
'COMPILEERROR: BC30593, "Shared"
Shared xint As New Integer()
'COMPILEERROR: BC30593, "Shared"
Shared xdec As New Decimal(40@)
'COMPILEERROR: BC30593, "Shared"
Shared xstrct As New struct1()
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30593: Variables in Modules cannot be declared 'Shared'.
Shared cls As New class1()
~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
Shared xint As New Integer()
~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
Shared xdec As New Decimal(40@)
~~~~~~
BC30593: Variables in Modules cannot be declared 'Shared'.
Shared xstrct As New struct1()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30594ERR_SharedEventNeedsSharedHandler()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SharedEventNeedsSharedHandler">
<file name="a.vb"><![CDATA[
Module M1
Class myCls
Event Event1()
End Class
Class myClass1
Shared WithEvents x As myCls
Public Sub EventHandler() Handles x.Event1
End Sub
Private Sub EventHandler1() Handles x.Event1
End Sub
Protected Sub EventHandler2() Handles x.Event1
End Sub
Friend Sub EventHandler3() Handles x.Event1
End Sub
End Class
Class myClass2
Shared WithEvents x As myCls
Overridable Sub EventHandler() Handles x.Event1
End Sub
End Class
MustInherit Class myClass3
Shared WithEvents x As myCls
MustOverride Sub EventHandler() Handles x.Event1
End Class
Class myClass4
Overridable Sub EventHandler()
End Sub
End Class
Class myClass7
Inherits myClass4
Shared WithEvents x As myCls
NotOverridable Overrides Sub EventHandler() Handles x.Event1
End Sub
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Public Sub EventHandler() Handles x.Event1
~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
Public Sub EventHandler() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Private Sub EventHandler1() Handles x.Event1
~
BC31029: Method 'EventHandler1' cannot handle event 'Event1' because they do not have a compatible signature.
Private Sub EventHandler1() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Protected Sub EventHandler2() Handles x.Event1
~
BC31029: Method 'EventHandler2' cannot handle event 'Event1' because they do not have a compatible signature.
Protected Sub EventHandler2() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Friend Sub EventHandler3() Handles x.Event1
~
BC31029: Method 'EventHandler3' cannot handle event 'Event1' because they do not have a compatible signature.
Friend Sub EventHandler3() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Overridable Sub EventHandler() Handles x.Event1
~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
Overridable Sub EventHandler() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
MustOverride Sub EventHandler() Handles x.Event1
~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
MustOverride Sub EventHandler() Handles x.Event1
~~~~~~
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
NotOverridable Overrides Sub EventHandler() Handles x.Event1
~
BC31029: Method 'EventHandler' cannot handle event 'Event1' because they do not have a compatible signature.
NotOverridable Overrides Sub EventHandler() Handles x.Event1
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30927ERR_MustOverOnNotInheritPartClsMem1_1()
CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class Test
NotInheritable Class C
End Class
Partial Class C
'COMPILEERROR: BC30927, "goo"
MustOverride Function goo() As Integer
End Class
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MustOverOnNotInheritPartClsMem1, "MustOverride").WithArguments("MustOverride"))
End Sub
<Fact>
Public Sub NotInheritableInOtherPartial()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class B
Overridable Sub f()
End Sub
Overridable Property p As Integer
Get
Return 0
End Get
Set(value As Integer)
End Set
End Property
End Class
NotInheritable Class C
Inherits B
End Class
Partial Class C
MustOverride Sub f1()
MustOverride Property p1 As Integer
Overridable Sub f2()
End Sub
Overridable Property p2 As Integer
Get
Return 0
End Get
Set(value As Integer)
End Set
End Property
NotOverridable Overrides Sub f()
End Sub
NotOverridable Overrides Property p As Integer
Get
Return 0
End Get
Set(value As Integer)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
MustOverride Sub f1()
~~~~~~~~~~~~
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
MustOverride Property p1 As Integer
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30607ERR_BadFlagsInNotInheritableClass1_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A
MustOverride Sub O()
MustOverride Property R
End Class
NotInheritable Class B
Inherits A
Overridable Sub M()
End Sub
MustOverride Sub N()
NotOverridable Overrides Sub O()
End Sub
Overridable Property P
MustOverride Property Q
NotOverridable Overrides Property R
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
Overridable Sub M()
~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
MustOverride Sub N()
~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
NotOverridable Overrides Sub O()
~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
Overridable Property P
~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
MustOverride Property Q
~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
NotOverridable Overrides Property R
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<WorkItem(540594, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540594")>
<Fact>
Public Sub BC30610ERR_BaseOnlyClassesMustBeExplicit2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BaseOnlyClassesMustBeExplicit2">
<file name="a.vb"><![CDATA[
MustInherit Class Cls1
MustOverride Sub Goo(ByVal Arg As Integer)
MustOverride Sub Goo(ByVal Arg As Double)
End Class
'COMPILEERROR: BC30610, "cls2"
Class cls2
Inherits Cls1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30610: Class 'cls2' must either be declared 'MustInherit' or override the following inherited 'MustOverride' member(s):
Cls1: Public MustOverride Sub Goo(Arg As Integer)
Cls1: Public MustOverride Sub Goo(Arg As Double).
Class cls2
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(541026, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541026")>
<Fact()>
Public Sub BC30610ERR_BaseOnlyClassesMustBeExplicit2WithBC31411()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BaseOnlyClassesMustBeExplicit2">
<file name="a.vb"><![CDATA[
MustInherit Class Cls1
MustOverride Sub Goo(ByVal Arg As Integer)
MustOverride Sub Goo(ByVal Arg As Double)
End Class
'COMPILEERROR: BC30610, "cls2"
Class cls2
Inherits Cls1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30610: Class 'cls2' must either be declared 'MustInherit' or override the following inherited 'MustOverride' member(s):
Cls1: Public MustOverride Sub Goo(Arg As Integer)
Cls1: Public MustOverride Sub Goo(Arg As Double).
Class cls2
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30628ERR_StructCantInherit()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StructCantInherit">
<file name="a.vb"><![CDATA[
Structure S1
Structure S2
Inherits s1
End Structure
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30628: Structures cannot have 'Inherits' statements.
Inherits s1
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30629ERR_NewInStruct()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NewInStruct">
<file name="a.vb"><![CDATA[
Module mod30629
Structure Struct1
'COMPILEERROR:BC30629,"new"
Public Sub New()
End Sub
End Structure
End Module
]]></file>
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic12))
Dim expectedErrors1 = <errors><![CDATA[
BC30629: Structures cannot declare a non-shared 'Sub New' with no parameters.
Public Sub New()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC37240ERR_StructParameterlessInstanceCtorMustBePublic()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NewInStruct">
<file name="a.vb"><![CDATA[
Module mod37240
Structure Struct1
'COMPILEERROR:BC37240,"new"
Private Sub New()
End Sub
End Structure
sub Main
end sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30629: Structures cannot declare a non-shared 'Sub New' with no parameters.
Private Sub New()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30639ERR_BadPropertyFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyFlags1">
<file name="a.vb"><![CDATA[
Interface I
NotInheritable Property P
MustInherit ReadOnly Property Q
WriteOnly Const Property R(o)
Partial Property S
End Interface
Class C
NotInheritable Property T
MustInherit ReadOnly Property U
Get
Return Nothing
End Get
End Property
WriteOnly Const Property V(o)
Set(value)
End Set
End Property
Partial Property W
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30639: Properties cannot be declared 'NotInheritable'.
NotInheritable Property P
~~~~~~~~~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
MustInherit ReadOnly Property Q
~~~~~~~~~~~
BC30639: Properties cannot be declared 'Const'.
WriteOnly Const Property R(o)
~~~~~
BC30639: Properties cannot be declared 'Partial'.
Partial Property S
~~~~~~~
BC30639: Properties cannot be declared 'NotInheritable'.
NotInheritable Property T
~~~~~~~~~~~~~~
BC30639: Properties cannot be declared 'MustInherit'.
MustInherit ReadOnly Property U
~~~~~~~~~~~
BC30639: Properties cannot be declared 'Const'.
WriteOnly Const Property V(o)
~~~~~
BC30639: Properties cannot be declared 'Partial'.
Partial Property W
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30645ERR_InvalidOptionalParameterUsage1()
Dim compilation1 = CompilationUtils.CreateCompilation(
<compilation name="InvalidOptionalParameterUsage1">
<file name="a.vb"><![CDATA[
Module M1
<System.Web.Services.WebMethod(True)>
Public Function HelloWorld(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
End Module
]]></file>
</compilation>, targetFramework:=TargetFramework.NetFramework)
Dim expectedErrors1 = <errors><![CDATA[
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld(Optional ByVal n As String = "e") As String
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30645ERR_InvalidOptionalParameterUsage1a()
Dim compilation1 = CompilationUtils.CreateCompilation(
<compilation name="InvalidOptionalParameterUsage1a">
<file name="a.vb"><![CDATA[
Module M1
<System.Web.Services.WebMethod(True)>
<System.Web.Services.WebMethod(False)>
Public Function HelloWorld(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
End Module
]]></file>
</compilation>, targetFramework:=TargetFramework.NetFramework)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30663: Attribute 'WebMethodAttribute' cannot be applied multiple times.
<System.Web.Services.WebMethod(False)>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld(Optional ByVal n As String = "e") As String
~~~~~~~~~~
]]></errors>)
End Sub
<Fact(Skip:="https://github.com/dotnet/roslyn/issues/74779")>
Public Sub BC30645ERR_InvalidOptionalParameterUsage1b()
' Dim references = {Net461.References.mscorlib, Net461.References.MicrosoftVisualBasic, Net461.References.SystemWebServices, Net461.References.SystemEnterpriseServices
Dim compilation1 = CompilationUtils.CreateCompilation(
<compilation name="InvalidOptionalParameterUsage1b">
<file name="a.vb"><![CDATA[
Module M1
<System.Web.Services.WebMethod()>
Public Function HelloWorld1(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
<System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled)>
Public Function HelloWorld2(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
<System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1)>
Public Function HelloWorld3(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
<System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True)>
Public Function HelloWorld4(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
<System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True, 123)>
Public Function HelloWorld5(Optional ByVal n As String = "e") As String
Return "Hello World"
End Function
End Module
]]></file>
</compilation>, targetFramework:=TargetFramework.NetFramework)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld1(Optional ByVal n As String = "e") As String
~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld2(Optional ByVal n As String = "e") As String
~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld3(Optional ByVal n As String = "e") As String
~~~~~~~~~~~
BC30645: Attribute 'WebMethod' cannot be applied to a method with optional parameters.
Public Function HelloWorld4(Optional ByVal n As String = "e") As String
~~~~~~~~~~~
BC30516: Overload resolution failed because no accessible 'New' accepts this number of arguments.
<System.Web.Services.WebMethod(True, System.EnterpriseServices.TransactionOption.Disabled, 1, True, 123)>
~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC30650ERR_InvalidEnumBase()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidEnumBase">
<file name="a.vb"><![CDATA[
Module ICase1mod
Enum color1 As Double
blue
End Enum
Enum color2 As String
blue
End Enum
Enum color3 As Single
blue
End Enum
Enum color4 As Date
blue
End Enum
Enum color5 As Object
blue
End Enum
Enum color6 As Boolean
blue
End Enum
Enum color7 As Decimal
blue
End Enum
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30650: Enums must be declared as an integral type.
Enum color1 As Double
~~~~~~
BC30650: Enums must be declared as an integral type.
Enum color2 As String
~~~~~~
BC30650: Enums must be declared as an integral type.
Enum color3 As Single
~~~~~~
BC30650: Enums must be declared as an integral type.
Enum color4 As Date
~~~~
BC30650: Enums must be declared as an integral type.
Enum color5 As Object
~~~~~~
BC30650: Enums must be declared as an integral type.
Enum color6 As Boolean
~~~~~~~
BC30650: Enums must be declared as an integral type.
Enum color7 As Decimal
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30651ERR_ByRefIllegal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ByRefIllegal1">
<file name="a.vb"><![CDATA[
Class C
Property P(ByVal x, ByRef y)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
ReadOnly Property Q(ParamArray p())
Get
Return Nothing
End Get
End Property
WriteOnly Property R(Optional x = Nothing)
Set(value)
End Set
End Property
End Class
Interface I
ReadOnly Property P(ByRef x, Optional ByVal y = Nothing)
WriteOnly Property Q(ParamArray p())
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30651: property parameters cannot be declared 'ByRef'.
Property P(ByVal x, ByRef y)
~~~~~
BC30651: property parameters cannot be declared 'ByRef'.
ReadOnly Property P(ByRef x, Optional ByVal y = Nothing)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30652ERR_UnreferencedAssembly3()
Dim Lib1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="Lib1">
<file name="a.vb"><![CDATA[
Public Class C1
End Class
]]></file>
</compilation>)
Dim Lib2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="Lib2">
<file name="a.vb"><![CDATA[
Public Class C2
Dim s as C1
End Class
]]></file>
</compilation>)
Dim ref1 = New VisualBasicCompilationReference(Lib1)
Lib2 = Lib2.AddReferences(ref1)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UnreferencedAssembly3">
<file name="a.vb"><![CDATA[
Public Class C
Dim s as C1
End Class
]]></file>
</compilation>)
Dim ref2 = New VisualBasicCompilationReference(Lib2)
compilation1 = compilation1.AddReferences(ref2)
Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'C1' is not defined.
Dim s as C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(538153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538153")>
<Fact>
Public Sub BC30656ERR_UnsupportedField1()
Dim csharpComp = CSharp.CSharpCompilation.Create("Test", options:=New CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
Dim text = "public class A { public static volatile int X; }"
Dim ref = Net40.References.mscorlib
csharpComp = csharpComp.AddSyntaxTrees(CSharp.SyntaxFactory.ParseSyntaxTree(text))
csharpComp = csharpComp.AddReferences(ref)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnsupportedField1">
<file name="a.vb"><![CDATA[
Module M
Dim X = A.X
End Module
]]></file>
</compilation>)
compilation1 = compilation1.AddReferences(MetadataReference.CreateFromImage(csharpComp.EmitToArray()))
Dim expectedErrors1 = <errors><![CDATA[
BC30656: Field 'X' is of an unsupported type.
Dim X = A.X
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30660ERR_LocalsCannotHaveAttributes()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="LocalsCannotHaveAttributes">
<file name="at30660.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
Inherits Attribute
Public Sub New(p As ULong)
End Sub
End Class
Public Class Goo
Public Function SSS() As Byte
<My(12345)> Dim x As Byte = 1
Return x
End Function
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_LocalsCannotHaveAttributes, "<My(12345)>"))
End Sub
<Fact>
Public Sub BC30662ERR_InvalidAttributeUsage2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidAttributeUsage2">
<file name="a.vb"><![CDATA[
Imports System
Namespace DecAttr
<AttributeUsageAttribute(AttributeTargets.Property)> Class attr1
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.Event)> Class attr2
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Delegate)> Class attr3
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.Constructor)> Class attr4
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Field)> Class attr5
Inherits Attribute
End Class
Class scen1
<attr1()> Public Declare Function Beep1 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
<attr2()> Public Declare Function Beep2 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
<attr3()> Public Declare Function Beep3 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
<attr4()> Public Declare Function Beep4 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
<attr5()> Public Declare Function Beep5 Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
End Class
End Namespace
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr1").WithArguments("attr1", "Beep1"),
Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr2").WithArguments("attr2", "Beep2"),
Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr3").WithArguments("attr3", "Beep3"),
Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr4").WithArguments("attr4", "Beep4"),
Diagnostic(ERRID.ERR_InvalidAttributeUsage2, "attr5").WithArguments("attr5", "Beep5"))
End Sub
<WorkItem(538370, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538370")>
<Fact>
Public Sub BC30663ERR_InvalidMultipleAttributeUsage1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidMultipleAttributeUsage1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly:clscompliant(true), Assembly:clscompliant(true), Assembly:clscompliant(true)>
<Module:clscompliant(true), Module:clscompliant(true), Module:clscompliant(true)>
Namespace DecAttr
<AttributeUsageAttribute(AttributeTargets.Property)>
Class attrProperty
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Parameter)>
Class attrParameter
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.ReturnValue)>
Class attrReturnType
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Class)>
Class attrClass
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Struct)>
Class attrStruct
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Method)>
Class attrMethod
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Field)>
Class attrField
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Enum)>
Class attrEnum
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Constructor)>
Class attrCtor
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Delegate)>
Class attrDelegate
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Interface)>
Class attrInterface
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Assembly)>
Class attrAssembly
Inherits Attribute
End Class
<AttributeUsageAttribute(AttributeTargets.Module)>
Class attrModule
Inherits Attribute
End Class
<attrClass(), attrClass(), attrClass()>
Module M1
End Module
<attrInterface(), attrInterface(), attrInterface()>
Interface I
End Interface
<attrEnum(), attrEnum(), attrEnum()>
Enum E
member
End Enum
<attrDelegate(), attrDelegate(), attrDelegate()>
Delegate Sub Del()
<attrClass(), attrClass()>
<attrClass()>
Class scen1(Of T1)
<attrCtor(), attrCtor(), attrCtor()>
Public Sub New()
End Sub
<attrField(), attrField(), attrField()>
Public field as Integer
Private newPropertyValue As String
<attrProperty()> ' first ok
<attrProperty()> ' first error
<attrProperty()> ' second error
Public Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
End Set
End Property
<attrMethod(), attrMethod(), attrMethod()>
Public function Sub1(Of T)(
<attrParameter(), attrParameter(), attrParameter()> a as Integer,
b as T) as <attrReturnType(), attrReturnType(), attrReturnType()> Integer
return 23
End function
End Class
<attrStruct()>
<attrStruct(), attrStruct()>
Structure S1
End Structure
End Namespace
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Assembly:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Assembly:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Module:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "Module:clscompliant(true)").WithArguments("CLSCompliantAttribute"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrDelegate()").WithArguments("attrDelegate"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrDelegate()").WithArguments("attrDelegate"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrEnum()").WithArguments("attrEnum"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrEnum()").WithArguments("attrEnum"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrInterface()").WithArguments("attrInterface"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrInterface()").WithArguments("attrInterface"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrStruct()").WithArguments("attrStruct"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrStruct()").WithArguments("attrStruct"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrParameter()").WithArguments("attrParameter"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrParameter()").WithArguments("attrParameter"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrClass()").WithArguments("attrClass"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrCtor()").WithArguments("attrCtor"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrCtor()").WithArguments("attrCtor"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrField()").WithArguments("attrField"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrField()").WithArguments("attrField"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrProperty()").WithArguments("attrProperty"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrProperty()").WithArguments("attrProperty"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrReturnType()").WithArguments("attrReturnType"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrReturnType()").WithArguments("attrReturnType"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrMethod()").WithArguments("attrMethod"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "attrMethod()").WithArguments("attrMethod"))
End Sub
<Fact()>
Public Sub BC30663ERR_InvalidMultipleAttributeUsage1a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidMultipleAttributeUsage1a">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
Inherits Attribute
End Class
Partial Class C1
<A1(), A2()>
Partial Private Sub M(i As Integer)
End Sub
End Class
Partial Class C1
<A1(), A2()>
Private Sub M(i As Integer)
Dim s As New C1
s.M(i)
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
End Sub
<Fact()>
Public Sub BC30663ERR_InvalidMultipleAttributeUsage1b()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidMultipleAttributeUsage1b">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
Inherits Attribute
End Class
Partial Class C1
<A2(), A1(), A2()>
Partial Private Sub M(i As Integer)
End Sub
End Class
Partial Class C1
<A1(), A1(), A2()>
Private Sub M(i As Integer)
Dim s As New C1
s.M(i)
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
End Sub
<Fact()>
Public Sub BC30663ERR_InvalidMultipleAttributeUsage1c()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidMultipleAttributeUsage1c">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
Inherits Attribute
End Class
Partial Class C1
Partial Private Sub M(<A1(), A2()>i As Integer)
End Sub
End Class
Partial Class C1
Private Sub M(<A1(), A2()>i As Integer)
Dim s As New C1
s.M(i)
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
End Sub
<Fact()>
Public Sub BC30663ERR_InvalidMultipleAttributeUsage1d()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidMultipleAttributeUsage1d">
<file name="a.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All, AllowMultiple:=False)>
Class A1
Inherits Attribute
End Class
<AttributeUsage(AttributeTargets.All, AllowMultiple:=True)>
Class A2
Inherits Attribute
End Class
Partial Class C1
Partial Private Sub M(<A2(), A1(), A2()>i As Integer)
End Sub
End Class
Partial Class C1
Private Sub M(<A1(), A1(), A2()>i As Integer)
Dim s As New C1
s.M(i)
End Sub
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"),
Diagnostic(ERRID.ERR_InvalidMultipleAttributeUsage1, "A1()").WithArguments("A1"))
End Sub
<Fact>
Public Sub BC30668ERR_UseOfObsoleteSymbol2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfObsoleteSymbol2">
<file name="a.vb"><![CDATA[
Imports System
Namespace NS
Class clstest
<Obsolete("Scenario6 Message", True)> Protected Friend WriteOnly Property scenario6()
Set(ByVal Value)
End Set
End Property
<Obsolete("", True)> Public Shared WriteOnly Property scenario7()
Set(ByVal Value)
End Set
End Property
<Obsolete()> Default Property scenario8(ByVal i As Integer) As Integer
Get
Return 1
End Get
Set(ByVal Value As Integer)
End Set
End Property
End Class
Class clsTest1
<Obsolete("", True)> Default Public ReadOnly Property scenario9(ByVal i As Long) As Long
Get
Return 1
End Get
End Property
End Class
Friend Module OBS022mod
<Obsolete("Scenario1 Message", True)> WriteOnly Property Scenario1a()
Set(ByVal Value)
End Set
End Property
<Obsolete("Scenario2 Message", True)> ReadOnly Property scenario2()
Get
Return 1
End Get
End Property
Sub OBS022()
Dim obj As Object = 23%
Dim cls1 As New clstest()
'COMPILEERROR: BC30668, "Scenario1a"
Scenario1a = obj
'COMPILEERROR: BC30668, "scenario2"
obj = scenario2
'COMPILEERROR: BC30668, "cls1.scenario6"
cls1.scenario6 = obj
'COMPILEERROR: BC30668, "clstest.scenario7"
clstest.scenario7 = obj
Dim cls2 As New clsTest1()
'COMPILEERROR: BC30668, "cls2"
obj = cls2(4)
End Sub
End Module
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30668: 'Public WriteOnly Property Scenario1a As Object' is obsolete: 'Scenario1 Message'.
Scenario1a = obj
~~~~~~~~~~
BC30668: 'Public ReadOnly Property scenario2 As Object' is obsolete: 'Scenario2 Message'.
obj = scenario2
~~~~~~~~~
BC30668: 'Protected Friend WriteOnly Property scenario6 As Object' is obsolete: 'Scenario6 Message'.
cls1.scenario6 = obj
~~~~~~~~~~~~~~
BC31075: 'Public Shared WriteOnly Property scenario7 As Object' is obsolete.
clstest.scenario7 = obj
~~~~~~~~~~~~~~~~~
BC31075: 'Public ReadOnly Default Property scenario9(i As Long) As Long' is obsolete.
obj = cls2(4)
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(538173, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538173")>
<Fact>
Public Sub BC30683ERR_InheritsStmtWrongOrder()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsStmtWrongOrder">
<file name="a.vb"><![CDATA[
Class cn1
Public ss As Long
'COMPILEERROR: BC30683, "Inherits c2"
Inherits c2
End Class
Class c2
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30683: 'Inherits' statement must precede all declarations in a class.
Inherits c2
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30688ERR_InterfaceEventCantUse1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceEventCantUse1">
<file name="a.vb"><![CDATA[
Interface I
Event Goo() Implements I.Goo
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30688: Events in interfaces cannot be declared 'Implements'.
Event Goo() Implements I.Goo
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30695ERR_MustShadow2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustShadow2">
<file name="a.vb"><![CDATA[
Class c1
'COMPILEERROR: BC30695, "goo",
Sub goo()
End Sub
Shadows Function goo(ByVal i As Integer) As Integer
End Function
End Class
Class c2_1
Public goo As Integer
End Class
Class c2_2
Inherits c2_1
Shadows Sub goo()
End Sub
'COMPILEERROR: BC30695,"goo"
Sub goo(ByVal c As Char)
End Sub
'COMPILEERROR: BC30695,"goo"
Sub goo(ByVal d As Double)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
Sub goo()
~~~
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
Sub goo(ByVal c As Char)
~~~
BC40004: sub 'goo' conflicts with variable 'goo' in the base class 'c2_1' and should be declared 'Shadows'.
Sub goo(ByVal c As Char)
~~~
BC30695: sub 'goo' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
Sub goo(ByVal d As Double)
~~~
BC40004: sub 'goo' conflicts with variable 'goo' in the base class 'c2_1' and should be declared 'Shadows'.
Sub goo(ByVal d As Double)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30695ERR_MustShadow2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustBeOverloads2">
<file name="a.vb"><![CDATA[
Class Base
Sub Method(x As Integer)
End Sub
Overloads Sub Method(x As String)
End Sub
End Class
Partial Class Derived1
Inherits Base
Shadows Sub Method(x As String)
End Sub
End Class
]]></file>
<file name="b.vb"><![CDATA[
Class Derived1
Inherits Base
Overrides Sub Method(x As Integer)
End Sub
End Class
Class Derived2
Inherits Base
Function Method(x As String, y As Integer) As String
End Function
Overrides Sub Method(x As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
Sub Method(x As Integer)
~~~~~~
BC30695: sub 'Method' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
Overrides Sub Method(x As Integer)
~~~~~~
BC31086: 'Public Overrides Sub Method(x As Integer)' cannot override 'Public Sub Method(x As Integer)' because it is not declared 'Overridable'.
Overrides Sub Method(x As Integer)
~~~~~~
BC31409: function 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
Function Method(x As String, y As Integer) As String
~~~~~~
BC40003: function 'Method' shadows an overloadable member declared in the base class 'Base'. If you want to overload the base method, this method must be declared 'Overloads'.
Function Method(x As String, y As Integer) As String
~~~~~~
BC31086: 'Public Overrides Sub Method(x As Integer)' cannot override 'Public Sub Method(x As Integer)' because it is not declared 'Overridable'.
Overrides Sub Method(x As Integer)
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30696ERR_OverloadWithOptionalTypes2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverloadWithOptionalTypes2">
<file name="a.vb"><![CDATA[
Class Cla30696
'COMPILEERROR: BC30696, "goo"
Public Function goo(Optional ByVal arg As ULong = 1)
Return "BC30696"
End Function
Public Function goo(Optional ByVal arg As Integer = 1)
Return "BC30696"
End Function
'COMPILEERROR: BC30696, "goo3"
Public Function goo1(ByVal arg As Integer, Optional ByVal arg1 As String = "")
Return "BC30696"
End Function
Public Function goo1(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
Return "BC30696"
End Function
End Class
Interface Scen2_1
'COMPILEERROR: BC30696, "goo"
Function goo(Optional ByVal arg As Object = Nothing)
Function goo(Optional ByVal arg As ULong = 1)
'COMPILEERROR: BC30696, "goo3"
Function goo1(ByVal arg As Integer, Optional ByVal arg1 As Object = Nothing)
Function goo1(ByVal arg As Integer, Optional ByVal arg1 As ULong = 1)
End Interface
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
End Sub
<WorkItem(529018, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529018")>
<Fact()>
Public Sub BC30697ERR_OverrideWithOptionalTypes2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverrideWithOptionalTypes2">
<file name="a.vb"><![CDATA[
Class Base
Public Overridable Sub goo(ByVal x As String, Optional ByVal y As String = "hello")
End Sub
End Class
Class C1
Inherits Base
Public Overrides Sub goo(ByVal x As String, Optional ByVal y As Integer = 1)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30697: 'Public Overrides Sub goo(x As String, [y As Integer = 1])' cannot override 'Public Overridable Sub goo(x As String, [y As String = "hello"])' because they differ by the types of optional parameters.
Public Overrides Sub goo(ByVal x As String, Optional ByVal y As Integer = 1)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30728ERR_StructsCannotHandleEvents()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StructsCannotHandleEvents">
<file name="a.vb"><![CDATA[
Public Structure S1
Event e()
Sub goo() Handles c.e
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30728: Methods declared in structures cannot have 'Handles' clauses.
Sub goo() Handles c.e
~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Sub goo() Handles c.e
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30730ERR_OverridesImpliesOverridable()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverridesImpliesOverridable">
<file name="a.vb"><![CDATA[
Class CBase
overridable function goo
End function
End Class
Class C1
Inherits CBase
Overrides public Overridable function goo
End function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30730: Methods declared 'Overrides' cannot be declared 'Overridable' because they are implicitly overridable.
Overrides public Overridable function goo
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Checks for ERRID_ModuleCantUseMemberSpecifier1
' Old name="ModifierErrorsInsideModules"
<Fact>
Public Sub BC30735ERR_ModuleCantUseTypeSpecifier1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module m1
protected Class c
Protected Enum e1
a
End Enum
End Class
Protected Enum e5
a
End Enum
Shadows Enum e6
a
End Enum
protected structure struct1
end structure
protected delegate Sub d1(i as integer)
End Module
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30735: Type in a Module cannot be declared 'protected'.
protected Class c
~~~~~~~~~
BC30735: Type in a Module cannot be declared 'Protected'.
Protected Enum e5
~~~~~~~~~
BC30735: Type in a Module cannot be declared 'Shadows'.
Shadows Enum e6
~~~~~~~
BC30735: Type in a Module cannot be declared 'protected'.
protected structure struct1
~~~~~~~~~
BC30735: Type in a Module cannot be declared 'protected'.
protected delegate Sub d1(i as integer)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BC30770ERR_DefaultEventNotFound1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="DefaultEventNotFound1">
<file name="a.vb"><![CDATA[
Imports System.ComponentModel
<DefaultEvent("LogonCompleted")> Public Class EventSource1
Private Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent("LogonCompleteD")> Public Class EventSource2
Public Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent("LogonCompleteD")> Public Class EventSource22
Friend Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent("LogonCompleteD")> Public Class EventSource23
Protected Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent("LogonCompleteD")> Public Class EventSource24
Protected Friend Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent(Nothing)> Public Class EventSource3
End Class
<DefaultEvent("")> Public Class EventSource4
End Class
<DefaultEvent(" ")> Public Class EventSource5
End Class
Class Base
Public Event LogonCompleted()
End Class
<DefaultEvent("LogonCompleted")> Class EventSource6
Inherits Base
Private Shadows Event LogonCompleted(ByVal UserName As String)
End Class
<DefaultEvent("LogonCompleted")> Interface EventSource7
End Interface
<DefaultEvent("LogonCompleted")> Structure EventSource8
End Structure
]]></file>
</compilation>, {SystemRef}, TestOptions.ReleaseDll)
Dim expectedErrors = <errors><![CDATA[
BC30770: Event 'LogonCompleted' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleted")> Public Class EventSource1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event 'LogonCompleteD' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleteD")> Public Class EventSource23
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event 'LogonCompleteD' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent("LogonCompleteD")> Public Class EventSource24
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30770: Event ' ' specified by the 'DefaultEvent' attribute is not a publicly accessible event for this class.
<DefaultEvent(" ")> Public Class EventSource5
~~~~~~~~~~~~~~~~~~
BC30662: Attribute 'DefaultEventAttribute' cannot be applied to 'EventSource7' because the attribute is not valid on this declaration type.
<DefaultEvent("LogonCompleted")> Interface EventSource7
~~~~~~~~~~~~
BC30662: Attribute 'DefaultEventAttribute' cannot be applied to 'EventSource8' because the attribute is not valid on this declaration type.
<DefaultEvent("LogonCompleted")> Structure EventSource8
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact, WorkItem(545966, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545966")>
Public Sub BC30772ERR_InvalidNonSerializedUsage()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidNonSerializedUsage">
<file name="a.vb"><![CDATA[
Imports System
Module M1
<NonSerialized>
Dim x = 1
<NonSerialized>
Event E As System.Action
End Module
]]></file>
</compilation>)
Dim expectedErrors =
<errors><![CDATA[
BC30772: 'NonSerialized' attribute will not have any effect on this member because its containing class is not exposed as 'Serializable'.
<NonSerialized>
~~~~~~~~~~~~~
BC30772: 'NonSerialized' attribute will not have any effect on this member because its containing class is not exposed as 'Serializable'.
<NonSerialized>
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30786ERR_ModuleCantUseDLLDeclareSpecifier1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleCantUseDLLDeclareSpecifier1">
<file name="a.vb"><![CDATA[
Module M
Protected Declare Sub Goo Lib "My" ()
End Module
]]></file>
</compilation>)
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_ModuleCantUseDLLDeclareSpecifier1, "Protected").WithArguments("Protected"))
End Sub
<Fact>
Public Sub BC30791ERR_StructCantUseDLLDeclareSpecifier1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StructCantUseDLLDeclareSpecifier1">
<file name="a.vb"><![CDATA[
Structure M
Protected Declare Sub Goo Lib "My" ()
End Structure
]]></file>
</compilation>)
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_StructCantUseDLLDeclareSpecifier1, "Protected").WithArguments("Protected"))
End Sub
<Fact>
Public Sub BC30795ERR_SharedStructMemberCannotSpecifyNew()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SharedStructMemberCannotSpecifyNew">
<file name="a.vb"><![CDATA[
Structure S1
' does not work
Dim structVar1 As New System.ApplicationException
' works
Shared structVar2 As New System.ApplicationException
End Structure
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30795: Non-shared members in a Structure cannot be declared 'New'.
Dim structVar1 As New System.ApplicationException
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC31049ERR_SharedStructMemberCannotSpecifyInitializers()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC30795ERR_SharedStructMemberCannotSpecifyInitializers">
<file name="a.vb"><![CDATA[
Structure S1
' does not work
Dim structVar1 As System.ApplicationException = New System.ApplicationException()
' works
Shared structVar2 As System.ApplicationException = New System.ApplicationException()
End Structure
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
Dim structVar1 As System.ApplicationException = New System.ApplicationException()
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC30798ERR_InvalidTypeForAliasesImport2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InvalidTypeForAliasesImport2">
<file name="a.vb"><![CDATA[
Imports aa = System.Action 'BC30798
Imports bb = ns1.Intfc2.intfc2goo 'BC40056
Namespace ns1
Public Class Intfc2
Public intfc2goo As Integer
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30798: 'Action' for the Imports alias to 'Action' does not refer to a Namespace, Class, Structure, Interface, Enum or Module.
Imports aa = System.Action 'BC30798
~~~~~~~~~~~~~~~~~~
BC40056: Namespace or type specified in the Imports 'ns1.Intfc2.intfc2goo' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports bb = ns1.Intfc2.intfc2goo 'BC40056
~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
<WorkItem(13926, "https://github.com/dotnet/roslyn/issues/13926")>
Public Sub BadAliasTarget()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports BadAlias = unknown
Public Class Class1
Public Shared Sub Main()
End Sub
Function Test() As BadAlias
Return Nothing
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'unknown' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports BadAlias = unknown
~~~~~~~
BC31208: Type or namespace 'unknown' is not defined.
Function Test() As BadAlias
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
Dim test = compilation1.GetTypeByMetadataName("Class1").GetMember(Of MethodSymbol)("Test")
Assert.True(test.ReturnType.IsErrorType())
Assert.Equal(DiagnosticSeverity.Error, DirectCast(test.ReturnType, ErrorTypeSymbol).ErrorInfo.Severity)
End Sub
<Fact>
Public Sub BC30828ERR_ObsoleteAsAny()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ObsoleteAsAny">
<file name="a.vb"><![CDATA[
Class C1
Declare Sub goo Lib "a.dll" (ByRef bit As Any)
End Class
]]></file>
</compilation>)
compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_ObsoleteAsAny, "Any").WithArguments("Any"))
End Sub
<Fact>
Public Sub BC30906ERR_OverrideWithArrayVsParamArray2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverrideWithArrayVsParamArray2">
<file name="a.vb"><![CDATA[
Class C1
Overridable Sub goo(ByVal a As Integer())
End Sub
End Class
Class C2
Inherits C1
Overrides Sub goo(ByVal ParamArray a As Integer())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30906: 'Public Overrides Sub goo(ParamArray a As Integer())' cannot override 'Public Overridable Sub goo(a As Integer())' because they differ by parameters declared 'ParamArray'.
Overrides Sub goo(ByVal ParamArray a As Integer())
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30907ERR_CircularBaseDependencies4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CircularBaseDependencies4">
<file name="a.vb"><![CDATA[
Class A
Inherits B
End Class
Class B
Inherits C
End Class
Class C
Inherits A.D
End Class
Partial Class A
Class D
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30907: This inheritance causes circular dependencies between class 'A' and its nested or base type '
'A' inherits from 'B'.
'B' inherits from 'C'.
'C' inherits from 'A.D'.
'A.D' is nested in 'A'.'.
Inherits B
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30908ERR_NestedBase2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NestedBase2">
<file name="a.vb"><![CDATA[
NotInheritable Class cls1b
Inherits cls1a
MustInherit Class cls1a
Sub subScen1()
gstrexpectedresult = "Scen1"
End Sub
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31446: Class 'cls1b' cannot reference its nested type 'cls1b.cls1a' in Inherits clause.
Inherits cls1a
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30909ERR_AccessMismatchOutsideAssembly4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Class PublicClass
Protected Friend Structure ProtectedFriendStructure
End Structure
End Class
Friend Class FriendClass
End Class
Friend Structure FriendStructure
End Structure
Friend Interface FriendInterface
End Interface
Friend Enum FriendEnum
A
End Enum
Public Class A
Inherits PublicClass
Public F As ProtectedFriendStructure
Public G As FriendClass
Public H As FriendStructure
End Class
Public Structure B
Public F As FriendInterface
Public G As FriendEnum
End Structure
Public Class C
Inherits PublicClass
Public Function F() As ProtectedFriendStructure
End Function
Public Sub M(x As FriendClass)
End Sub
End Class
Public Interface I
Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'A'.
Public F As ProtectedFriendStructure
~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'G' cannot expose type 'FriendClass' outside the project through class 'A'.
Public G As FriendClass
~~~~~~~~~~~
BC30909: 'H' cannot expose type 'FriendStructure' outside the project through class 'A'.
Public H As FriendStructure
~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendInterface' outside the project through structure 'B'.
Public F As FriendInterface
~~~~~~~~~~~~~~~
BC30909: 'G' cannot expose type 'FriendEnum' outside the project through structure 'B'.
Public G As FriendEnum
~~~~~~~~~~
BC30909: 'F' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'C'.
Public Function F() As ProtectedFriendStructure
~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendClass' outside the project through class 'C'.
Public Sub M(x As FriendClass)
~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendStructure' outside the project through interface 'I'.
Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~~~~~~
BC30909: 'y' cannot expose type 'FriendInterface' outside the project through interface 'I'.
Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendEnum' outside the project through interface 'I'.
Function F(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Class PublicClass
Protected Friend Structure ProtectedFriendStructure
End Structure
End Class
Friend Class FriendClass
End Class
Friend Structure FriendStructure
End Structure
Friend Interface FriendInterface
End Interface
Friend Enum FriendEnum
A
End Enum
Public Class A
Inherits PublicClass
Property P As ProtectedFriendStructure
Property Q As FriendClass
Property R As FriendStructure
End Class
Public Structure B
Property P As FriendInterface
Property Q As FriendEnum
End Structure
Public Class C
Inherits PublicClass
ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
Get
Return Nothing
End Get
End Property
End Class
Public Interface I
ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'P' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'A'.
Property P As ProtectedFriendStructure
~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'Q' cannot expose type 'FriendClass' outside the project through class 'A'.
Property Q As FriendClass
~~~~~~~~~~~
BC30909: 'R' cannot expose type 'FriendStructure' outside the project through class 'A'.
Property R As FriendStructure
~~~~~~~~~~~~~~~
BC30909: 'P' cannot expose type 'FriendInterface' outside the project through structure 'B'.
Property P As FriendInterface
~~~~~~~~~~~~~~~
BC30909: 'Q' cannot expose type 'FriendEnum' outside the project through structure 'B'.
Property Q As FriendEnum
~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendClass' outside the project through class 'C'.
ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
~~~~~~~~~~~
BC30909: 'P' cannot expose type 'PublicClass.ProtectedFriendStructure' outside the project through class 'C'.
ReadOnly Property P(x As FriendClass) As ProtectedFriendStructure
~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'x' cannot expose type 'FriendStructure' outside the project through interface 'I'.
ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~~~~~~
BC30909: 'y' cannot expose type 'FriendInterface' outside the project through interface 'I'.
ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~~~~~~
BC30909: 'P' cannot expose type 'FriendEnum' outside the project through interface 'I'.
ReadOnly Property P(x As FriendStructure, y As FriendInterface) As FriendEnum
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
<Fact()>
Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Class PublicClass
Protected Friend Interface ProtectedFriendInterface
End Interface
Protected Friend Class ProtectedFriendClass
End Class
End Class
Friend Interface FriendInterface
End Interface
Friend Class FriendClass
End Class
Public Class A
Inherits PublicClass
Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
End Sub
End Class
Public Structure B
Public Sub M(Of T As FriendInterface, U As FriendClass)()
End Sub
End Structure
Public Interface I
Function F(Of T As FriendInterface, U As FriendClass)() As Object
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'M' cannot expose type 'PublicClass.ProtectedFriendInterface' outside the project through class 'A'.
Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
~~~~~~~~~~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'PublicClass.ProtectedFriendClass' outside the project through class 'A'.
Public Sub M(Of T As ProtectedFriendInterface, U As ProtectedFriendClass)()
~~~~~~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'FriendInterface' outside the project through structure 'B'.
Public Sub M(Of T As FriendInterface, U As FriendClass)()
~~~~~~~~~~~~~~~
BC30909: 'M' cannot expose type 'FriendClass' outside the project through structure 'B'.
Public Sub M(Of T As FriendInterface, U As FriendClass)()
~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendInterface' outside the project through interface 'I'.
Function F(Of T As FriendInterface, U As FriendClass)() As Object
~~~~~~~~~~~~~~~
BC30909: 'F' cannot expose type 'FriendClass' outside the project through interface 'I'.
Function F(Of T As FriendInterface, U As FriendClass)() As Object
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528153, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528153")>
<Fact()>
Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Public Interface A
Friend Interface B
End Interface
Public Interface C
Function F() As B
Public Interface D
Sub M(o As B)
End Interface
End Interface
End Interface
Public Interface E
Inherits A
Function F() As B
End Interface
Public Interface F
Sub M(o As A.B)
End Interface
End Namespace
Public Interface G
Function F() As N.A.B
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'C'.
Function F() As B
~
BC30909: 'o' cannot expose type 'A.B' outside the project through interface 'D'.
Sub M(o As B)
~
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'E'.
Function F() As B
~
BC30909: 'o' cannot expose type 'A.B' outside the project through interface 'F'.
Sub M(o As A.B)
~~~
BC30909: 'F' cannot expose type 'A.B' outside the project through interface 'G'.
Function F() As N.A.B
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30909ERR_AccessMismatchOutsideAssembly4_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Friend Enum E
A
End Enum
Public Class C
Public Const F As E = E.A
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30909: 'F' cannot expose type 'E' outside the project through class 'C'.
Public Const F As E = E.A
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30910ERR_InheritanceAccessMismatchOutside3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritanceAccessMismatchOutside3">
<file name="a.vb"><![CDATA[
Friend Interface I1
End Interface
Public Interface I2
Inherits I1
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30910: 'I2' cannot inherit from interface 'I1' because it expands the access of the base interface outside the assembly.
Inherits I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30911ERR_UseOfObsoletePropertyAccessor3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UseOfObsoletePropertyAccessor3">
<file name="a.vb"><![CDATA[
Imports System
Class C1
ReadOnly Property p As String
<Obsolete("hello", True)>
Get
Return "hello"
End Get
End Property
End Class
Class C2
Sub goo()
Dim s As New C1
Dim a = s.p
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30911: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete: 'hello'.
Dim a = s.p
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30912ERR_UseOfObsoletePropertyAccessor2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UseOfObsoletePropertyAccessor2">
<file name="a.vb"><![CDATA[
Imports System
Class C1
ReadOnly Property p As String
<Obsolete(nothing,True)>
Get
Return "hello"
End Get
End Property
End Class
Class C2
Sub goo()
Dim s As New C1
Dim a = s.p
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30912: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete.
Dim a = s.p
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543640, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543640")>
Public Sub BC30914ERR_AccessMismatchImplementedEvent6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AccessMismatchImplementedEvent6">
<file name="a.vb"><![CDATA[
Public Class C
Protected Interface i1
Event goo()
End Interface
Friend Class c1
Implements i1
Public Event goo() Implements i1.goo
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30914: 'goo' cannot expose the underlying delegate type 'C.i1.gooEventHandler' of the event it is implementing to namespace '<Default>' through class 'c1'.
Public Event goo() Implements i1.goo
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543641, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543641")>
Public Sub BC30915ERR_AccessMismatchImplementedEvent4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AccessMismatchImplementedEvent4">
<file name="a.vb"><![CDATA[
Interface i1
Event goo()
End Interface
Public Class c1
Implements i1
Public Event goo() Implements i1.goo
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30915: 'goo' cannot expose the underlying delegate type 'i1.gooEventHandler' of the event it is implementing outside the project through class 'c1'.
Public Event goo() Implements i1.goo
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30916ERR_InheritanceCycleInImportedType1()
Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
<file name="a.vb"><![CDATA[
Class C
Class C
Inherits C1
implements I1
End Class
End Class
]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
Inherits C1
~~
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
End Sub
<Fact>
Public Sub BC30916ERR_InheritanceCycleInImportedType1_2()
Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
<file name="a.vb"><![CDATA[
Class C
Inherits C2
implements I1
End Class
]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C2' is not supported because it either directly or indirectly inherits from itself.
Inherits C2
~~
BC30916: Type 'C2' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
End Sub
<Fact>
Public Sub BC30916ERR_InheritanceCycleInImportedType1_3()
Dim C1 = TestReferences.SymbolsTests.CyclicInheritance.Class1
Dim C2 = TestReferences.SymbolsTests.CyclicInheritance.Class2
Dim Comp = CompilationUtils.CreateEmptyCompilationWithReferences(
<compilation name="Compilation">
<file name="a.vb"><![CDATA[
Class C
Inherits C1
implements I1
End Class
]]></file>
</compilation>,
{NetFramework.mscorlib, C1, C2})
Dim expectedErrors = <errors><![CDATA[
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
Inherits C1
~~
BC30916: Type 'C1' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
BC30916: Type 'I1' is not supported because it either directly or indirectly inherits from itself.
implements I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
End Sub
<Fact>
Public Sub BC30921ERR_InheritsTypeArgAccessMismatch7()
Dim Comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsTypeArgAccessMismatch7">
<file name="a.vb"><![CDATA[
Public Class containingClass
Public Class baseClass(Of t)
End Class
Friend Class derivedClass
Inherits baseClass(Of internalStructure)
End Class
Private Structure internalStructure
Dim firstMember As Integer
End Structure
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30921: 'derivedClass' cannot inherit from class 'containingClass.baseClass(Of containingClass.internalStructure)' because it expands the access of type 'containingClass.internalStructure' to namespace '<Default>'.
Inherits baseClass(Of internalStructure)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
End Sub
<Fact>
Public Sub BC30922ERR_InheritsTypeArgAccessMismatchOutside5()
Dim Comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritsTypeArgAccessMismatchOutside5">
<file name="a.vb"><![CDATA[
Public Class baseClass(Of t)
End Class
Public Class derivedClass
Inherits baseClass(Of restrictedStructure)
End Class
Friend Structure restrictedStructure
Dim firstMember As Integer
End Structure
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30922: 'derivedClass' cannot inherit from class 'baseClass(Of restrictedStructure)' because it expands the access of type 'restrictedStructure' outside the assembly.
Inherits baseClass(Of restrictedStructure)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(Comp, expectedErrors)
End Sub
<Fact>
Public Sub BC30925ERR_PartialTypeAccessMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PartialTypeAccessMismatch3">
<file name="a.vb"><![CDATA[
Class s1
Partial Protected Class c1
End Class
Partial Private Class c1
End Class
Partial Friend Class c1
End Class
Partial Protected Interface I1
End Interface
Partial Private Interface I1
End Interface
Partial Friend Interface I1
End Interface
End Class
Partial Public Module m1
End Module
Partial Friend Module m1
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30925: Specified access 'Private' for 'c1' does not match the access 'Protected' specified on one of its other partial types.
Partial Private Class c1
~~
BC30925: Specified access 'Friend' for 'c1' does not match the access 'Protected' specified on one of its other partial types.
Partial Friend Class c1
~~
BC30925: Specified access 'Private' for 'I1' does not match the access 'Protected' specified on one of its other partial types.
Partial Private Interface I1
~~
BC30925: Specified access 'Friend' for 'I1' does not match the access 'Protected' specified on one of its other partial types.
Partial Friend Interface I1
~~
BC30925: Specified access 'Friend' for 'm1' does not match the access 'Public' specified on one of its other partial types.
Partial Friend Module m1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30926ERR_PartialTypeBadMustInherit1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialTypeBadMustInherit1">
<file name="a.vb"><![CDATA[
Partial Class C1
Partial MustInherit Class C2
End Class
End Class
Partial Class C1
Partial NotInheritable Class C2
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'C2' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
Partial MustInherit Class C2
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' dup of 30607?
<Fact>
Public Sub BC30927ERR_MustOverOnNotInheritPartClsMem1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustOverOnNotInheritPartClsMem1">
<file name="a.vb"><![CDATA[
Public Class C1
MustOverride Sub goo()
End Class
Partial Public NotInheritable Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30927: 'MustOverride' cannot be specified on this member because it is in a partial type that is declared 'NotInheritable' in another partial definition.
MustOverride Sub goo()
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30928ERR_BaseMismatchForPartialClass3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BaseMismatchForPartialClass3">
<file name="a.vb"><![CDATA[
Option Strict On
Interface I1
End Interface
Interface I2
End Interface
Partial Interface I3
Inherits I1
End Interface
Partial Interface I3
Inherits I2
End Interface
Class TestModule
Sub Test(x As I3)
Dim y As I1 = x
Dim z As I2 = x
End Sub
End Class
Partial Class Cls2(Of T, U)
Inherits Class1(Of U, T)
End Class
Partial Class Cls2(Of T, U)
Inherits Class1(Of T, T)
End Class
Class Class1(Of X, Y)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30928: Base class 'Class1(Of T, T)' specified for class 'Cls2' cannot be different from the base class 'Class1(Of U, T)' of one of its other partial types.
Inherits Class1(Of T, T)
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30931ERR_PartialTypeTypeParamNameMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A(Of T)
Partial Class B(Of U As A(Of T), V As A(Of V))
End Class
Partial Class B(Of X As A(Of T), Y As A(Of Y))
End Class
Partial Interface I(Of U As A(Of T), V As A(Of V))
End Interface
Partial Interface I(Of X As A(Of T), Y As A(Of Y))
End Interface
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30931: Type parameter name 'X' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'B'.
Partial Class B(Of X As A(Of T), Y As A(Of Y))
~
BC30931: Type parameter name 'Y' does not match the name 'V' of the corresponding type parameter defined on one of the other partial types of 'B'.
Partial Class B(Of X As A(Of T), Y As A(Of Y))
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B'.
Partial Class B(Of X As A(Of T), Y As A(Of Y))
~
BC30002: Type 'Y' is not defined.
Partial Class B(Of X As A(Of T), Y As A(Of Y))
~
BC30931: Type parameter name 'X' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'I'.
Partial Interface I(Of X As A(Of T), Y As A(Of Y))
~
BC30931: Type parameter name 'Y' does not match the name 'V' of the corresponding type parameter defined on one of the other partial types of 'I'.
Partial Interface I(Of X As A(Of T), Y As A(Of Y))
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'I'.
Partial Interface I(Of X As A(Of T), Y As A(Of Y))
~
BC30002: Type 'Y' is not defined.
Partial Interface I(Of X As A(Of T), Y As A(Of Y))
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30932ERR_PartialTypeConstraintMismatch1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
' Different constraints.
Partial Class A1(Of T As Structure)
End Class
Partial Class A1(Of T As Class)
End Class
Partial Class A2(Of T As Structure, U As IA(Of T))
End Class
Partial Class A2(Of T As Class, U As IB)
End Class
Partial Class A3(Of T As IA(Of T))
End Class
Partial Class A3(Of T As IA(Of IA(Of T)))
End Class
Partial Class A4(Of T As {Structure, IB})
End Class
Partial Class A4(Of T As {Class, IB})
End Class
Partial Structure A5(Of T As {IA(Of T), New})
End Structure
Partial Structure A5(Of T As {IA(Of T), New})
End Structure
Partial Structure A5(Of T As {IB, New})
End Structure
' Additional constraints.
Partial Class B1(Of T As New)
End Class
Partial Class B1(Of T As {Class, New})
End Class
Partial Class B2(Of T, U As {IA(Of T)})
End Class
Partial Class B2(Of T, U As {IB, IA(Of T)})
End Class
' Missing constraints.
Partial Class C1(Of T As {Class, New})
End Class
Partial Class C1(Of T As {New})
End Class
Partial Structure C2(Of T, U As {IB, IA(Of T)})
End Structure
Partial Structure C2(Of T, U As {IA(Of T)})
End Structure
' Same constraints, different order.
Partial Class D1(Of T As {Structure, IA(Of T), IB})
End Class
Partial Class D1(Of T As {IB, IA(Of T), Structure})
End Class
Partial Class D1(Of T As {Structure, IB, IA(Of T)})
End Class
Partial Class D2(Of T, U, V As {T, U})
End Class
Partial Class D2(Of T, U, V As {U, T})
End Class
' Different constraint clauses.
Partial Class E1(Of T, U As T)
End Class
Partial Class E1(Of T As Class, U)
End Class
Partial Class E1(Of T, U As T)
End Class
Partial Class E2(Of T, U As IB)
End Class
Partial Class E2(Of T As IA(Of U), U)
End Class
Partial Class E2(Of T As IB, U)
End Class
' Additional constraint clause.
Partial Class F1(Of T)
End Class
Partial Class F1(Of T)
End Class
Partial Class F1(Of T As Class)
End Class
Partial Class F2(Of T As Class, U)
End Class
Partial Class F2(Of T As Class, U As T)
End Class
' Missing constraint clause.
Partial Class G1(Of T As {Class})
End Class
Partial Class G1(Of T)
End Class
Partial Structure G2(Of T As {Class}, U As {T})
End Structure
Partial Structure G2(Of T As {Class}, U)
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A1'.
Partial Class A1(Of T As Class)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A2'.
Partial Class A2(Of T As Class, U As IB)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A2'.
Partial Class A2(Of T As Class, U As IB)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A3'.
Partial Class A3(Of T As IA(Of IA(Of T)))
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A4'.
Partial Class A4(Of T As {Class, IB})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A5'.
Partial Structure A5(Of T As {IB, New})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B1'.
Partial Class B1(Of T As {Class, New})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B2'.
Partial Class B2(Of T, U As {IB, IA(Of T)})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'C1'.
Partial Class C1(Of T As {New})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'C2'.
Partial Structure C2(Of T, U As {IA(Of T)})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E1'.
Partial Class E1(Of T As Class, U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E1'.
Partial Class E1(Of T As Class, U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IA(Of U), U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IA(Of U), U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IB, U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'E2'.
Partial Class E2(Of T As IB, U)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'F1'.
Partial Class F1(Of T As Class)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'F2'.
Partial Class F2(Of T As Class, U As T)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'G1'.
Partial Class G1(Of T)
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'G2'.
Partial Structure G2(Of T As {Class}, U)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Unrecognized constraint types should not result
' in constraint mismatch errors in partial types.
<Fact()>
Public Sub BC30932ERR_PartialTypeConstraintMismatch1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Partial Class C(Of T As {Class, Unknown})
End Class
Partial Class C(Of T As {Unknown, Class})
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'Unknown' is not defined.
Partial Class C(Of T As {Class, Unknown})
~~~~~~~
BC30002: Type 'Unknown' is not defined.
Partial Class C(Of T As {Unknown, Class})
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Duplicate constraints in partial types.
<Fact()>
Public Sub BC30932ERR_PartialTypeConstraintMismatch1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Partial Class A(Of T As {New, New, I, I})
End Class
Partial Class A(Of T As {New, I})
End Class
Partial Class B(Of T, U As T)
End Class
Partial Class B(Of T, U As {T, T})
End Class
]]></file>
</compilation>)
' Note: Dev10 simply reports the duplicate constraint in each case, even
' in subsequent partial declarations. Arguably the Dev10 behavior is better.
Dim expectedErrors1 = <errors><![CDATA[
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
Partial Class A(Of T As {New, New, I, I})
~~~
BC32071: Constraint type 'I' already specified for this type parameter.
Partial Class A(Of T As {New, New, I, I})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'A'.
Partial Class A(Of T As {New, I})
~
BC30932: Constraints for this type parameter do not match the constraints on the corresponding type parameter defined on one of the other partial types of 'B'.
Partial Class B(Of T, U As {T, T})
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30935ERR_AmbiguousOverrides3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AmbiguousOverrides3">
<file name="a.vb"><![CDATA[
Public Class baseClass(Of t)
Public Overridable Sub goo(ByVal inputValue As String)
End Sub
Public Overridable Sub goo(ByVal inputValue As t)
End Sub
End Class
Public Class derivedClass
Inherits baseClass(Of String)
Overrides Sub goo(ByVal inputValue As String)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30935: Member 'Public Overridable Sub goo(inputValue As String)' that matches this signature cannot be overridden because the class 'baseClass' contains multiple members with this same name and signature:
'Public Overridable Sub goo(inputValue As String)'
'Public Overridable Sub goo(inputValue As t)'
Overrides Sub goo(ByVal inputValue As String)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC30937ERR_AmbiguousImplements3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AmbiguousImplements3">
<file name="a.vb"><![CDATA[
Public Interface baseInterface(Of t)
Sub doSomething(ByVal inputValue As String)
Sub doSomething(ByVal inputValue As t)
End Interface
Public Class implementingClass
Implements baseInterface(Of String)
Sub doSomething(ByVal inputValue As String) _
Implements baseInterface(Of String).doSomething
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'implementingClass' must implement 'Sub doSomething(inputValue As String)' for interface 'baseInterface(Of String)'.
Implements baseInterface(Of String)
~~~~~~~~~~~~~~~~~~~~~~~~
BC30937: Member 'baseInterface(Of String).doSomething' that matches this signature cannot be implemented because the interface 'baseInterface(Of String)' contains multiple members with this same name and signature:
'Sub doSomething(inputValue As String)'
'Sub doSomething(inputValue As String)'
Implements baseInterface(Of String).doSomething
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC30972ERR_StructLayoutAttributeNotAllowed()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StructLayoutAttributeNotAllowed">
<file name="a.vb"><![CDATA[
Option Strict On
Imports System.Runtime.InteropServices
<StructLayout(1)>
Structure C1(Of T)
Sub goo(ByVal a As T)
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30972: Attribute 'StructLayout' cannot be applied to a generic type.
<StructLayout(1)>
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31029ERR_EventHandlerSignatureIncompatible2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventHandlerSignatureIncompatible2">
<file name="a.vb"><![CDATA[
option strict on
Class clsTest1
Event ev1(ByVal ArgC As Char)
End Class
Class clsTest2
Inherits clsTest1
Shadows Event ev1(ByVal ArgI As Integer)
End Class
Class clsTest3
Dim WithEvents clsTest As clsTest2
Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31029: Method 'subTest' cannot handle event 'ev1' because they do not have a compatible signature.
Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31029ERR_EventHandlerSignatureIncompatible2a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventHandlerSignatureIncompatible2a">
<file name="a.vb"><![CDATA[
option strict off
Class clsTest1
Event ev1(ByVal ArgC As Char)
End Class
Class clsTest2
Inherits clsTest1
Shadows Event ev1(ByVal ArgI As Integer)
End Class
Class clsTest3
Dim WithEvents clsTest As clsTest2
Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31029: Method 'subTest' cannot handle event 'ev1' because they do not have a compatible signature.
Private Sub subTest(ByVal ArgC As Char) Handles clsTest.ev1
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542143, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542143")>
<Fact>
Public Sub BC31033ERR_InterfaceImplementedTwice1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceImplementedTwice1">
<file name="a.vb"><![CDATA[
Class C1
Implements I1(Of Integer), I1(Of Double), I1(Of Integer)
End Class
Interface I1(Of T)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31033: Interface 'I1(Of Integer)' can be implemented only once by this type.
Implements I1(Of Integer), I1(Of Double), I1(Of Integer)
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31033ERR_InterfaceImplementedTwice1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceImplementedTwice1">
<file name="a.vb"><![CDATA[
Class c3_1
Implements i3_1
End Class
Class c3_2
Inherits c3_1
Implements i3_1, i3_1, i3_1
End Class
Interface i3_1
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31033: Interface 'i3_1' can be implemented only once by this type.
Implements i3_1, i3_1, i3_1
~~~~
BC31033: Interface 'i3_1' can be implemented only once by this type.
Implements i3_1, i3_1, i3_1
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31035ERR_InterfaceNotImplemented1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceNotImplemented1">
<file name="a.vb"><![CDATA[
Interface I
Sub S()
End Interface
Class C1
Implements I
Public Sub S() Implements I.S
End Sub
End Class
Class C2
Inherits C1
Public Sub F() Implements I.S
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31035: Interface 'I' is not implemented by this class.
Public Sub F() Implements I.S
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31041ERR_BadInterfaceMember()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadInterfaceMember">
<file name="a.vb"><![CDATA[
Interface Interface1
Module Module1
End Module
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30603: Statement cannot appear within an interface body.
Module Module1
~~~~~~~~~~~~~~
BC30603: Statement cannot appear within an interface body.
End Module
~~~~~~~~~~
BC30622: 'End Module' must be preceded by a matching 'Module'.
End Module
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseParseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31043ERR_ArrayInitInStruct_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31043ERR_ArrayInitInStruct_1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public j(10) As Integer
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
Public j(10) As Integer
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31043ERR_ArrayInitInStruct_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31043ERR_ArrayInitInStruct_2">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared j(10) As Integer
End Structure
]]></file>
</compilation>)
CompilationUtils.AssertNoDeclarationDiagnostics(compilation1)
End Sub
<Fact>
Public Sub BC31043ERR_ArrayInitInStruct_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31043ERR_ArrayInitInStruct_3">
<file name="a.vb"><![CDATA[
Public Structure S1
Public k(10) As Integer = {1}
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
Public k(10) As Integer = {1}
~~~~~
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
Public k(10) As Integer = {1}
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31043ERR_ArrayInitInStruct_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ArrayInitInStruct_4">
<file name="a.vb"><![CDATA[
Public Structure S1
Public l(10), m(1), n As Integer
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31043: Arrays declared as structure members cannot be declared with an initial size.
Public l(10), m(1), n As Integer
~~~~~
BC31043: Arrays declared as structure members cannot be declared with an initial size.
Public l(10), m(1), n As Integer
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31044ERR_EventTypeNotDelegate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventTypeNotDelegate">
<file name="a.vb"><![CDATA[
Public Class C1
Public Event E As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31044: Events declared with an 'As' clause must have a delegate type.
Public Event E As String
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31047ERR_ProtectedTypeOutsideClass()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ProtectedTypeOutsideClass">
<file name="a.vb"><![CDATA[
Protected Enum Enum11
Apple
End Enum
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31047: Protected types can only be declared inside of a class.
Protected Enum Enum11
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Checks for ERRID_StructCantUseVarSpecifier1
' Oldname"ModifierErrorsInsideStructures"
<Fact>
Public Sub BC31047ERR_ProtectedTypeOutsideClass_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Structure s
Protected Enum e3
a
End Enum
Private Enum e4
x
End Enum
protected delegate Sub d1(i as integer)
Protected Structure s_s1
end structure
End Structure
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31047: Protected types can only be declared inside of a class.
Protected Enum e3
~~
BC31047: Protected types can only be declared inside of a class.
protected delegate Sub d1(i as integer)
~~
BC31047: Protected types can only be declared inside of a class.
Protected Structure s_s1
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC31048ERR_DefaultPropertyWithNoParams()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Default Property P()
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Class
Class B
Default ReadOnly Property Q(ParamArray x As Object())
Get
Return Nothing
End Get
End Property
End Class
Interface IA
Default WriteOnly Property P()
End Interface
Interface IB
Default Property Q(ParamArray x As Object())
End Interface
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default Property P()
~
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default ReadOnly Property Q(ParamArray x As Object())
~
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default WriteOnly Property P()
~
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default Property Q(ParamArray x As Object())
~
]]></errors>)
End Sub
<Fact>
Public Sub BC31048ERR_DefaultPropertyWithNoParams_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA
Default Property P(Optional o As Object = Nothing)
Property Q(Optional o As Object = Nothing)
End Interface
Interface IB
Default Property P(x As Object, Optional y As Integer = 1)
Default Property P(Optional x As Integer = 0, Optional y As Integer = 1)
Property Q(Optional x As Integer = 0, Optional y As Integer = 1)
End Interface
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default Property P(Optional o As Object = Nothing)
~
BC31048: Properties with no required parameters cannot be declared 'Default'.
Default Property P(Optional x As Integer = 0, Optional y As Integer = 1)
~
]]></errors>)
End Sub
<Fact>
Public Sub BC31049ERR_InitializerInStruct()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InitializerInStruct">
<file name="a.vb"><![CDATA[
Structure S1
' does not work
Dim i As Integer = 10
' works
const j as Integer = 10
shared k as integer = 10
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31049: Initializers on structure members are valid only for 'Shared' members and constants.
Dim i As Integer = 10
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31051ERR_DuplicateImport1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateImport1">
<file name="a.vb"><![CDATA[
Imports ns1.genclass(Of String)
Imports ns1.genclass(Of String)
Namespace ns1
Class genclass(Of T)
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31051: Namespace or type 'genclass(Of String)' has already been imported.
Imports ns1.genclass(Of String)
~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31051ERR_DuplicateImport1_GlobalImports()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateImport1_GlobalImports">
<file name="a.vb"><![CDATA[
Imports System.Collections
Imports System.Collections
Class C
End Class
]]></file>
</compilation>, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary).WithGlobalImports(
GlobalImport.Parse(
{"System.Collections", "System.Collections"}
)
))
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31051: Namespace or type 'System.Collections' has already been imported.
Imports System.Collections
~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31051ERR_DuplicateImport1_GlobalImports_NoErrors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31051ERR_DuplicateImport1_GlobalImports_NoErrors">
<file name="a.vb"><![CDATA[
Imports System.Collections
Class C
End Class
]]></file>
</compilation>, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary).WithGlobalImports(
GlobalImport.Parse(
{"System.Collections", "System.Collections"}
)
))
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
End Sub
<Fact()>
Public Sub BC31052ERR_BadModuleFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC31052ERR_BadModuleFlags1">
<file name="a.vb"><![CDATA[
NotInheritable Module M1
End Module
shared Module M2
End Module
readonly Module M3
End Module
overridable Module M5
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31052: Modules cannot be declared 'NotInheritable'.
NotInheritable Module M1
~~~~~~~~~~~~~~
BC31052: Modules cannot be declared 'shared'.
shared Module M2
~~~~~~
BC31052: Modules cannot be declared 'readonly'.
readonly Module M3
~~~~~~~~
BC31052: Modules cannot be declared 'overridable'.
overridable Module M5
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31060ERR_SynthMemberClashesWithMember5_1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Module M1
Class Cls1
Event e()
End Class
Event obj1()
Dim obj1event As [Delegate]
End Module
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_SynthMemberClashesWithMember5, "obj1").WithArguments("event", "obj1", "obj1Event", "module", "M1"))
End Sub
<Fact>
Public Sub BC31060ERR_SynthMemberClashesWithMember5_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Property P
Shared Property Q
Property r
Shared Property s
Property T
Shared Property u
Function get_p()
Return Nothing
End Function
Shared Function set_p()
Return Nothing
End Function
Shared Sub GET_Q()
End Sub
Sub SET_Q()
End Sub
Dim get_R
Shared set_R
Shared Property get_s
Property set_s
Class get_T
End Class
Structure set_T
End Structure
Enum get_U
X
End Enum
End Class
]]></file>
</compilation>)
' Since nested types are bound before members, we report 31061 for
' cases where nested types conflict with implicit property members.
' This differs from Dev10 which reports 31060 in all these cases.
Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines 'get_P', which conflicts with a member of the same name in class 'C'.
Property P
~
BC31060: property 'P' implicitly defines 'set_P', which conflicts with a member of the same name in class 'C'.
Property P
~
BC31060: property 'Q' implicitly defines 'get_Q', which conflicts with a member of the same name in class 'C'.
Shared Property Q
~
BC31060: property 'Q' implicitly defines 'set_Q', which conflicts with a member of the same name in class 'C'.
Shared Property Q
~
BC31060: property 'r' implicitly defines 'get_r', which conflicts with a member of the same name in class 'C'.
Property r
~
BC31060: property 'r' implicitly defines 'set_r', which conflicts with a member of the same name in class 'C'.
Property r
~
BC31060: property 's' implicitly defines 'get_s', which conflicts with a member of the same name in class 'C'.
Shared Property s
~
BC31060: property 's' implicitly defines 'set_s', which conflicts with a member of the same name in class 'C'.
Shared Property s
~
BC31061: class 'get_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
Class get_T
~~~~~
BC31061: structure 'set_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
Structure set_T
~~~~~
BC31061: enum 'get_U' conflicts with a member implicitly declared for property 'u' in class 'C'.
Enum get_U
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31060ERR_SynthMemberClashesWithMember5_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Property P
Get
Return Nothing
End Get
Set
End Set
End Property
ReadOnly Property Q
Get
Return Nothing
End Get
End Property
WriteOnly Property R
Set
End Set
End Property
Private get_P
Private set_P
Private get_Q
Private set_Q
Private get_R
Private set_R
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines 'get_P', which conflicts with a member of the same name in class 'C'.
Property P
~
BC31060: property 'P' implicitly defines 'set_P', which conflicts with a member of the same name in class 'C'.
Property P
~
BC31060: property 'Q' implicitly defines 'get_Q', which conflicts with a member of the same name in class 'C'.
ReadOnly Property Q
~
BC31060: property 'R' implicitly defines 'set_R', which conflicts with a member of the same name in class 'C'.
WriteOnly Property R
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31060ERR_SynthMemberClashesWithMember5_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Property P
Shared Property Q
Property r
Shared Property s
Property T
Shared Property U
Property v
Shared Property w
Property X
Function _p()
Return Nothing
End Function
Shared Sub _Q()
End Sub
Dim _r
Shared _S
Shared Property _t
Property _U
Class _v
End Class
Structure _W
End Structure
Enum _x
X
End Enum
End Class
]]></file>
</compilation>)
' Since nested types are bound before members, we report 31061 for
' cases where nested types conflict with implicit property members.
' This differs from Dev10 which reports 31060 in all these cases.
Dim expectedErrors1 = <errors><![CDATA[
BC31060: property 'P' implicitly defines '_P', which conflicts with a member of the same name in class 'C'.
Property P
~
BC31060: property 'Q' implicitly defines '_Q', which conflicts with a member of the same name in class 'C'.
Shared Property Q
~
BC31060: property 'r' implicitly defines '_r', which conflicts with a member of the same name in class 'C'.
Property r
~
BC31060: property 's' implicitly defines '_s', which conflicts with a member of the same name in class 'C'.
Shared Property s
~
BC31060: property 'T' implicitly defines '_T', which conflicts with a member of the same name in class 'C'.
Property T
~
BC31060: property 'U' implicitly defines '_U', which conflicts with a member of the same name in class 'C'.
Shared Property U
~
BC31061: class '_v' conflicts with a member implicitly declared for property 'v' in class 'C'.
Class _v
~~
BC31061: structure '_W' conflicts with a member implicitly declared for property 'w' in class 'C'.
Structure _W
~~
BC31061: enum '_x' conflicts with a member implicitly declared for property 'X' in class 'C'.
Enum _x
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31061ERR_MemberClashesWithSynth6_1()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M1
Class Cls1
Event e()
End Class
Dim WithEvents ObjEvent As Cls1
Event Obj()
End Module
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MemberClashesWithSynth6, "ObjEvent").WithArguments("WithEvents variable", "ObjEvent", "event", "Obj", "module", "M1"))
End Sub
<Fact>
Public Sub BC31061ERR_MemberClashesWithSynth6_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Function get_p()
Return Nothing
End Function
Shared Function set_p()
Return Nothing
End Function
Shared Sub GET_Q()
End Sub
Sub SET_Q()
End Sub
Dim get_R
Shared set_R
Shared Property get_s
Property set_s
Class get_T
End Class
Structure set_T
End Structure
Enum get_U
X
End Enum
Property P
Shared Property Q
Property r
Shared Property s
Property T
Shared Property u
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31061: function 'get_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
Function get_p()
~~~~~
BC31061: function 'set_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
Shared Function set_p()
~~~~~
BC31061: sub 'GET_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
Shared Sub GET_Q()
~~~~~
BC31061: sub 'SET_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
Sub SET_Q()
~~~~~
BC31061: variable 'get_R' conflicts with a member implicitly declared for property 'r' in class 'C'.
Dim get_R
~~~~~
BC31061: variable 'set_R' conflicts with a member implicitly declared for property 'r' in class 'C'.
Shared set_R
~~~~~
BC31061: property 'get_s' conflicts with a member implicitly declared for property 's' in class 'C'.
Shared Property get_s
~~~~~
BC31061: property 'set_s' conflicts with a member implicitly declared for property 's' in class 'C'.
Property set_s
~~~~~
BC31061: class 'get_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
Class get_T
~~~~~
BC31061: structure 'set_T' conflicts with a member implicitly declared for property 'T' in class 'C'.
Structure set_T
~~~~~
BC31061: enum 'get_U' conflicts with a member implicitly declared for property 'u' in class 'C'.
Enum get_U
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31061ERR_MemberClashesWithSynth6_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Private get_P
Private set_P
Private get_Q
Private set_Q
Private get_R
Private set_R
Property P
Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
ReadOnly Property Q
Get
Return Nothing
End Get
End Property
WriteOnly Property R
Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31061: variable 'get_P' conflicts with a member implicitly declared for property 'P' in class 'C'.
Private get_P
~~~~~
BC31061: variable 'set_P' conflicts with a member implicitly declared for property 'P' in class 'C'.
Private set_P
~~~~~
BC31061: variable 'get_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
Private get_Q
~~~~~
BC31061: variable 'set_R' conflicts with a member implicitly declared for property 'R' in class 'C'.
Private set_R
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31061ERR_MemberClashesWithSynth6_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Function _p()
Return Nothing
End Function
Shared Sub _Q()
End Sub
Dim _r
Shared _S
Shared Property _t
Property _U
Class _v
End Class
Structure _W
End Structure
Enum _x
X
End Enum
Property P
Shared Property Q
Property r
Shared Property s
Property T
Shared Property U
Property v
Shared Property w
Property X
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31061: function '_p' conflicts with a member implicitly declared for property 'P' in class 'C'.
Function _p()
~~
BC31061: sub '_Q' conflicts with a member implicitly declared for property 'Q' in class 'C'.
Shared Sub _Q()
~~
BC31061: variable '_r' conflicts with a member implicitly declared for property 'r' in class 'C'.
Dim _r
~~
BC31061: variable '_S' conflicts with a member implicitly declared for property 's' in class 'C'.
Shared _S
~~
BC31061: property '_t' conflicts with a member implicitly declared for property 'T' in class 'C'.
Shared Property _t
~~
BC31061: property '_U' conflicts with a member implicitly declared for property 'U' in class 'C'.
Property _U
~~
BC31061: class '_v' conflicts with a member implicitly declared for property 'v' in class 'C'.
Class _v
~~
BC31061: structure '_W' conflicts with a member implicitly declared for property 'w' in class 'C'.
Structure _W
~~
BC31061: enum '_x' conflicts with a member implicitly declared for property 'X' in class 'C'.
Enum _x
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31063ERR_SetHasOnlyOneParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="SetHasOnlyOneParam">
<file name="a.vb"><![CDATA[
Module M
WriteOnly Property P(ByVal i As Integer) As Integer
Set(x As Integer, ByVal Value As Integer)
End Set
End Property
WriteOnly Property Q()
Set() ' No error
If value Is Nothing Then
End If
End Set
End Property
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31063: 'Set' method cannot have more than one parameter.
Set(x As Integer, ByVal Value As Integer)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31064ERR_SetValueNotPropertyType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SetValueNotPropertyType">
<file name="a.vb"><![CDATA[
' Implicit property type and implicit set argument type (same)
Structure A
WriteOnly Property P%
Set(ap%) ' no error
End Set
End Property
WriteOnly Property Q&
Set(aq&) ' no error
End Set
End Property
WriteOnly Property R@
Set(ar@) ' no error
End Set
End Property
WriteOnly Property S!
Set(as!) ' no error
End Set
End Property
WriteOnly Property T#
Set(at#) ' no error
End Set
End Property
WriteOnly Property U$
Set(au$) ' no error
End Set
End Property
End Structure
' Implicit property type and explicit set argument type (same)
Class B
WriteOnly Property P%
Set(bp As Integer) ' no error
End Set
End Property
WriteOnly Property Q&
Set(bq As Long) ' no error
End Set
End Property
WriteOnly Property R@
Set(br As Decimal) ' no error
End Set
End Property
WriteOnly Property S!
Set(ba As Single) ' no error
End Set
End Property
WriteOnly Property T#
Set(bt As Double) ' no error
End Set
End Property
WriteOnly Property U$
Set(bu As String) ' no error
End Set
End Property
End Class
' Explicit property type and explicit set argument type (same)
Structure C
WriteOnly Property P As Integer
Set(cp As Integer) ' no error
End Set
End Property
WriteOnly Property Q As Long
Set(cq As Long) ' no error
End Set
End Property
WriteOnly Property R As Decimal
Set(cr As Decimal) ' no error
End Set
End Property
WriteOnly Property S As Single
Set(cs As Single) ' no error
End Set
End Property
WriteOnly Property T As Double
Set(ct As Double) ' no error
End Set
End Property
WriteOnly Property U As String
Set(cu As String) ' no error
End Set
End Property
End Structure
' Implicit property type and implicit set argument type (different)
Class D
WriteOnly Property P%
Set(ap&) ' BC31064
End Set
End Property
WriteOnly Property Q&
Set(aq@) ' BC31064
End Set
End Property
WriteOnly Property R@
Set(ar!) ' BC31064
End Set
End Property
WriteOnly Property S!
Set(as#) ' BC31064
End Set
End Property
WriteOnly Property T#
Set(at$) ' BC31064
End Set
End Property
WriteOnly Property U$
Set(au%) ' BC31064
End Set
End Property
End Class
' Implicit property type and explicit set argument type (different)
Structure E
WriteOnly Property P%
Set(bp As Decimal) ' BC31064
End Set
End Property
WriteOnly Property Q&
Set(bq As Single) ' BC31064
End Set
End Property
WriteOnly Property R@
Set(br As Double) ' BC31064
End Set
End Property
WriteOnly Property S!
Set(ba As String) ' BC31064
End Set
End Property
WriteOnly Property T#
Set(bt As Integer) ' BC31064
End Set
End Property
WriteOnly Property U$
Set(bu As Long) ' BC31064
End Set
End Property
End Structure
' Explicit property type and explicit set argument type (different)
Class F
WriteOnly Property P As Integer
Set(cp As Single) ' BC31064
End Set
End Property
WriteOnly Property Q As Long
Set(cq As Double) ' BC31064
End Set
End Property
WriteOnly Property R As Decimal
Set(cr As String) ' BC31064
End Set
End Property
WriteOnly Property S As Single
Set(cs As Integer) ' BC31064
End Set
End Property
WriteOnly Property T As Double
Set(ct As Long) ' BC31064
End Set
End Property
WriteOnly Property U As String
Set(cu As Decimal) ' BC31064
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31064: 'Set' parameter must have the same type as the containing property.
Set(ap&) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(aq@) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(ar!) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(as#) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(at$) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(au%) ' BC31064
~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(bp As Decimal) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(bq As Single) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(br As Double) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(ba As String) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(bt As Integer) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(bu As Long) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(cp As Single) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(cq As Double) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(cr As String) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(cs As Integer) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(ct As Long) ' BC31064
~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(cu As Decimal) ' BC31064
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31065ERR_SetHasToBeByVal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SetHasToBeByVal1">
<file name="a.vb"><![CDATA[
Class C
WriteOnly Property P
Set(ByRef value)
End Set
End Property
WriteOnly Property Q
Set(ByVal ParamArray value())
End Set
End Property
WriteOnly Property R As Integer()
Set(ParamArray value As Integer())
End Set
End Property
WriteOnly Property S
Set(Optional value = Nothing)
End Set
End Property
WriteOnly Property T
Set(ByVal value)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31065: 'Set' parameter cannot be declared 'ByRef'.
Set(ByRef value)
~~~~~
BC31065: 'Set' parameter cannot be declared 'ParamArray'.
Set(ByVal ParamArray value())
~~~~~~~~~~
BC31064: 'Set' parameter must have the same type as the containing property.
Set(ByVal ParamArray value())
~~~~~
BC31065: 'Set' parameter cannot be declared 'ParamArray'.
Set(ParamArray value As Integer())
~~~~~~~~~~
BC31065: 'Set' parameter cannot be declared 'Optional'.
Set(Optional value = Nothing)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31067ERR_StructureCantUseProtected()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="StructureCantUseProtected">
<file name="a.vb"><![CDATA[
Structure S
Protected Sub New(o)
End Sub
Protected Friend Sub New(x, y)
End Sub
Protected Sub M()
End Sub
Protected Friend Function F()
Return Nothing
End Function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
Protected Sub New(o)
~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
Protected Friend Sub New(x, y)
~~~~~~~~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
Protected Sub M()
~~~~~~~~~
BC31067: Method in a structure cannot be declared 'Protected', 'Protected Friend', or 'Private Protected'.
Protected Friend Function F()
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31068ERR_BadInterfaceDelegateSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceDelegateSpecifier1">
<file name="a.vb"><![CDATA[
Interface i1
private Delegate Sub goo
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31068: Delegate in an interface cannot be declared 'private'.
private Delegate Sub goo
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31069ERR_BadInterfaceEnumSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceEnumSpecifier1">
<file name="a.vb"><![CDATA[
Interface I1
Public Enum E
ONE
End Enum
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31069: Enum in an interface cannot be declared 'Public'.
Public Enum E
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31070ERR_BadInterfaceClassSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceClassSpecifier1">
<file name="a.vb"><![CDATA[
Interface I1
Interface I2
Protected Class C1
End Class
Friend Class C2
End Class
End Interface
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31070: Class in an interface cannot be declared 'Protected'.
Protected Class C1
~~~~~~~~~
BC31070: Class in an interface cannot be declared 'Friend'.
Friend Class C2
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31071ERR_BadInterfaceStructSpecifier1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadInterfaceStructSpecifier1">
<file name="a.vb"><![CDATA[
Interface I1
Public Structure S1
End Structure
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31071: Structure in an interface cannot be declared 'Public'.
Public Structure S1
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31075ERR_UseOfObsoleteSymbolNoMessage1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UseOfObsoleteSymbolNoMessage1">
<file name="a.vb"><![CDATA[
Imports System
<Obsolete(Nothing, True)> Interface I1
End Interface
Class class1
Implements I1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31075: 'I1' is obsolete.
Implements I1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31083ERR_ModuleMemberCantImplement()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ModuleMemberCantImplement">
<file name="a.vb"><![CDATA[
Module class1
Interface I1
Sub goo()
End Interface
'COMPILEERROR: BC31083, "Implements"
Public Sub goo() Implements I1.goo
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31083: Members in a Module cannot implement interface members.
Public Sub goo() Implements I1.goo
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31084ERR_EventDelegatesCantBeFunctions()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventDelegatesCantBeFunctions">
<file name="a.vb"><![CDATA[
Imports System
Class A
Event X As Func(Of String)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31084: Events cannot be declared with a delegate type that has a return type.
Event X As Func(Of String)
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31086ERR_CantOverride4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantOverride4">
<file name="a.vb"><![CDATA[
Class C1
Public Sub F1()
End Sub
End Class
Class B
Inherits C1
Public Overrides Sub F1()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31086: 'Public Overrides Sub F1()' cannot override 'Public Sub F1()' because it is not declared 'Overridable'.
Public Overrides Sub F1()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
Private Shared ReadOnly s_typeWithMixedProperty As String = <![CDATA[
.class public auto ansi beforefieldinit Base_VirtGet_Set
extends [mscorlib]System.Object
{
.method public hidebysig specialname newslot virtual
instance int32 get_Prop() cil managed
{
// Code size 2 (0x2)
.maxstack 8
ldstr "Base_VirtGet_Set.Get"
call void [mscorlib]System.Console::WriteLine(string)
IL_0000: ldc.i4.1
IL_0001: ret
}
.method public hidebysig specialname
instance void set_Prop(int32 'value') cil managed
{
// Code size 1 (0x1)
ldstr "Base_VirtGet_Set.Set"
call void [mscorlib]System.Console::WriteLine(string)
.maxstack 8
IL_0000: ret
}
.property instance int32 Prop()
{
.get instance int32 Base_VirtGet_Set::get_Prop()
.set instance void Base_VirtGet_Set::set_Prop(int32)
}
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
}
}
.class public auto ansi beforefieldinit Base_Get_VirtSet
extends [mscorlib]System.Object
{
.method public hidebysig specialname
instance int32 get_Prop() cil managed
{
// Code size 2 (0x2)
.maxstack 8
ldstr "Base_Get_VirtSet.Get"
call void [mscorlib]System.Console::WriteLine(string)
IL_0000: ldc.i4.1
IL_0001: ret
}
.method public hidebysig specialname newslot virtual
instance void set_Prop(int32 'value') cil managed
{
// Code size 1 (0x1)
.maxstack 8
ldstr "Base_Get_VirtSet.Set"
call void [mscorlib]System.Console::WriteLine(string)
IL_0000: ret
}
.property instance int32 Prop()
{
.get instance int32 Base_Get_VirtSet::get_Prop()
.set instance void Base_Get_VirtSet::set_Prop(int32)
}
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 7 (0x7)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
}
}
]]>.Value.Replace(vbLf, vbCrLf)
<WorkItem(528982, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528982")>
<Fact()>
Public Sub BC31086ERR_CantOverride5a()
Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="CantOverride5a">
<file name="a.vb"><![CDATA[
Class VBDerived
Inherits Base_Get_VirtSet
Public Overrides Property Prop As Integer
Get
System.Console.WriteLine("VBDerived.Get")
Return MyBase.Prop
End Get
Set(value As Integer)
System.Console.WriteLine("VBDerived.Set")
MyBase.Prop = value
End Set
End Property
Shared Sub Main()
Dim o As Base_Get_VirtSet
o = New Base_Get_VirtSet()
o.Prop = o.Prop
o = New VBDerived()
o.Prop = o.Prop
End Sub
End Class
]]></file>
</compilation>, s_typeWithMixedProperty, options:=TestOptions.DebugExe)
' There are no Errors, but getter is actually not overridden!!!
Dim validator = Sub(m As ModuleSymbol)
Dim p1 = m.GlobalNamespace.GetMember(Of PropertySymbol)("VBDerived.Prop")
Assert.True(p1.IsOverrides)
Dim baseP1 As PropertySymbol = p1.OverriddenProperty
Assert.True(baseP1.IsOverridable)
Assert.False(baseP1.GetMethod.IsOverridable)
Assert.True(baseP1.SetMethod.IsOverridable)
Dim p1Get = p1.GetMethod
Dim p1Set = p1.SetMethod
Assert.True(p1Get.IsOverrides)
Assert.Same(baseP1.GetMethod, p1Get.OverriddenMethod)
Assert.True(p1Set.IsOverrides)
Assert.Same(baseP1.SetMethod, p1Set.OverriddenMethod)
End Sub
CompileAndVerify(compilation1, expectedOutput:=
"Base_Get_VirtSet.Get
Base_Get_VirtSet.Set
Base_Get_VirtSet.Get
VBDerived.Set
Base_Get_VirtSet.Set", sourceSymbolValidator:=validator, symbolValidator:=validator)
End Sub
<WorkItem(528982, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528982")>
<Fact()>
Public Sub BC31086ERR_CantOverride5b()
Dim compilation1 = CompilationUtils.CreateCompilationWithCustomILSource(
<compilation name="CantOverride5b">
<file name="a.vb"><![CDATA[
Class VBDerived
Inherits Base_VirtGet_Set
Public Overrides Property Prop As Integer
Get
System.Console.WriteLine("VBDerived.Get")
Return MyBase.Prop
End Get
Set(value As Integer)
System.Console.WriteLine("VBDerived.Set")
MyBase.Prop = value
End Set
End Property
Shared Sub Main()
Dim o As Base_VirtGet_Set
o = New Base_VirtGet_Set()
o.Prop = o.Prop
o = New VBDerived()
o.Prop = o.Prop
End Sub
End Class
]]></file>
</compilation>, s_typeWithMixedProperty, options:=TestOptions.DebugExe)
' There are no Errors, but setter is actually not overridden!!!
Dim validator = Sub(m As ModuleSymbol)
Dim p1 = m.GlobalNamespace.GetMember(Of PropertySymbol)("VBDerived.Prop")
Assert.True(p1.IsOverrides)
Dim baseP1 As PropertySymbol = p1.OverriddenProperty
Assert.True(baseP1.IsOverridable)
Assert.True(baseP1.GetMethod.IsOverridable)
Assert.False(baseP1.SetMethod.IsOverridable)
Dim p1Get = p1.GetMethod
Dim p1Set = p1.SetMethod
Assert.True(p1Get.IsOverrides)
Assert.Same(baseP1.GetMethod, p1Get.OverriddenMethod)
Assert.True(p1Set.IsOverrides)
Assert.Same(baseP1.SetMethod, p1Set.OverriddenMethod)
End Sub
CompileAndVerify(compilation1, expectedOutput:=
"Base_VirtGet_Set.Get
Base_VirtGet_Set.Set
VBDerived.Get
Base_VirtGet_Set.Get
Base_VirtGet_Set.Set", sourceSymbolValidator:=validator, symbolValidator:=validator)
End Sub
<Fact()>
Public Sub BC31087ERR_CantSpecifyArraysOnBoth()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CantSpecifyArraysOnBoth">
<file name="a.vb"><![CDATA[
Module M
Sub Goo(ByVal x() As String())
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31087: Array modifiers cannot be specified on both a variable and its type.
Sub Goo(ByVal x() As String())
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31087ERR_CantSpecifyArraysOnBoth_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantSpecifyArraysOnBoth">
<file name="a.vb"><![CDATA[
Class C
Public Shared Sub Main()
Dim a()() As Integer = nothing
For Each x() As Integer() In a
Next
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1,
<expected><![CDATA[
BC31087: Array modifiers cannot be specified on both a variable and its type.
For Each x() As Integer() In a
~~~~~~~~~
BC30332: Value of type 'Integer()' cannot be converted to 'Integer()()' because 'Integer' is not derived from 'Integer()'.
For Each x() As Integer() In a
~
]]></expected>)
End Sub
<WorkItem(540876, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540876")>
<Fact>
Public Sub BC31088ERR_NotOverridableRequiresOverrides()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NotOverridableRequiresOverrides">
<file name="a.vb"><![CDATA[
Class C1
NotOverridable Sub Goo()
End Sub
Public NotOverridable Property F As Integer
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
NotOverridable Sub Goo()
~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
Public NotOverridable Property F As Integer
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31089ERR_PrivateTypeOutsideType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PrivateTypeOutsideType">
<file name="a.vb"><![CDATA[
Namespace ns1
Private Module Mod1
End Module
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31089: Types declared 'Private' must be inside another type.
Private Module Mod1
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31099ERR_BadPropertyAccessorFlags()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyAccessorFlags">
<file name="a.vb"><![CDATA[
Class C
Property P
Static Get
Return Nothing
End Get
Shared Set
End Set
End Property
Property Q
Partial Get
Return Nothing
End Get
Default Set
End Set
End Property
Property R
MustInherit Get
Return Nothing
End Get
NotInheritable Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31099: Property accessors cannot be declared 'Static'.
Static Get
~~~~~~
BC31099: Property accessors cannot be declared 'Shared'.
Shared Set
~~~~~~
BC31099: Property accessors cannot be declared 'Partial'.
Partial Get
~~~~~~~
BC31099: Property accessors cannot be declared 'Default'.
Default Set
~~~~~~~
BC31099: Property accessors cannot be declared 'MustInherit'.
MustInherit Get
~~~~~~~~~~~
BC31099: Property accessors cannot be declared 'NotInheritable'.
NotInheritable Set
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31100ERR_BadPropertyAccessorFlagsRestrict()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyAccessorFlagsRestrict">
<file name="a.vb"><![CDATA[
Class C
Public Property P1
Get
Return Nothing
End Get
Public Set(ByVal value) ' P1 BC31100
End Set
End Property
Public Property P2
Get
Return Nothing
End Get
Friend Set(ByVal value)
End Set
End Property
Public Property P3
Get
Return Nothing
End Get
Protected Set(ByVal value)
End Set
End Property
Public Property P4
Get
Return Nothing
End Get
Protected Friend Set(ByVal value)
End Set
End Property
Public Property P5
Get
Return Nothing
End Get
Private Set(ByVal value)
End Set
End Property
Friend Property Q1
Public Get ' Q1 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Friend Property Q2
Friend Get ' Q2 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Friend Property Q3
Protected Get ' Q3 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Friend Property Q4
Protected Friend Get ' Q4 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Friend Property Q5
Private Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Protected Property R1
Get
Return Nothing
End Get
Public Set(ByVal value) ' R1 BC31100
End Set
End Property
Protected Property R2
Get
Return Nothing
End Get
Friend Set(ByVal value) ' R2 BC31100
End Set
End Property
Protected Property R3
Get
Return Nothing
End Get
Protected Set(ByVal value) ' R3 BC31100
End Set
End Property
Protected Property R4
Get
Return Nothing
End Get
Protected Friend Set(ByVal value) ' R4 BC31100
End Set
End Property
Protected Property R5
Get
Return Nothing
End Get
Private Set(ByVal value)
End Set
End Property
Protected Friend Property S1
Get
Return Nothing
End Get
Public Set(ByVal value) ' S1 BC31100
End Set
End Property
Protected Friend Property S2
Get
Return Nothing
End Get
Friend Set(ByVal value)
End Set
End Property
Protected Friend Property S3
Get
Return Nothing
End Get
Protected Set(ByVal value)
End Set
End Property
Protected Friend Property S4
Get
Return Nothing
End Get
Protected Friend Set(ByVal value) ' S4 BC31100
End Set
End Property
Protected Friend Property S5
Get
Return Nothing
End Get
Private Set(ByVal value)
End Set
End Property
Private Property T1
Public Get ' T1 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Private Property T2
Friend Get ' T2 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Private Property T3
Protected Get ' T3 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Private Property T4
Protected Friend Get ' T4 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Private Property T5
Private Get ' T5 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Property U1
Public Get ' U1 BC31100
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Property U2
Friend Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Property U3
Protected Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Property U4
Protected Friend Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
Property U5
Private Get
Return Nothing
End Get
Set(ByVal value)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Set(ByVal value) ' P1 BC31100
~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Get ' Q1 BC31100
~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Friend Get ' Q2 BC31100
~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Get ' Q3 BC31100
~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Friend Get ' Q4 BC31100
~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Set(ByVal value) ' R1 BC31100
~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Friend Set(ByVal value) ' R2 BC31100
~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Set(ByVal value) ' R3 BC31100
~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Friend Set(ByVal value) ' R4 BC31100
~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Set(ByVal value) ' S1 BC31100
~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Friend Set(ByVal value) ' S4 BC31100
~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Get ' T1 BC31100
~~~~~~
BC31100: Access modifier 'Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Friend Get ' T2 BC31100
~~~~~~
BC31100: Access modifier 'Protected' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Get ' T3 BC31100
~~~~~~~~~
BC31100: Access modifier 'Protected Friend' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Protected Friend Get ' T4 BC31100
~~~~~~~~~~~~~~~~
BC31100: Access modifier 'Private' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Private Get ' T5 BC31100
~~~~~~~
BC31100: Access modifier 'Public' is not valid. The access modifier of 'Get' and 'Set' should be more restrictive than the property access level.
Public Get ' U1 BC31100
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31101ERR_OnlyOneAccessorForGetSet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOneAccessorForGetSet">
<file name="a.vb"><![CDATA[
Class C
Property P
Private Get
Return Nothing
End Get
Protected Set(value)
End Set
End Property
Property Q
Friend Set
End Set
Friend Get
Return Nothing
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31101: Access modifier can only be applied to either 'Get' or 'Set', but not both.
Protected Set(value)
~~~~~~~~~~~~~~~~~~~~
BC31101: Access modifier can only be applied to either 'Get' or 'Set', but not both.
Friend Get
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31104ERR_WriteOnlyNoAccessorFlag()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
WriteOnly Property Goo(ByVal x As Integer) As Integer
Private Set(ByVal value As Integer)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31104: 'WriteOnly' properties cannot have an access modifier on 'Set'.
Private Set(ByVal value As Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31105ERR_ReadOnlyNoAccessorFlag()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C1
ReadOnly Property Goo(ByVal x As Integer) As Integer
Protected Get
Return 1
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31105: 'ReadOnly' properties cannot have an access modifier on 'Get'.
Protected Get
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31106ERR_BadPropertyAccessorFlags1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyAccessorFlags1">
<file name="a.vb"><![CDATA[
Class A
Overridable Property P
Overridable Property Q
Get
Return Nothing
End Get
Protected Set
End Set
End Property
End Class
Class B
Inherits A
NotOverridable Overrides Property P
Get
Return Nothing
End Get
Private Set
End Set
End Property
Public Overrides Property Q
Get
Return Nothing
End Get
Protected Set
End Set
End Property
End Class
MustInherit Class C
MustOverride Property P
End Class
Class D
Inherits C
NotOverridable Overrides Property P
Private Get
Return Nothing
End Get
Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31106: Property accessors cannot be declared 'Private' in a 'NotOverridable' property.
Private Set
~~~~~~~
BC30266: 'Private NotOverridable Overrides Property Set P(Value As Object)' cannot override 'Public Overridable Property Set P(AutoPropertyValue As Object)' because they have different access levels.
Private Set
~~~
BC31106: Property accessors cannot be declared 'Private' in a 'NotOverridable' property.
Private Get
~~~~~~~
BC30266: 'Private NotOverridable Overrides Property Get P() As Object' cannot override 'Public MustOverride Property Get P() As Object' because they have different access levels.
Private Get
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31107ERR_BadPropertyAccessorFlags2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyAccessorFlags2">
<file name="a.vb"><![CDATA[
Class C
Default Property P(o)
Private Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Structure S
Default Property P(x, y)
Get
Return Nothing
End Get
Private Set
End Set
End Property
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31107: Property accessors cannot be declared 'Private' in a 'Default' property.
Private Get
~~~~~~~
BC31107: Property accessors cannot be declared 'Private' in a 'Default' property.
Private Set
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31108ERR_BadPropertyAccessorFlags3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadPropertyAccessorFlags3">
<file name="a.vb"><![CDATA[
Class C
Overridable Property P
Private Get
Return Nothing
End Get
Set
End Set
End Property
Overridable Property Q
Get
Return Nothing
End Get
Private Set
End Set
End Property
Overridable Property R
Protected Get
Return Nothing
End Get
Set
End Set
End Property
Overridable Property S
Get
Return Nothing
End Get
Friend Set
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31108: Property cannot be declared 'Overridable' because it contains a 'Private' accessor.
Overridable Property P
~~~~~~~~~~~
BC31108: Property cannot be declared 'Overridable' because it contains a 'Private' accessor.
Overridable Property Q
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31127ERR_DuplicateAddHandlerDef()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateAddHandlerDef">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31127: 'AddHandler' is already declared.
AddHandler(ByVal value As EventHandler)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31128ERR_DuplicateRemoveHandlerDef()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateRemoveHandlerDef">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31128: 'RemoveHandler' is already declared.
RemoveHandler(ByVal value As EventHandler)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31129ERR_DuplicateRaiseEventDef()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateRaiseEventDef">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31129: 'RaiseEvent' is already declared.
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31130ERR_MissingAddHandlerDef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MissingAddHandlerDef1">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31130: 'AddHandler' definition missing for event 'Public Event Click As EventHandler'.
Public Custom Event Click As EventHandler
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31131ERR_MissingRemoveHandlerDef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MissingRemoveHandlerDef1">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31131: 'RemoveHandler' definition missing for event 'Public Event Click As EventHandler'.
Public Custom Event Click As EventHandler
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31132ERR_MissingRaiseEventDef1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MissingRaiseEventDef1">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31132: 'RaiseEvent' definition missing for event 'Public Event Click As EventHandler'.
Public Custom Event Click As EventHandler
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31133ERR_EventAddRemoveHasOnlyOneParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventAddRemoveHasOnlyOneParam">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler()
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31133: 'AddHandler' and 'RemoveHandler' methods must have exactly one parameter.
AddHandler()
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31134ERR_EventAddRemoveByrefParamIllegal()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventAddRemoveByrefParamIllegal">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByRef value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31134: 'AddHandler' and 'RemoveHandler' method parameters cannot be declared 'ByRef'.
RemoveHandler(ByRef value As EventHandler)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31136ERR_AddRemoveParamNotEventType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AddRemoveParamNotEventType">
<file name="a.vb"><![CDATA[
Option Strict Off
Imports System
Public Class M
Custom Event x As Action
AddHandler(ByVal value As Action(Of Integer))
End AddHandler
RemoveHandler(ByVal value)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
AddHandler(ByVal value As Action(Of Integer))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC31136: 'AddHandler' and 'RemoveHandler' method parameters must have the same delegate type as the containing event.
RemoveHandler(ByVal value)
~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31137ERR_RaiseEventShapeMismatch1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="RaiseEventShapeMismatch1">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByRef sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31137: 'RaiseEvent' method must have the same signature as the containing event's delegate type 'EventHandler'.
RaiseEvent(ByRef sender As Object, ByVal e As EventArgs)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31138ERR_EventMethodOptionalParamIllegal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventMethodOptionalParamIllegal1">
<file name="a.vb"><![CDATA[
Imports System
Public NotInheritable Class ReliabilityOptimizedControl
Public Custom Event Click As EventHandler
AddHandler(Optional ByVal value As EventHandler = Nothing)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As EventArgs)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'.
AddHandler(Optional ByVal value As EventHandler = Nothing)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31142ERR_ObsoleteInvalidOnEventMember()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ObsoleteInvalidOnEventMember">
<file name="a.vb"><![CDATA[
Imports System
Public Class C1
Custom Event x As Action
AddHandler(ByVal value As Action)
End AddHandler
RemoveHandler(ByVal value As Action)
End RemoveHandler
<Obsolete()>
RaiseEvent()
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31142: 'System.ObsoleteAttribute' cannot be applied to the 'AddHandler', 'RemoveHandler', or 'RaiseEvent' definitions. If required, apply the attribute directly to the event.
<Obsolete()>
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31400ERR_BadStaticLocalInStruct()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadStaticLocalInStruct">
<file name="a.vb"><![CDATA[
Structure S
Sub Goo()
Static x As Integer = 1
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31400: Local variables within methods of structures cannot be declared 'Static'.
Static x As Integer = 1
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31400ERR_BadStaticLocalInStruct2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadStaticLocalInStruct2">
<file name="a.vb"><![CDATA[
Structure S
Sub Goo()
Static Static x As Integer
End Sub
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31400: Local variables within methods of structures cannot be declared 'Static'.
Static Static x As Integer
~~~~~~
BC30178: Specifier is duplicated.
Static Static x As Integer
~~~~~~
BC42024: Unused local variable: 'x'.
Static Static x As Integer
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BadLocalspecifiers()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BC31400ERR_BadLocalspecifiers">
<file name="a.vb"><![CDATA[
Class S
Sub Goo()
Static Static a As Integer
Static Dim Dim b As Integer
Static Const Dim c As Integer
Private d As Integer
Private Private e As Integer
Private Const f As Integer
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30178: Specifier is duplicated.
Static Static a As Integer
~~~~~~
BC42024: Unused local variable: 'a'.
Static Static a As Integer
~
BC30178: Specifier is duplicated.
Static Dim Dim b As Integer
~~~
BC42024: Unused local variable: 'b'.
Static Dim Dim b As Integer
~
BC30246: 'Dim' is not valid on a local constant declaration.
Static Const Dim c As Integer
~~~
BC30438: Constants must have a value.
Static Const Dim c As Integer
~
BC30247: 'Private' is not valid on a local variable declaration.
Private d As Integer
~~~~~~~
BC42024: Unused local variable: 'd'.
Private d As Integer
~
BC30247: 'Private' is not valid on a local variable declaration.
Private Private e As Integer
~~~~~~~
BC30247: 'Private' is not valid on a local variable declaration.
Private Private e As Integer
~~~~~~~
BC42024: Unused local variable: 'e'.
Private Private e As Integer
~
BC30247: 'Private' is not valid on a local variable declaration.
Private Const f As Integer
~~~~~~~
BC30438: Constants must have a value.
Private Const f As Integer
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31401ERR_DuplicateLocalStatic1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalStatic1">
<file name="a.vb"><![CDATA[
Module M
Sub Main()
If True Then
Static x = 1
End If
If True Then
Static x = 1
End If
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31401: Static local variable 'x' is already declared.
Static x = 1
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31403ERR_ImportAliasConflictsWithType2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ImportAliasConflictsWithType2">
<file name="a.vb"><![CDATA[
Imports System = System
Module M
Sub Main()
System.Console.WriteLine()
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31403: Imports alias 'System' conflicts with 'System' declared in the root namespace.
Imports System = System
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31404ERR_CantShadowAMustOverride1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantShadowAMustOverride1">
<file name="a.vb"><![CDATA[
MustInherit Class A
MustOverride Sub Goo(ByVal x As Integer)
End Class
MustInherit Class B
Inherits A
Shadows Sub Goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31404: 'Public Sub Goo()' cannot shadow a method declared 'MustOverride'.
Shadows Sub Goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31407ERR_MultipleEventImplMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MultipleEventImplMismatch3">
<file name="a.vb"><![CDATA[
Interface I1
Event evtTest1()
Event evtTest2()
End Interface
Class C1
Implements I1
Event evtTest3() Implements I1.evtTest1, I1.evtTest2
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31407: Event 'Public Event evtTest3 As I1.evtTest1EventHandler' cannot implement event 'I1.Event evtTest2()' because its delegate type does not match the delegate type of another event implemented by 'Public Event evtTest3 As I1.evtTest1EventHandler'.
Event evtTest3() Implements I1.evtTest1, I1.evtTest2
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_0()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Partial NotInheritable Class C1
End Class
Partial MustInherit Class C1
End Class
Partial MustInherit NotInheritable Class C1
End Class
Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'C1' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
Partial MustInherit Class C1
~~
BC31408: 'MustInherit' and 'NotInheritable' cannot be combined.
Partial MustInherit NotInheritable Class C1
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(538931, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538931")>
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit NotInheritable Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'MustInherit' and 'NotInheritable' cannot be combined.
MustInherit NotInheritable Class C1
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(538931, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/538931")>
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A1
Private Overridable Sub scen1()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'Overridable' cannot be combined.
Private Overridable Sub scen1()
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="c.vb"><![CDATA[
Class C
ReadOnly WriteOnly Property P
Get
Return Nothing
End Get
Set
End Set
End Property
End Class
Structure S
WriteOnly ReadOnly Property Q
Get
Return Nothing
End Get
Set
End Set
End Property
End Structure
Interface I
ReadOnly WriteOnly Property R
End Interface
Class D
Private Overridable Property S
Overridable Private Property T
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
ReadOnly WriteOnly Property P
~~~~~~~~~
BC30022: Properties declared 'ReadOnly' cannot have a 'Set'.
Set
~~~
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
WriteOnly ReadOnly Property Q
~~~~~~~~
BC30023: Properties declared 'WriteOnly' cannot have a 'Get'.
Get
~~~
BC30635: 'ReadOnly' and 'WriteOnly' cannot be combined.
ReadOnly WriteOnly Property R
~~~~~~~~~
BC31408: 'Private' and 'Overridable' cannot be combined.
Private Overridable Property S
~~~~~~~~~~~
BC31408: 'Private' and 'Overridable' cannot be combined.
Overridable Private Property T
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(541025, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541025")>
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A1
Private MustOverride Sub scen1()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'MustOverride' cannot be combined.
Private MustOverride Sub scen1()
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(542159, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542159")>
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Infer On
Module M1
Sub Goo()
End Sub
End Module
MustInherit Class C1
MustOverride Sub goo()
Dim s = (New C2)
End Class
Class C2
Inherits C1
Overrides Shadows Sub goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Overrides' and 'Shadows' cannot be combined.
Overrides Shadows Sub goo()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(837983, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/837983")>
<Fact>
Public Sub BC31408ERR_BadSpecifierCombo2_6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System.Collections.Generic
Module Module1
Sub main()
End Sub
End Module
Public Class Cls
Public ValueOfProperty1 As IEnumerable(Of String)
'COMPILEERROR: BC31408, "Iterator"
Public WriteOnly Iterator Property WriteOnlyPro1() As IEnumerable(Of String)
Set(value As IEnumerable(Of String))
ValueOfProperty1 = value
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Iterator' and 'WriteOnly' cannot be combined.
Public WriteOnly Iterator Property WriteOnlyPro1() As IEnumerable(Of String)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(837993, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/837993")>
<Fact>
Public Sub BC36938ERR_BadIteratorReturn_Property()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
' Bug51817: Incorrect Iterator Modifier in Source Code Causes VBC to exit incorrectly when Msbuild Project
Public Class Scenario2
Implements IEnumerator(Of Integer)
Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
Return True
End Function
Public Sub Reset() Implements System.Collections.IEnumerator.Reset
End Sub
Public ReadOnly Iterator Property Current As Integer Implements IEnumerator(Of Integer).Current
'COMPILEERROR: BC36938 ,"Get"
Get
End Get
End Property
Public ReadOnly Iterator Property Current1 As Object Implements IEnumerator.Current
'COMPILEERROR: BC36938 ,"Get"
Get
End Get
End Property
#Region "IDisposable Support"
Private disposedValue As Boolean ' To detect redundant calls
' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
End If
End If
Me.disposedValue = True
End Sub
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36938: Iterator functions must return either IEnumerable(Of T), or IEnumerator(Of T), or the non-generic forms IEnumerable or IEnumerator.
Public ReadOnly Iterator Property Current As Integer Implements IEnumerator(Of Integer).Current
~~~~~~~
BC36938: Iterator functions must return either IEnumerable(Of T), or IEnumerator(Of T), or the non-generic forms IEnumerable or IEnumerator.
Public ReadOnly Iterator Property Current1 As Object Implements IEnumerator.Current
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31409ERR_MustBeOverloads2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustBeOverloads2">
<file name="a.vb"><![CDATA[
Class C1
Overloads Sub goo(ByVal i As Integer)
End Sub
Sub goo(ByVal s As String)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'goo' must be declared 'Overloads' because another 'goo' is declared 'Overloads' or 'Overrides'.
Sub goo(ByVal s As String)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31409ERR_MustBeOverloads2_Mixed_Properties_And_Methods()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustBeOverloads2">
<file name="a.vb"><![CDATA[
Class OverloadedPropertiesBase
Overridable Overloads ReadOnly Property Prop(x As Integer) As String
Get
Return Nothing
End Get
End Property
Overridable ReadOnly Property Prop(x As String) As String
Get
Return Nothing
End Get
End Property
Overridable Overloads Function Prop(x As String) As String
Return Nothing
End Function
Shadows Function Prop(x As Integer) As Integer
Return Nothing
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31409: property 'Prop' must be declared 'Overloads' because another 'Prop' is declared 'Overloads' or 'Overrides'.
Overridable ReadOnly Property Prop(x As String) As String
~~~~
BC30260: 'Prop' is already declared as 'Public Overridable Overloads ReadOnly Property Prop(x As Integer) As String' in this class.
Overridable Overloads Function Prop(x As String) As String
~~~~
BC30260: 'Prop' is already declared as 'Public Overridable Overloads ReadOnly Property Prop(x As Integer) As String' in this class.
Shadows Function Prop(x As Integer) As Integer
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31409ERR_MustBeOverloads2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustBeOverloads2">
<file name="a.vb"><![CDATA[
Class Base
Sub Method(x As Integer)
End Sub
Overloads Sub Method(x As String)
End Sub
End Class
Partial Class Derived1
Inherits Base
Shadows Sub Method(x As String)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31409: sub 'Method' must be declared 'Overloads' because another 'Method' is declared 'Overloads' or 'Overrides'.
Sub Method(x As Integer)
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' spec changed in Roslyn
<WorkItem(527642, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527642")>
<Fact>
Public Sub BC31410ERR_CantOverloadOnMultipleInheritance()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantOverloadOnMultipleInheritance">
<file name="a.vb"><![CDATA[
Interface IA
Overloads Sub Goo(ByVal x As Integer)
End Interface
Interface IB
Overloads Sub Goo(ByVal x As String)
End Interface
Interface IC
Inherits IA, IB
Overloads Sub Goo()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31411ERR_MustOverridesInClass1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Class C1
MustOverride Sub goo()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'C1' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Public Class C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31411ERR_MustOverridesInClass1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
MustOverride Property P
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'C' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Class C
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31413ERR_SynthMemberShadowsMustOverride5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SynthMemberShadowsMustOverride5">
<file name="a.vb"><![CDATA[
MustInherit Class clsTest1
MustOverride Sub add_e(ByVal ArgX As clsTest2.eEventHandler)
End Class
MustInherit Class clsTest2
Inherits clsTest1
Shadows Event e()
End Class
]]></file>
</compilation>)
' CONSIDER: Dev11 prints "Sub add_E", rather than "AddHandler Event e", but roslyn's behavior seems friendlier
' and more consistent with the way property accessors are displayed (in both dev11 and roslyn).
Dim expectedErrors1 = <errors><![CDATA[
BC31413: 'Public AddHandler Event e(obj As clsTest2.eEventHandler)', implicitly declared for event 'e', cannot shadow a 'MustOverride' method in the base class 'clsTest1'.
Shadows Event e()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540613, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540613")>
<Fact>
Public Sub BC31417ERR_CannotOverrideInAccessibleMember()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CannotOverrideInAccessibleMember">
<file name="a.vb"><![CDATA[
Class Cls1
Private Overridable Sub goo()
End Sub
End Class
Class Cls2
Inherits Cls1
Private Overrides Sub goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31408: 'Private' and 'Overridable' cannot be combined.
Private Overridable Sub goo()
~~~~~~~~~~~
BC31417: 'Private Overrides Sub goo()' cannot override 'Private Sub goo()' because it is not accessible in this context.
Private Overrides Sub goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31418ERR_HandlesSyntaxInModule()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="HandlesSyntaxInModule">
<file name="a.vb"><![CDATA[
Option Strict Off
Module M
Sub Bar() Handles Me.Goo
End Sub
Event Goo()
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31418: 'Handles' in modules must specify a 'WithEvents' variable qualified with a single identifier.
Sub Bar() Handles Me.Goo
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31420ERR_ClashWithReservedEnumMember1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClashWithReservedEnumMember1">
<file name="a.vb"><![CDATA[
Structure S
Public Enum InterfaceColors
value__
End Enum
End Structure
Class c1
Public Shared Sub Main(args As String())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31420: 'value__' conflicts with the reserved member by this name that is implicitly declared in all enums.
value__
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(539947, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539947")>
<Fact>
Public Sub BC31420ERR_ClashWithReservedEnumMember2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ClashWithReservedEnumMember1">
<file name="a.vb"><![CDATA[
Module M
Public Enum InterfaceColors
Value__
End Enum
End Module
Class c1
Public Shared Sub Main(args As String())
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31420: 'Value__' conflicts with the reserved member by this name that is implicitly declared in all enums.
Value__
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31422ERR_BadUseOfVoid_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class C1
Function scen1() As Void
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31422: 'System.Void' can only be used in a GetType expression.
Function scen1() As Void
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BC31422ERR_BadUseOfVoid_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Property P As System.Void
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31422: 'System.Void' can only be used in a GetType expression.
Property P As System.Void
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
CompilationUtils.AssertTheseEmitDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BC31423ERR_EventImplMismatch5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventImplMismatch5">
<file name="a.vb"><![CDATA[
Imports System
Public Interface IA
Event E()
End Interface
Public Class A
Implements IA
Public Event E As Action Implements IA.E
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31423: Event 'Public Event E As Action' cannot implement event 'Event E()' on interface 'IA' because their delegate types 'Action' and 'IA.EEventHandler' do not match.
Public Event E As Action Implements IA.E
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(539760, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539760")>
<Fact>
Public Sub BC31429ERR_MetadataMembersAmbiguous3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MetadataMembersAmbiguous3">
<file name="a.vb"><![CDATA[
Class Base
Public Shared Sub Main
Dim a As Integer = 5
Dim b As Base = New Derived(a)
End Sub
Private Class Derived
Inherits Base
Private a As Integer
Public Sub New(a As Integer)
Me.a = a
End Sub
Public Sub New()
End Sub
End Class
End Class
Class Base
Public Shared Sub Main
Dim a As Integer = 5
Dim b As Base = New Derived(a)
End Sub
Private Class Derived
Inherits Base
Private a As Integer
Public Sub New(a As Integer)
Me.a = a
End Sub
Public Sub New()
End Sub
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30521: Overload resolution failed because no accessible 'New' is most specific for these arguments:
'Public Sub New(a As Integer)': Not most specific.
'Public Sub New(a As Integer)': Not most specific.
Dim b As Base = New Derived(a)
~~~~~~~
BC31429: 'a' is ambiguous because multiple kinds of members with this name exist in class 'Base.Derived'.
Me.a = a
~~~~
BC30179: class 'Base' and class 'Base' conflict in namespace '<Default>'.
Class Base
~~~~
BC30521: Overload resolution failed because no accessible 'New' is most specific for these arguments:
'Public Sub New(a As Integer)': Not most specific.
'Public Sub New(a As Integer)': Not most specific.
Dim b As Base = New Derived(a)
~~~~~~~
BC30179: class 'Derived' and class 'Derived' conflict in class 'Base'.
Private Class Derived
~~~~~~~
BC31429: 'a' is ambiguous because multiple kinds of members with this name exist in class 'Base.Derived'.
Me.a = a
~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31431ERR_OnlyPrivatePartialMethods1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyPrivatePartialMethods1">
<file name="a.vb"><![CDATA[
Class C1
Partial Public Sub goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Public'.
Partial Public Sub goo()
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31431ERR_OnlyPrivatePartialMethods1a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyPrivatePartialMethods1a">
<file name="a.vb"><![CDATA[
Class C1
Partial Protected Overridable Sub goo()
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected'.
Partial Protected Overridable Sub goo()
~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
Partial Protected Overridable Sub goo()
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31431ERR_OnlyPrivatePartialMethods1b()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyPrivatePartialMethods1b">
<file name="a.vb"><![CDATA[
Class C1
Partial Protected Friend Sub M1()
End Sub
Partial Friend Protected Overridable Sub M2()
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected Friend'.
Partial Protected Friend Sub M1()
~~~~~~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Friend Protected'.
Partial Friend Protected Overridable Sub M2()
~~~~~~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
Partial Friend Protected Overridable Sub M2()
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31431ERR_OnlyPrivatePartialMethods1c()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyPrivatePartialMethods1c">
<file name="a.vb"><![CDATA[
Class C1
Partial Protected Overridable Friend Sub M()
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31431: Partial methods must be declared 'Private' instead of 'Protected'.
Partial Protected Overridable Friend Sub M()
~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Overridable'.
Partial Protected Overridable Friend Sub M()
~~~~~~~~~~~
BC31431: Partial methods must be declared 'Private' instead of 'Friend'.
Partial Protected Overridable Friend Sub M()
~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31432ERR_PartialMethodsMustBePrivate()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodsMustBePrivate">
<file name="a.vb"><![CDATA[
Class C1
Partial Sub Goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31432: Partial methods must be declared 'Private'.
Partial Sub Goo()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOnePartialMethodAllowed2">
<file name="a.vb"><![CDATA[
Class C1
Partial Private Sub Goo()
End Sub
Partial Private Sub Goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31433: Method 'Goo' cannot be declared 'Partial' because only one method 'Goo' can be marked 'Partial'.
Partial Private Sub Goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOnePartialMethodAllowed2a">
<file name="b.vb"><![CDATA[
Class C1
Partial Private Sub Goo()
End Sub
Partial Private Sub GoO()
End Sub
End Class
]]></file>
<file name="a.vb"><![CDATA[
Partial Class C1
Partial Private Sub goo()
End Sub
Partial Private Sub GOO()
End Sub
End Class
]]></file>
</compilation>)
' note the exact methods errors are reported on
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31433: Method 'goo' cannot be declared 'Partial' because only one method 'goo' can be marked 'Partial'.
Partial Private Sub goo()
~~~
BC31433: Method 'GOO' cannot be declared 'Partial' because only one method 'GOO' can be marked 'Partial'.
Partial Private Sub GOO()
~~~
BC31433: Method 'GoO' cannot be declared 'Partial' because only one method 'GoO' can be marked 'Partial'.
Partial Private Sub GoO()
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2b()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOnePartialMethodAllowed2b">
<file name="a.vb"><![CDATA[
Class CLS
Partial Private Shared Sub PS(a As Integer)
End Sub
Partial Private Shared Sub Ps(a As Integer)
End Sub
Private Shared Sub pS(a As Integer)
End Sub
Private Shared Sub ps(a As Integer)
End Sub
Public Sub PS(a As Integer)
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30269: 'Private Shared Sub PS(a As Integer)' has multiple definitions with identical signatures.
Partial Private Shared Sub PS(a As Integer)
~~
BC31433: Method 'Ps' cannot be declared 'Partial' because only one method 'Ps' can be marked 'Partial'.
Partial Private Shared Sub Ps(a As Integer)
~~
BC31434: Method 'ps' cannot implement partial method 'ps' because 'ps' already implements it. Only one method can implement a partial method.
Private Shared Sub ps(a As Integer)
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31433ERR_OnlyOnePartialMethodAllowed2c()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOnePartialMethodAllowed2c">
<file name="a.vb"><![CDATA[
Class CLS
Partial Private Shared Sub PS(a As Integer)
End Sub
Partial Private Overloads Shared Sub Ps(a As Integer)
End Sub
Private Overloads Shared Sub ps(a As Integer)
End Sub
Private Shared Sub pS(a As Integer)
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31409: sub 'PS' must be declared 'Overloads' because another 'PS' is declared 'Overloads' or 'Overrides'.
Partial Private Shared Sub PS(a As Integer)
~~
BC31433: Method 'Ps' cannot be declared 'Partial' because only one method 'Ps' can be marked 'Partial'.
Partial Private Overloads Shared Sub Ps(a As Integer)
~~
BC31409: sub 'pS' must be declared 'Overloads' because another 'pS' is declared 'Overloads' or 'Overrides'.
Private Shared Sub pS(a As Integer)
~~
BC31434: Method 'pS' cannot implement partial method 'pS' because 'pS' already implements it. Only one method can implement a partial method.
Private Shared Sub pS(a As Integer)
~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31434ERR_OnlyOneImplementingMethodAllowed3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOneImplementingMethodAllowed3">
<file name="a.vb"><![CDATA[
Public Class C1
Partial Private Sub GoO2()
End Sub
End Class
Partial Public Class C1
Private Sub GOo2()
End Sub
End Class
Partial Public Class C1
Private Sub Goo2()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31434: Method 'Goo2' cannot implement partial method 'Goo2' because 'Goo2' already implements it. Only one method can implement a partial method.
Private Sub Goo2()
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31434ERR_OnlyOneImplementingMethodAllowed3a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OnlyOneImplementingMethodAllowed3a">
<file name="b.vb"><![CDATA[
Public Class C1
Partial Private Sub GoO2()
End Sub
End Class
Partial Public Class C1
Private Sub GOo2()
End Sub
End Class
Partial Public Class C1
Private Sub Goo2()
End Sub
End Class
]]></file>
<file name="a.vb"><![CDATA[
Partial Public Class C1
Private Sub GOO2()
End Sub
End Class
Partial Public Class C1
Private Sub GoO2()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31434: Method 'GOO2' cannot implement partial method 'GOO2' because 'GOO2' already implements it. Only one method can implement a partial method.
Private Sub GOO2()
~~~~
BC31434: Method 'GoO2' cannot implement partial method 'GoO2' because 'GoO2' already implements it. Only one method can implement a partial method.
Private Sub GoO2()
~~~~
BC31434: Method 'Goo2' cannot implement partial method 'Goo2' because 'Goo2' already implements it. Only one method can implement a partial method.
Private Sub Goo2()
~~~~
]]></errors>
' note the exact methods errors are reported on
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31437ERR_PartialMethodsMustBeSub1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodsMustBeSub1">
<file name="a.vb"><![CDATA[
Class C1
Partial Function Goo() As Boolean
Return True
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 =
<errors><![CDATA[
BC31437: 'Goo' cannot be declared 'Partial' because partial methods must be Subs.
Partial Function Goo() As Boolean
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31437ERR_PartialMethodsMustBeSub2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialMethodsMustBeSub2">
<file name="a.vb"><![CDATA[
Class C1
Partial Private Sub Goo()
End Sub
Partial Function Goo() As Boolean
Return True
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 =
<errors><![CDATA[
BC30301: 'Private Sub Goo()' and 'Public Function Goo() As Boolean' cannot overload each other because they differ only by return types.
Partial Private Sub Goo()
~~~
BC31437: 'Goo' cannot be declared 'Partial' because partial methods must be Subs.
Partial Function Goo() As Boolean
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31438ERR_PartialMethodGenericConstraints2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
Class C(Of X)
' Different constraints.
Partial Private Sub A1(Of T As Structure)()
End Sub
Private Sub A1(Of T As Class)()
End Sub
Partial Private Sub A2(Of T As Structure, U As IA(Of T))()
End Sub
Private Sub A2(Of T As Structure, U As IB)()
End Sub
Partial Private Sub A3(Of T As IA(Of T))()
End Sub
Private Sub A3(Of T As IA(Of IA(Of T)))()
End Sub
Partial Private Sub A4(Of T As {Structure, IA(Of T)}, U)()
End Sub
Private Sub A4(Of T As {Structure, IA(Of U)}, U)()
End Sub
' Additional constraints.
Partial Private Sub B1(Of T)()
End Sub
Private Sub B1(Of T As New)()
End Sub
Partial Private Sub B2(Of T As {X, New})()
End Sub
Private Sub B2(Of T As {X, Class, New})()
End Sub
Partial Private Sub B3(Of T As IA(Of T), U)()
End Sub
Private Sub B3(Of T As {IB, IA(Of T)}, U)()
End Sub
' Missing constraints.
Partial Private Sub C1(Of T As Class)()
End Sub
Private Sub C1(Of T)()
End Sub
Partial Private Sub C2(Of T As {Class, New})()
End Sub
Private Sub C2(Of T As {Class})()
End Sub
Partial Private Sub C3(Of T, U As {IB, IA(Of T)})()
End Sub
Private Sub C3(Of T, U As IA(Of T))()
End Sub
' Same constraints, different order.
Private Sub D1(Of T As {IA(Of T), IB})()
End Sub
Partial Private Sub D1(Of T As {IB, IA(Of T)})()
End Sub
Private Sub D2(Of T, U, V As {T, U, X})()
End Sub
Partial Private Sub D2(Of T, U, V As {U, X, T})()
End Sub
' Different constraint clauses.
Private Sub E1(Of T, U As T)()
End Sub
Partial Private Sub E1(Of T As Class, U)()
End Sub
' Additional constraint clause.
Private Sub F1(Of T As Class, U)()
End Sub
Partial Private Sub F1(Of T As Class, U As T)()
End Sub
' Missing constraint clause.
Private Sub G1(Of T As Class, U As T)()
End Sub
Partial Private Sub G1(Of T As Class, U)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31438: Method 'A1' does not have the same generic constraints as the partial method 'A1'.
Private Sub A1(Of T As Class)()
~~
BC31438: Method 'A2' does not have the same generic constraints as the partial method 'A2'.
Private Sub A2(Of T As Structure, U As IB)()
~~
BC31438: Method 'A3' does not have the same generic constraints as the partial method 'A3'.
Private Sub A3(Of T As IA(Of IA(Of T)))()
~~
BC31438: Method 'A4' does not have the same generic constraints as the partial method 'A4'.
Private Sub A4(Of T As {Structure, IA(Of U)}, U)()
~~
BC31438: Method 'B1' does not have the same generic constraints as the partial method 'B1'.
Private Sub B1(Of T As New)()
~~
BC31438: Method 'B2' does not have the same generic constraints as the partial method 'B2'.
Private Sub B2(Of T As {X, Class, New})()
~~
BC31438: Method 'B3' does not have the same generic constraints as the partial method 'B3'.
Private Sub B3(Of T As {IB, IA(Of T)}, U)()
~~
BC31438: Method 'C1' does not have the same generic constraints as the partial method 'C1'.
Private Sub C1(Of T)()
~~
BC31438: Method 'C2' does not have the same generic constraints as the partial method 'C2'.
Private Sub C2(Of T As {Class})()
~~
BC31438: Method 'C3' does not have the same generic constraints as the partial method 'C3'.
Private Sub C3(Of T, U As IA(Of T))()
~~
BC31438: Method 'E1' does not have the same generic constraints as the partial method 'E1'.
Private Sub E1(Of T, U As T)()
~~
BC31438: Method 'F1' does not have the same generic constraints as the partial method 'F1'.
Private Sub F1(Of T As Class, U)()
~~
BC31438: Method 'G1' does not have the same generic constraints as the partial method 'G1'.
Private Sub G1(Of T As Class, U As T)()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31438ERR_PartialMethodGenericConstraints2a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Class Base(Of T As Class)
Class Derived
Inherits Base(Of Base(Of String))
Partial Private Sub Goo(Of S As {Base(Of String), IComparable})(i As Integer)
End Sub
Private Sub GOO(Of S As {IComparable, Base(Of IDisposable)})(i As Integer)
End Sub
Private Sub GoO(Of s As {IComparable, Base(Of IEnumerable)})(i As Integer)
End Sub
Private Sub gOo(Of s As {IComparable, Base(Of IComparable)})(i As Integer)
End Sub
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31438: Method 'GOO' does not have the same generic constraints as the partial method 'Goo'.
Private Sub GOO(Of S As {IComparable, Base(Of IDisposable)})(i As Integer)
~~~
BC31434: Method 'GoO' cannot implement partial method 'GoO' because 'GoO' already implements it. Only one method can implement a partial method.
Private Sub GoO(Of s As {IComparable, Base(Of IEnumerable)})(i As Integer)
~~~
BC31434: Method 'gOo' cannot implement partial method 'gOo' because 'gOo' already implements it. Only one method can implement a partial method.
Private Sub gOo(Of s As {IComparable, Base(Of IComparable)})(i As Integer)
~~~
]]></errors>)
' NOTE: Dev10 reports three BC31438 in this case
End Sub
<Fact()>
Public Sub BC31438ERR_PartialMethodGenericConstraints2b()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Public Class Base(Of T As Class)
Public Class Derived
Inherits Base(Of Base(Of String))
Partial Private Sub Goo(Of S As {Base(Of String), IComparable})(i As Integer)
End Sub
Private Sub gOo(Of s As {IComparable, C.I})(i As Integer)
End Sub
Partial Private Sub Bar(Of S As {C.I})(i As Integer)
End Sub
Private Sub bar(Of s As {C.I})(i As Integer)
End Sub
Public Class C
Interface I
End Interface
End Class
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31438: Method 'gOo' does not have the same generic constraints as the partial method 'Goo'.
Private Sub gOo(Of s As {IComparable, C.I})(i As Integer)
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31439ERR_PartialDeclarationImplements1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialDeclarationImplements1">
<file name="a.vb"><![CDATA[
Imports System
Class A
Implements IDisposable
Partial Private Sub Dispose() Implements IDisposable.Dispose
End Sub
Private Sub Dispose()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'A' must implement 'Sub Dispose()' for interface 'IDisposable'.
Implements IDisposable
~~~~~~~~~~~
BC31439: Partial method 'Dispose' cannot use the 'Implements' keyword.
Partial Private Sub Dispose() Implements IDisposable.Dispose
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31439ERR_PartialDeclarationImplements1a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PartialDeclarationImplements1a">
<file name="a.vb"><![CDATA[
Imports System
Class A
Implements IDisposable
Partial Private Sub Dispose() Implements IDisposable.Dispose
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30149: Class 'A' must implement 'Sub Dispose()' for interface 'IDisposable'.
Implements IDisposable
~~~~~~~~~~~
BC31439: Partial method 'Dispose' cannot use the 'Implements' keyword.
Partial Private Sub Dispose() Implements IDisposable.Dispose
~~~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31441ERR_ImplementationMustBePrivate2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ImplementationMustBePrivate2">
<file name="a.vb"><![CDATA[
Partial Class C1
Partial Private Sub GOO()
End Sub
End Class
Partial Class C1
Sub GOO()
'HELLO
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31441: Method 'GOO' must be declared 'Private' in order to implement partial method 'GOO'.
Sub GOO()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31441ERR_ImplementationMustBePrivate2a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ImplementationMustBePrivate2a">
<file name="a.vb"><![CDATA[
Partial Class C1
Partial Private Sub GOO()
End Sub
End Class
Partial Class C1
Sub Goo()
End Sub
Private Sub gOO()
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31441: Method 'Goo' must be declared 'Private' in order to implement partial method 'GOO'.
Sub Goo()
~~~
BC31434: Method 'gOO' cannot implement partial method 'gOO' because 'gOO' already implements it. Only one method can implement a partial method.
Private Sub gOO()
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31442ERR_PartialMethodParamNamesMustMatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PartialMethodParamNamesMustMatch3">
<file name="a.vb"><![CDATA[
Module M
Partial Private Sub Goo(ByVal x As Integer)
End Sub
Private Sub Goo(ByVal y As Integer)
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31442: Parameter name 'y' does not match the name of the corresponding parameter, 'x', defined on the partial method declaration 'Goo'.
Private Sub Goo(ByVal y As Integer)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC31442ERR_PartialMethodParamNamesMustMatch3a()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PartialMethodParamNamesMustMatch3a">
<file name="a.vb"><![CDATA[
Module M
Partial Private Sub Goo(ByVal x As Integer, a As Integer)
End Sub
Private Sub Goo(ByVal x As Integer, b As Integer)
End Sub
Private Sub Goo(ByVal y As Integer, b As Integer)
End Sub
Private Sub Goo(ByVal y As Integer, b As Integer)
End Sub
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC31442: Parameter name 'b' does not match the name of the corresponding parameter, 'a', defined on the partial method declaration 'Goo'.
Private Sub Goo(ByVal x As Integer, b As Integer)
~
BC31434: Method 'Goo' cannot implement partial method 'Goo' because 'Goo' already implements it. Only one method can implement a partial method.
Private Sub Goo(ByVal y As Integer, b As Integer)
~~~
BC31434: Method 'Goo' cannot implement partial method 'Goo' because 'Goo' already implements it. Only one method can implement a partial method.
Private Sub Goo(ByVal y As Integer, b As Integer)
~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC31443ERR_PartialMethodTypeParamNameMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PartialMethodTypeParamNameMismatch3">
<file name="a.vb"><![CDATA[
Module M
Partial Private Sub Goo(Of S)()
End Sub
Private Sub Goo(Of T)()
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31443: Name of type parameter 'T' does not match 'S', the corresponding type parameter defined on the partial method declaration 'Goo'.
Private Sub Goo(Of T)()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC31503ERR_AttributeMustBeClassNotStruct1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttributeMustBeClassNotStruct1">
<file name="a.vb"><![CDATA[
Structure s1
End Structure
<s1()>
Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31503: 's1' cannot be used as an attribute because it is not a class.
<s1()>
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540625, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540625")>
<Fact>
Public Sub BC31504ERR_AttributeMustInheritSysAttr()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttributeMustInheritSysAttr">
<file name="at31504.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public Class MyAttribute
'Inherits Attribute
End Class
<MyAttribute()>
Class Test
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeMustInheritSysAttr, "MyAttribute").WithArguments("MyAttribute"))
End Sub
<WorkItem(540628, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540628")>
<Fact>
Public Sub BC31506ERR_AttributeCannotBeAbstract()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttributeCannotBeAbstract">
<file name="at31506.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public MustInherit Class MyAttribute
Inherits Attribute
Public Sub New()
End Sub
End Class
<My()>
Class Goo
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeCannotBeAbstract, "My").WithArguments("MyAttribute"))
End Sub
<WorkItem(540628, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540628")>
<Fact>
Public Sub BC31507ERR_AttributeCannotHaveMustOverride()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttributeCannotHaveMustOverride">
<file name="at31500.vb"><![CDATA[
Imports System
<AttributeUsage(AttributeTargets.All)>
Public MustInherit Class MyAttribute
Inherits Attribute
Public Sub New()
End Sub
'MustOverride Property AbsProp As Byte
Public MustOverride Sub AbsSub()
End Class
<My()>
Class Goo
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttributeCannotBeAbstract, "My").WithArguments("MyAttribute"))
End Sub
<Fact>
Public Sub BC31512ERR_STAThreadAndMTAThread0()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="STAThreadAndMTAThread0">
<file name="a.vb"><![CDATA[
Imports System
Class C1
<MTAThread>
<STAThread>
Sub goo()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31512: 'System.STAThreadAttribute' and 'System.MTAThreadAttribute' cannot both be applied to the same method.
Sub goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' BC31523ERR_DllImportNotLegalOnDeclare
' BC31524ERR_DllImportNotLegalOnGetOrSet
' BC31526ERR_DllImportOnGenericSubOrFunction
' see AttributeTests
<Fact()>
Public Sub BC31527ERR_ComClassOnGeneric()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassOnGeneric">
<file name="a.vb"><![CDATA[
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic
<ComClass()>
Class C1(Of T)
Sub GOO(ByVal s As T)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31527: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to a class that is generic or contained inside a generic type.
Class C1(Of T)
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' BC31529ERR_DllImportOnInstanceMethod
' BC31530ERR_DllImportOnInterfaceMethod
' BC31531ERR_DllImportNotLegalOnEventMethod
' see AttributeTests
<Fact, WorkItem(1116455, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1116455")>
Public Sub BC31534ERR_FriendAssemblyBadArguments()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="FriendAssemblyBadArguments">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("Test, Version=*")> ' ok
<Assembly: InternalsVisibleTo("Test, PublicKeyToken=*")> ' ok
<Assembly: InternalsVisibleTo("Test, Culture=*")> ' ok
<Assembly: InternalsVisibleTo("Test, Retargetable=*")> ' ok
<Assembly: InternalsVisibleTo("Test, ContentType=*")> ' ok
<Assembly: InternalsVisibleTo("Test, Version=.")> ' ok
<Assembly: InternalsVisibleTo("Test, Version=..")> ' ok
<Assembly: InternalsVisibleTo("Test, Version=...")> ' ok
<Assembly: InternalsVisibleTo("Test, Version=1")> ' error
<Assembly: InternalsVisibleTo("Test, Version=1.*")> ' error
<Assembly: InternalsVisibleTo("Test, Version=1.1.*")> ' error
<Assembly: InternalsVisibleTo("Test, Version=1.1.1.*")> ' error
<Assembly: InternalsVisibleTo("Test, ProcessorArchitecture=MSIL")> ' error
<Assembly: InternalsVisibleTo("Test, CuLTure=EN")> ' error
<Assembly: InternalsVisibleTo("Test, PublicKeyToken=null")> ' ok
]]></file>
</compilation>, {SystemCoreRef})
' Tested against Dev12
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1"")").WithArguments("Test, Version=1").WithLocation(11, 2),
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.*"")").WithArguments("Test, Version=1.*").WithLocation(12, 2),
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.1.*"")").WithArguments("Test, Version=1.1.*").WithLocation(13, 2),
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, Version=1.1.1.*"")").WithArguments("Test, Version=1.1.1.*").WithLocation(14, 2),
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, ProcessorArchitecture=MSIL"")").WithArguments("Test, ProcessorArchitecture=MSIL").WithLocation(15, 2),
Diagnostic(ERRID.ERR_FriendAssemblyBadArguments, "Assembly: InternalsVisibleTo(""Test, CuLTure=EN"")").WithArguments("Test, CuLTure=EN").WithLocation(16, 2))
End Sub
<Fact>
Public Sub BC31537ERR_FriendAssemblyNameInvalid()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="FriendAssemblyNameInvalid">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("' '")> ' ok
<Assembly: InternalsVisibleTo("\t\r\n;a")> ' ok (whitespace escape)
<Assembly: InternalsVisibleTo("\u1234;a")> ' ok (assembly name Unicode escape)
<Assembly: InternalsVisibleTo("' a '")> ' ok
<Assembly: InternalsVisibleTo("\u1000000;a")> ' invalid escape
<Assembly: InternalsVisibleTo("a'b'c")> ' quotes in the middle
<Assembly: InternalsVisibleTo("Test, PublicKey=Null")>
<Assembly: InternalsVisibleTo("Test, Bar")>
<Assembly: InternalsVisibleTo("Test, Version")>
]]></file>
</compilation>, {SystemCoreRef})
' Tested against Dev12
compilation.VerifyDiagnostics(
Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""\u1000000;a"")").WithArguments("\u1000000;a").WithLocation(6, 2),
Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""a'b'c"")").WithArguments("a'b'c").WithLocation(7, 2),
Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, PublicKey=Null"")").WithArguments("Test, PublicKey=Null").WithLocation(8, 2),
Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, Bar"")").WithArguments("Test, Bar").WithLocation(9, 2),
Diagnostic(ERRID.ERR_FriendAssemblyNameInvalid, "Assembly: InternalsVisibleTo(""Test, Version"")").WithArguments("Test, Version").WithLocation(10, 2))
End Sub
<Fact()>
Public Sub BC31549ERR_PIAHasNoAssemblyGuid1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="A">
<file name="a.vb"><![CDATA[
Imports System.Runtime.InteropServices
<Assembly: ImportedFromTypeLib("_.dll")>
]]></file>
</compilation>)
compilation1.AssertNoErrors()
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation>
<file name="a.vb"/>
</compilation>,
references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31549: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing the 'System.Runtime.InteropServices.GuidAttribute' attribute.
]]></errors>)
End Sub
<Fact()>
Public Sub BC31553ERR_PIAHasNoTypeLibAttribute1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="A">
<file name="a.vb"><![CDATA[
<Assembly: System.Runtime.InteropServices.Guid("f9c2d51d-4f44-45f0-9eda-c9d599b58257")>
]]></file>
</compilation>)
compilation1.AssertNoErrors()
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation>
<file name="a.vb"/>
</compilation>,
references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31553: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing either the 'System.Runtime.InteropServices.ImportedFromTypeLibAttribute' attribute or the 'System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute' attribute.
]]></errors>)
End Sub
<Fact()>
Public Sub BC31553ERR_PIAHasNoTypeLibAttribute1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="A">
<file name="a.vb"/>
</compilation>)
compilation1.AssertNoErrors()
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation>
<file name="a.vb"/>
</compilation>,
references:={New VisualBasicCompilationReference(compilation1, embedInteropTypes:=True)})
compilation2.AssertTheseDeclarationDiagnostics(<errors><![CDATA[
BC31549: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing the 'System.Runtime.InteropServices.GuidAttribute' attribute.
BC31553: Cannot embed interop types from assembly 'A, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' because it is missing either the 'System.Runtime.InteropServices.ImportedFromTypeLibAttribute' attribute or the 'System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute' attribute.
]]></errors>)
End Sub
<Fact>
Public Sub BC32040ERR_BadFlagsOnNewOverloads()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BadFlagsOnNewOverloads">
<file name="a.vb"><![CDATA[
class C1
End class
Friend Class C2
Inherits C1
Public Overloads Sub New(ByVal x As Integer)
MyBase.New(CType (x, Short))
End Sub
Public Sub New(ByVal x As Date)
MyBase.New(1)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32040: The 'Overloads' keyword is used to overload inherited members; do not use the 'Overloads' keyword when overloading 'Sub New'.
Public Overloads Sub New(ByVal x As Integer)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32041ERR_TypeCharOnGenericParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeCharOnGenericParam">
<file name="a.vb"><![CDATA[
Structure S(Of T@)
Sub M(Of U@)()
End Sub
End Structure
Interface I(Of T#)
Sub M(Of U#)()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32041: Type character cannot be used in a type parameter declaration.
Structure S(Of T@)
~~
BC32041: Type character cannot be used in a type parameter declaration.
Sub M(Of U@)()
~~
BC32041: Type character cannot be used in a type parameter declaration.
Interface I(Of T#)
~~
BC32041: Type character cannot be used in a type parameter declaration.
Sub M(Of U#)()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32042ERR_TooFewGenericArguments1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TooFewGenericArguments1">
<file name="a.vb"><![CDATA[
Structure S1(Of t)
End Structure
Class c1
Dim x3 As S1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'S1(Of t)'.
Dim x3 As S1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32043ERR_TooManyGenericArguments1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TooManyGenericArguments1">
<file name="a.vb"><![CDATA[
Structure S1(Of arg1)
End Structure
Class c1
Dim scen2 As New S1(Of String, Integer, Double, Decimal)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32043: Too many type arguments to 'S1(Of arg1)'.
Dim scen2 As New S1(Of String, Integer, Double, Decimal)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32044ERR_GenericConstraintNotSatisfied2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T1, T2)
Sub M(Of U As {T1, T2})()
M(Of T1)()
M(Of T2)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32044: Type argument 'T1' does not inherit from or implement the constraint type 'T2'.
M(Of T1)()
~~~~~~~~
BC32044: Type argument 'T2' does not inherit from or implement the constraint type 'T1'.
M(Of T2)()
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32044ERR_GenericConstraintNotSatisfied2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Public Module M
Sub Main()
Goo(Function(x As String) x, Function(x As Object) x)
End Sub
Sub Goo(Of T, S As T)(ByVal x As T, ByVal y As S)
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32044: Type argument 'Function <generated method>(x As Object) As Object' does not inherit from or implement the constraint type 'Function <generated method>(x As String) As String'.
Goo(Function(x As String) x, Function(x As Object) x)
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32047ERR_MultipleClassConstraints1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MultipleClassConstraints1">
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
Inherits A
End Class
Class C
Inherits B
End Class
Interface IA(Of T, U As {A, T, B})
End Interface
Interface IB
Sub M(Of T As {A, B, C, New})()
End Interface
MustInherit Class D(Of T, U)
MustOverride Sub M(Of V As {T, U, C, New})()
End Class
MustInherit Class E
Inherits D(Of A, B)
Public Overrides Sub M(Of V As {A, B, C, New})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32047: Type parameter 'U' can only have one constraint that is a class.
Interface IA(Of T, U As {A, T, B})
~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Sub M(Of T As {A, B, C, New})()
~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Sub M(Of T As {A, B, C, New})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32048ERR_ConstNotClassInterfaceOrTypeParam1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ConstNotClassInterfaceOrTypeParam1">
<file name="a.vb"><![CDATA[
Class A
End Class
Delegate Sub D()
Structure S
End Structure
Enum E
A
End Enum
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
End Class
MustInherit Class C2(Of T1, T2, T3, T4, T5)
MustOverride Sub M(Of U1 As T1, U2 As T2, U3 As T3, U4 As T4, U5 As T5)()
End Class
MustInherit Class C3
Inherits C2(Of A(), D, S, E, Unknown)
MustOverride Overrides Sub M(Of U1 As A(), U2 As D, U3 As S, U4 As E, U5 As Unknown)()
End Class
Class C3(Of T As {S(), E()})
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32048: Type constraint 'A()' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
~~~
BC32048: Type constraint 'D' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
~
BC32048: Type constraint 'S' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
~
BC32048: Type constraint 'E' must be either a class, interface or type parameter.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
~
BC30002: Type 'Unknown' is not defined.
Class C1(Of T1 As A(), T2 As D, T3 As S, T4 As E, T5 As Unknown)
~~~~~~~
BC30002: Type 'Unknown' is not defined.
Inherits C2(Of A(), D, S, E, Unknown)
~~~~~~~
BC30002: Type 'Unknown' is not defined.
MustOverride Overrides Sub M(Of U1 As A(), U2 As D, U3 As S, U4 As E, U5 As Unknown)()
~~~~~~~
BC32048: Type constraint 'S()' must be either a class, interface or type parameter.
Class C3(Of T As {S(), E()})
~~~
BC32048: Type constraint 'E()' must be either a class, interface or type parameter.
Class C3(Of T As {S(), E()})
~~~
BC32119: Constraint 'E()' conflicts with the constraint 'S()' already specified for type parameter 'T'.
Class C3(Of T As {S(), E()})
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Checks for duplicate type parameters
<Fact>
Public Sub BC32049ERR_DuplicateTypeParamName1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
class c(of tT, TT, Tt)
end class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32049: Type parameter already declared with name 'TT'.
class c(of tT, TT, Tt)
~~
BC32049: Type parameter already declared with name 'Tt'.
class c(of tT, TT, Tt)
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32054ERR_ShadowingGenericParamWithMember1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ShadowingGenericParamWithMember1">
<file name="a.vb"><![CDATA[
Partial Structure S1(Of membername)
Function membername() As String
End Function
End Structure
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32054: 'membername' has the same name as a type parameter.
Function membername() As String
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32055ERR_GenericParamBase2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="GenericParamBase2">
<file name="a.vb"><![CDATA[
Class C1(Of T)
Class cls3
Inherits T
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32055: Class 'cls3' cannot inherit from a type parameter.
Inherits T
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32055ERR_GenericParamBase2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="GenericParamBase2">
<file name="a.vb"><![CDATA[
Interface I1(Of T)
Class c1
Inherits T
End Class
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32055: Class 'c1' cannot inherit from a type parameter.
Inherits T
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32056ERR_ImplementsGenericParam()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeParamQualifierDisallowed">
<file name="a.vb"><![CDATA[
Interface I1(Of T)
Class c1
Implements T
End Class
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32056: Type parameter not allowed in 'Implements' clause.
Implements T
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32060ERR_ClassConstraintNotInheritable1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
NotInheritable Class A
End Class
Class B
End Class
Interface IA(Of T As {A, B})
End Interface
Interface IB(Of T)
Sub M(Of U As T)()
End Interface
Class C
Implements IB(Of A)
Private Sub M(Of U As A)() Implements IB(Of A).M
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32060: Type constraint cannot be a 'NotInheritable' class.
Interface IA(Of T As {A, B})
~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Interface IA(Of T As {A, B})
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32061ERR_ConstraintIsRestrictedType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Interface I(Of T As Object, U As System.ValueType)
End Interface
Structure S(Of T As System.Enum, U As System.Array)
End Structure
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
Class C(Of T As {Object, A}, U As {A, Object})
End Class
Class A(Of T1, T2, T3, T4, T5, T6)
End Class
Class B
Inherits A(Of Object, System.ValueType, System.Enum, System.Array, System.Delegate, System.MulticastDelegate)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32061: 'Object' cannot be used as a type constraint.
Interface I(Of T As Object, U As System.ValueType)
~~~~~~
BC32061: 'ValueType' cannot be used as a type constraint.
Interface I(Of T As Object, U As System.ValueType)
~~~~~~~~~~~~~~~~
BC32061: '[Enum]' cannot be used as a type constraint.
Structure S(Of T As System.Enum, U As System.Array)
~~~~~~~~~~~
BC32061: 'Array' cannot be used as a type constraint.
Structure S(Of T As System.Enum, U As System.Array)
~~~~~~~~~~~~
BC32061: '[Delegate]' cannot be used as a type constraint.
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
~~~~~~~~~~~~~~~
BC32061: 'MulticastDelegate' cannot be used as a type constraint.
Delegate Sub D(Of T As System.Delegate, U As System.MulticastDelegate)()
~~~~~~~~~~~~~~~~~~~~~~~~
BC32061: 'Object' cannot be used as a type constraint.
Class C(Of T As {Object, A}, U As {A, Object})
~~~~~~
BC32047: Type parameter 'T' can only have one constraint that is a class.
Class C(Of T As {Object, A}, U As {A, Object})
~
BC32047: Type parameter 'U' can only have one constraint that is a class.
Class C(Of T As {Object, A}, U As {A, Object})
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540653, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540653")>
<Fact>
Public Sub BC32067ERR_AttrCannotBeGenerics()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AttrCannotBeGenerics">
<file name="a.vb"><![CDATA[
Imports System
Class Test(Of attributeusageattribute)
'COMPILEERROR: BC32067,"attributeusageattribute"
<attributeusageattribute(AttributeTargets.All)> Class c1
End Class
Class myattr
'COMPILEERROR: BC32074,"Attribute"
Inherits Attribute
End Class
'COMPILEERROR: BC32067,"myattr"
<myattr()> Class test3
End Class
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AttrCannotBeGenerics, "attributeusageattribute").WithArguments("attributeusageattribute"),
Diagnostic(ERRID.ERR_AttrCannotBeGenerics, "myattr").WithArguments("Test(Of attributeusageattribute).myattr"),
Diagnostic(ERRID.ERR_GenericClassCannotInheritAttr, "myattr"))
End Sub
<Fact()>
Public Sub BC32068ERR_BadStaticLocalInGenericMethod()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadStaticLocalInGenericMethod">
<file name="a.vb"><![CDATA[
Module M
Sub Goo(Of T)()
Static x = 1
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32068: Local variables within generic methods cannot be declared 'Static'.
Static x = 1
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32070ERR_SyntMemberShadowsGenericParam3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="SyntMemberShadowsGenericParam3">
<file name="a.vb"><![CDATA[
Class C(Of _P, get_P, set_P, _q, get_R, set_R, _R)
Property P
Property Q
Property R
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32070: property 'P' implicitly defines a member '_P' which has the same name as a type parameter.
Property P
~
BC32070: property 'Q' implicitly defines a member '_Q' which has the same name as a type parameter.
Property Q
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32071ERR_ConstraintAlreadyExists1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
MustInherit Class B(Of T, U)
MustOverride Sub M1(Of V As {T, U, I})()
End Class
MustInherit Class C
Inherits B(Of I, A)
MustOverride Overrides Sub M1(Of V As {I, A, I})()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32071: Constraint type 'I' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
~
BC32071: Constraint type 'T' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
~
BC32047: Type parameter 'U' can only have one constraint that is a class.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
~
BC32071: Constraint type 'A' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
~
BC32071: Constraint type 'I' already specified for this type parameter.
Delegate Sub D(Of T As I, U As {New, T, I, I, A, T, A, I})()
~
BC32071: Constraint type 'I' already specified for this type parameter.
MustOverride Overrides Sub M1(Of V As {I, A, I})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Duplicate undefined constraint types.
<Fact()>
Public Sub BC32071ERR_ConstraintAlreadyExists1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As {A, B, A})
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30002: Type 'A' is not defined.
Class C(Of T As {A, B, A})
~
BC30002: Type 'B' is not defined.
Class C(Of T As {A, B, A})
~
BC30002: Type 'A' is not defined.
Class C(Of T As {A, B, A})
~
BC32071: Constraint type 'A' already specified for this type parameter.
Class C(Of T As {A, B, A})
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
Public Sub BC32072ERR_InterfacePossiblyImplTwice2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfacePossiblyImplTwice2">
<file name="a.vb"><![CDATA[
Class C1(Of T As IAsyncResult, u As IComparable)
Implements intf1(Of T)
Implements intf1(Of u)
End Class
Interface intf1(Of T)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32072: Cannot implement interface 'intf1(Of u)' because its implementation could conflict with the implementation of another implemented interface 'intf1(Of T)' for some type arguments.
Implements intf1(Of u)
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540652, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540652")>
<Fact()>
Public Sub BC32074ERR_GenericClassCannotInheritAttr()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Reflection
Friend Module RegressVSW108431mod
<AttributeUsage(AttributeTargets.All)>
Class Attr1(Of A)
'COMPILEERROR: BC32074, "Attribute"
Inherits Attribute
End Class
Class G(Of T)
Class Attr2
'COMPILEERROR: BC32074,"Attribute"
Inherits Attribute
End Class
End Class
End Module
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
Class Attr1(Of A)
~~~~~
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
Class Attr2
~~~~~
]]></errors>)
End Sub
<WorkItem(543672, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543672")>
<Fact()>
Public Sub BC32074ERR_GenericClassCannotInheritAttr_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Inherits System.Attribute
End Class
Class B(Of T)
Inherits A
End Class
Class C(Of T)
Class B
Inherits A
End Class
End Class
]]></file>
</compilation>)
compilation.AssertTheseDiagnostics(<errors><![CDATA[
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
Class B(Of T)
~
BC32074: Classes that are generic or contained in a generic type cannot inherit from an attribute class.
Class B
~
]]></errors>)
End Sub
<Fact>
Public Sub BC32075ERR_DeclaresCantBeInGeneric()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="GenericClassCannotInheritAttr">
<file name="a.vb"><![CDATA[
Public Class C1(Of t)
Declare Sub goo Lib "a.dll" ()
End Class
]]></file>
</compilation>)
compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_DeclaresCantBeInGeneric, "goo"))
End Sub
<Fact()>
Public Sub BC32077ERR_OverrideWithConstraintMismatch2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA(Of T)
End Interface
Interface IB
End Interface
MustInherit Class A
' Different constraints.
Friend MustOverride Sub A1(Of T As Structure)()
Friend MustOverride Sub A2(Of T As Structure, U As IA(Of T))()
Friend MustOverride Sub A3(Of T As IA(Of T))()
Friend MustOverride Sub A4(Of T As {Structure, IA(Of T)}, U)()
' Additional constraints.
Friend MustOverride Sub B1(Of T)()
Friend MustOverride Sub B2(Of T As New)()
Friend MustOverride Sub B3(Of T As IA(Of T), U)()
' Missing constraints.
Friend MustOverride Sub C1(Of T As Class)()
Friend MustOverride Sub C2(Of T As {Class, New})()
Friend MustOverride Sub C3(Of T, U As {IB, IA(Of T)})()
' Same constraints, different order.
Friend MustOverride Sub D1(Of T As {IA(Of T), IB})()
Friend MustOverride Sub D2(Of T, U, V As {T, U})()
' Different constraint clauses.
Friend MustOverride Sub E1(Of T, U As T)()
' Different type parameter names.
Friend MustOverride Sub F1(Of T As Class, U As T)()
Friend MustOverride Sub F2(Of T As Class, U As T)()
End Class
MustInherit Class B
Inherits A
' Different constraints.
Friend MustOverride Overrides Sub A1(Of T As Class)()
Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()
Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()
Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()
' Additional constraints.
Friend MustOverride Overrides Sub B1(Of T As New)()
Friend MustOverride Overrides Sub B2(Of T As {Class, New})()
Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()
' Missing constraints.
Friend MustOverride Overrides Sub C1(Of T)()
Friend MustOverride Overrides Sub C2(Of T As Class)()
Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()
' Same constraints, different order.
Friend MustOverride Overrides Sub D1(Of T As {IB, IA(Of T)})()
Friend MustOverride Overrides Sub D2(Of T, U, V As {U, T})()
' Different constraint clauses.
Friend MustOverride Overrides Sub E1(Of T As Class, U)()
' Different type parameter names.
Friend MustOverride Overrides Sub F1(Of U As Class, T As U)()
Friend MustOverride Overrides Sub F2(Of T1 As Class, T2 As T1)()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32077: 'Friend MustOverride Overrides Sub A1(Of T As Class)()' cannot override 'Friend MustOverride Sub A1(Of T As Structure)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub A1(Of T As Class)()
~~
BC32077: 'Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()' cannot override 'Friend MustOverride Sub A2(Of T As Structure, U As IA(Of T))()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub A2(Of T As Structure, U As IB)()
~~
BC32077: 'Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()' cannot override 'Friend MustOverride Sub A3(Of T As IA(Of T))()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub A3(Of T As IA(Of IA(Of T)))()
~~
BC32077: 'Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()' cannot override 'Friend MustOverride Sub A4(Of T As {Structure, IA(Of T)}, U)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub A4(Of T As {Structure, IA(Of U)}, U)()
~~
BC32077: 'Friend MustOverride Overrides Sub B1(Of T As New)()' cannot override 'Friend MustOverride Sub B1(Of T)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub B1(Of T As New)()
~~
BC32077: 'Friend MustOverride Overrides Sub B2(Of T As {Class, New})()' cannot override 'Friend MustOverride Sub B2(Of T As New)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub B2(Of T As {Class, New})()
~~
BC32077: 'Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()' cannot override 'Friend MustOverride Sub B3(Of T As IA(Of T), U)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub B3(Of T As {IB, IA(Of T)}, U)()
~~
BC32077: 'Friend MustOverride Overrides Sub C1(Of T)()' cannot override 'Friend MustOverride Sub C1(Of T As Class)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub C1(Of T)()
~~
BC32077: 'Friend MustOverride Overrides Sub C2(Of T As Class)()' cannot override 'Friend MustOverride Sub C2(Of T As {Class, New})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub C2(Of T As Class)()
~~
BC32077: 'Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()' cannot override 'Friend MustOverride Sub C3(Of T, U As {IB, IA(Of T)})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub C3(Of T, U As IA(Of T))()
~~
BC32077: 'Friend MustOverride Overrides Sub E1(Of T As Class, U)()' cannot override 'Friend MustOverride Sub E1(Of T, U As T)()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub E1(Of T As Class, U)()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32077ERR_OverrideWithConstraintMismatch2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Class A
Implements I
End Class
Structure S
End Structure
MustInherit Class A0(Of T)
Friend MustOverride Sub AM(Of U As {T, Structure})()
End Class
MustInherit Class A1
Inherits A0(Of S)
Friend MustOverride Overrides Sub AM(Of U As {Structure, S})()
End Class
MustInherit Class A2
Inherits A0(Of S)
Friend MustOverride Overrides Sub AM(Of U As S)()
End Class
MustInherit Class B0(Of T)
Friend MustOverride Sub BX(Of U As {T, Class})()
End Class
MustInherit Class B1
Inherits B0(Of A)
Friend MustOverride Overrides Sub BX(Of U As {Class, A})()
End Class
MustInherit Class B2
Inherits B0(Of A)
Friend MustOverride Overrides Sub BX(Of U As A)()
End Class
MustInherit Class C0(Of T, U)
Friend MustOverride Sub CM(Of V As {T, U})()
End Class
MustInherit Class C1(Of T)
Inherits C0(Of T, T)
Friend MustOverride Overrides Sub CM(Of V As T)()
End Class
MustInherit Class C2(Of T)
Inherits C0(Of T, T)
Friend MustOverride Overrides Sub CM(Of V As {T, T})()
End Class
MustInherit Class D0(Of T, U)
Friend MustOverride Sub DM(Of V As {T, U, A, I})()
End Class
MustInherit Class D1
Inherits D0(Of I, A)
Friend MustOverride Overrides Sub DM(Of V As A)()
End Class
MustInherit Class D2
Inherits D0(Of I, A)
Friend MustOverride Overrides Sub DM(Of V As {A, I})()
End Class
MustInherit Class D3
Inherits D0(Of A, I)
Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
End Class
MustInherit Class E0(Of T, U)
Friend MustOverride Sub EM(Of V As {T, U, Structure})()
End Class
MustInherit Class E1
Inherits E0(Of Object, ValueType)
Friend MustOverride Overrides Sub EM(Of U As Structure)()
End Class
MustInherit Class E2
Inherits E0(Of Object, ValueType)
Friend MustOverride Overrides Sub EM(Of U As {Structure, Object, ValueType})()
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32077: 'Friend MustOverride Overrides Sub AM(Of U As S)()' cannot override 'Friend MustOverride Sub AM(Of U As {Structure, S})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub AM(Of U As S)()
~~
BC32077: 'Friend MustOverride Overrides Sub BX(Of U As A)()' cannot override 'Friend MustOverride Sub BX(Of U As {Class, A})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub BX(Of U As A)()
~~
BC32071: Constraint type 'T' already specified for this type parameter.
Friend MustOverride Overrides Sub CM(Of V As {T, T})()
~
BC32077: 'Friend MustOverride Overrides Sub DM(Of V As A)()' cannot override 'Friend MustOverride Sub DM(Of V As {I, A})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub DM(Of V As A)()
~~
BC32071: Constraint type 'A' already specified for this type parameter.
Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
~
BC32071: Constraint type 'I' already specified for this type parameter.
Friend MustOverride Overrides Sub DM(Of V As {A, I, A, I})()
~
BC32077: 'Friend MustOverride Overrides Sub EM(Of U As Structure)()' cannot override 'Friend MustOverride Sub EM(Of V As {Structure, Object, ValueType})()' because they differ by type parameter constraints.
Friend MustOverride Overrides Sub EM(Of U As Structure)()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32078ERR_ImplementsWithConstraintMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Class A
Implements I
End Class
Structure S
End Structure
Interface IA(Of T)
Sub AM(Of U As {T, Structure})()
End Interface
Class A1
Implements IA(Of S)
Private Sub AM(Of U As {Structure, S})() Implements IA(Of S).AM
End Sub
End Class
Class A2
Implements IA(Of S)
Private Sub AM(Of U As S)() Implements IA(Of S).AM
End Sub
End Class
Interface IB(Of T)
Sub BX(Of U As {T, Class})()
End Interface
Class B1
Implements IB(Of A)
Private Sub BX(Of U As {Class, A})() Implements IB(Of A).BX
End Sub
End Class
Class B2
Implements IB(Of A)
Private Sub BX(Of U As A)() Implements IB(Of A).BX
End Sub
End Class
Interface IC(Of T, U)
Sub CM(Of V As {T, U})()
End Interface
Class C1(Of T)
Implements IC(Of T, T)
Private Sub CM(Of V As T)() Implements IC(Of T, T).CM
End Sub
End Class
Class C2(Of T)
Implements IC(Of T, T)
Private Sub CM(Of V As {T, T})() Implements IC(Of T, T).CM
End Sub
End Class
Interface ID(Of T, U)
Sub DM(Of V As {T, U, A, I})()
End Interface
Class D1
Implements ID(Of I, A)
Private Sub DM(Of V As A)() Implements ID(Of I, A).DM
End Sub
End Class
Class D2
Implements ID(Of I, A)
Private Sub DM(Of V As {A, I})() Implements ID(Of I, A).DM
End Sub
End Class
Class D3
Implements ID(Of A, I)
Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
End Sub
End Class
Interface IE(Of T, U)
Sub EM(Of V As {T, U, Structure})()
End Interface
Class E1
Implements IE(Of Object, ValueType)
Private Sub EM(Of U As Structure)() Implements IE(Of Object, ValueType).EM
End Sub
End Class
Class E2
Implements IE(Of Object, ValueType)
Private Sub EM(Of U As {Structure, Object, ValueType})() Implements IE(Of Object, ValueType).EM
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32078: 'Private Sub AM(Of U As S)()' cannot implement 'IA(Of S).Sub AM(Of U As {Structure, S})()' because they differ by type parameter constraints.
Private Sub AM(Of U As S)() Implements IA(Of S).AM
~~~~~~~~~~~
BC32078: 'Private Sub BX(Of U As A)()' cannot implement 'IB(Of A).Sub BX(Of U As {Class, A})()' because they differ by type parameter constraints.
Private Sub BX(Of U As A)() Implements IB(Of A).BX
~~~~~~~~~~~
BC32071: Constraint type 'T' already specified for this type parameter.
Private Sub CM(Of V As {T, T})() Implements IC(Of T, T).CM
~
BC32078: 'Private Sub DM(Of V As A)()' cannot implement 'ID(Of I, A).Sub DM(Of V As {I, A})()' because they differ by type parameter constraints.
Private Sub DM(Of V As A)() Implements ID(Of I, A).DM
~~~~~~~~~~~~~~
BC32071: Constraint type 'A' already specified for this type parameter.
Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
~
BC32071: Constraint type 'I' already specified for this type parameter.
Private Sub DM(Of V As {A, I, A, I})() Implements ID(Of A, I).DM
~
BC32078: 'Private Sub EM(Of U As Structure)()' cannot implement 'IE(Of Object, ValueType).Sub EM(Of V As {Structure, Object, ValueType})()' because they differ by type parameter constraints.
Private Sub EM(Of U As Structure)() Implements IE(Of Object, ValueType).EM
~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Single method implementing multiple interface methods.
<Fact()>
Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA(Of T)
Sub AM(Of U As {T, Structure})()
End Interface
Interface IB(Of T)
Sub BX(Of U As {T, Class})()
End Interface
Class C(Of T)
Implements IA(Of T), IB(Of T)
Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32078: 'Public Sub M(Of U As T)()' cannot implement 'IA(Of T).Sub AM(Of U As {Structure, T})()' because they differ by type parameter constraints.
Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
~~~~~~~~~~~
BC32078: 'Public Sub M(Of U As T)()' cannot implement 'IB(Of T).Sub BX(Of U As {Class, T})()' because they differ by type parameter constraints.
Public Sub M(Of U As T)() Implements IA(Of T).AM, IB(Of T).BX
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Interface II
Sub m(Of T As I)()
End Interface
Class CLS
Implements II
Partial Private Sub X()
End Sub
Private Sub X(Of T)() Implements II.m
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC32078: 'Private Sub X(Of T)()' cannot implement 'II.Sub m(Of T As I)()' because they differ by type parameter constraints.
Private Sub X(Of T)() Implements II.m
~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC32078ERR_ImplementsWithConstraintMismatch3_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Interface II
Sub m(Of T As I)()
End Interface
Class CLS
Implements II
Partial Private Sub X(Of T)()
End Sub
Private Sub X(Of T)() Implements II.m
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC32078: 'Private Sub X(Of T)()' cannot implement 'II.Sub m(Of T As I)()' because they differ by type parameter constraints.
Private Sub X(Of T)() Implements II.m
~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC32080ERR_HandlesInvalidOnGenericMethod()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="HandlesInvalidOnGenericMethod">
<file name="a.vb"><![CDATA[
Class A
Event X()
Sub Goo(Of T)() Handles Me.X
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32080: Generic methods cannot use 'Handles' clause.
Sub Goo(Of T)() Handles Me.X
~~~
BC31029: Method 'Goo' cannot handle event 'X' because they do not have a compatible signature.
Sub Goo(Of T)() Handles Me.X
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32081ERR_MultipleNewConstraints()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MultipleNewConstraints">
<file name="a.vb"><![CDATA[
Imports System
Class C(Of T As {New, New})
Sub M(Of U As {New, Class, New})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
Class C(Of T As {New, New})
~~~
BC32081: 'New' constraint cannot be specified multiple times for the same type parameter.
Sub M(Of U As {New, Class, New})()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32082ERR_MustInheritForNewConstraint2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustInheritForNewConstraint2">
<file name="a.vb"><![CDATA[
Class C1(Of T)
Dim x As New C2(Of Base).C2Inner(Of Derived)
Sub New()
End Sub
End Class
Class Base
End Class
MustInherit Class Derived
Inherits Base
Public Sub New()
End Sub
End Class
Class C2(Of T As New)
Class C2Inner(Of S As {T, Derived, New})
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32082: Type argument 'Derived' is declared 'MustInherit' and does not satisfy the 'New' constraint for type parameter 'S'.
Dim x As New C2(Of Base).C2Inner(Of Derived)
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32083ERR_NoSuitableNewForNewConstraint2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoSuitableNewForNewConstraint2">
<file name="a.vb"><![CDATA[
Class [Public]
Public Sub New()
End Sub
End Class
Class [Friend]
Friend Sub New()
End Sub
End Class
Class ProtectedFriend
Protected Friend Sub New()
End Sub
End Class
Class [Protected]
Protected Sub New()
End Sub
End Class
Class [Private]
Private Sub New()
End Sub
End Class
Interface [Interface]
End Interface
Structure [Structure]
End Structure
Class C
Function F(Of T As New)() As T
Return New T
End Function
Sub M()
Dim o
o = F(Of [Public])()
o = F(Of [Friend])()
o = F(Of [ProtectedFriend])()
o = F(Of [Protected])()
o = F(Of [Private])()
o = F(Of [Interface])()
o = F(Of [Structure])()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32083: Type argument '[Friend]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = F(Of [Friend])()
~~~~~~~~~~~~~~
BC32083: Type argument 'ProtectedFriend' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = F(Of [ProtectedFriend])()
~~~~~~~~~~~~~~~~~~~~~~~
BC32083: Type argument '[Protected]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = F(Of [Protected])()
~~~~~~~~~~~~~~~~~
BC32083: Type argument '[Private]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = F(Of [Private])()
~~~~~~~~~~~~~~~
BC32083: Type argument '[Interface]' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = F(Of [Interface])()
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
' Constructors with optional and params args
' should not be considered parameterless.
<Fact()>
Public Sub BC32083ERR_NoSuitableNewForNewConstraint2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NoSuitableNewForNewConstraint2">
<file name="a.vb"><![CDATA[
Class A
Public Sub New(Optional o As Object = Nothing)
End Sub
End Class
Class B
Public Sub New(ParamArray o As Object())
End Sub
End Class
Class C(Of T As New)
Shared Sub M(Of U As New)()
Dim o
o = New A()
o = New C(Of A)()
M(Of A)()
o = New B()
o = New C(Of B)()
M(Of B)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32083: Type argument 'A' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = New C(Of A)()
~
BC32083: Type argument 'A' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'U'.
M(Of A)()
~~~~~~~
BC32083: Type argument 'B' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'T'.
o = New C(Of B)()
~
BC32083: Type argument 'B' must have a public parameterless instance constructor to satisfy the 'New' constraint for type parameter 'U'.
M(Of B)()
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32084ERR_BadGenericParamForNewConstraint2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Structure S
End Structure
Class A
Shared Sub M(Of T As New)()
End Sub
End Class
Class B(Of T)
Overridable Sub M(Of U As T)()
End Sub
Shared Sub M(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As U, U)()
A.M(Of T1)()
A.M(Of T2)()
A.M(Of T3)()
A.M(Of T4)()
A.M(Of T5)()
A.M(Of T6)()
A.M(Of T7)()
End Sub
End Class
Class CI
Inherits B(Of I)
Public Overrides Sub M(Of UI As I)()
A.M(Of UI)()
End Sub
End Class
Class CS
Inherits B(Of S)
Public Overrides Sub M(Of US As S)()
A.M(Of US)()
End Sub
End Class
Class CA
Inherits B(Of A)
Public Overrides Sub M(Of UA As A)()
A.M(Of UA)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32084: Type parameter 'T1' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of T1)()
~~~~~~~~
BC32084: Type parameter 'T2' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of T2)()
~~~~~~~~
BC32084: Type parameter 'T5' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of T5)()
~~~~~~~~
BC32084: Type parameter 'T6' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of T6)()
~~~~~~~~
BC32084: Type parameter 'T7' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of T7)()
~~~~~~~~
BC32084: Type parameter 'UI' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of UI)()
~~~~~~~~
BC32084: Type parameter 'UA' must have either a 'New' constraint or a 'Structure' constraint to satisfy the 'New' constraint for type parameter 'T'.
A.M(Of UA)()
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32086ERR_DuplicateRawGenericTypeImport1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="DuplicateRawGenericTypeImport1">
<file name="a.vb"><![CDATA[
Imports ns1.c1(Of String)
Imports ns1.c1(Of Integer)
Namespace ns1
Public Class c1(Of t)
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32086: Generic type 'c1(Of t)' cannot be imported more than once.
Imports ns1.c1(Of Integer)
~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32089ERR_NameSameAsMethodTypeParam1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NameSameAsMethodTypeParam1">
<file name="a.vb"><![CDATA[
Class c1
Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
Return 5
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32089: 't1' is already declared as a type parameter of this method.
Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
~~
BC32089: 't2' is already declared as a type parameter of this method.
Function fun(Of T1, T2) (ByVal t1 As T1, ByVal t2 As T2) As Integer
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32089ERR_NameSameAsMethodTypeParam1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NameSameAsMethodTypeParam1">
<file name="a.vb"><![CDATA[
Class c1
Sub sub1(Of T1, T2 As T1) (ByVal p1 As T1, ByVal t2 As T2)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32089: 't2' is already declared as a type parameter of this method.
Sub sub1(Of T1, T2 As T1) (ByVal p1 As T1, ByVal t2 As T2)
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(543642, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543642")>
Public Sub BC32090ERR_TypeParamNameFunctionNameCollision()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TypeParamNameFunctionNameCollision">
<file name="a.vb"><![CDATA[
Module M
Function Goo(Of Goo)()
Return Nothing
End Function
' Allowed for Sub -- should not generate error below.
Sub Bar(Of Bar)()
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32090: Type parameter cannot have the same name as its defining function.
Function Goo(Of Goo)()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32101ERR_MultipleReferenceConstraints()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As {Class, Class})
Sub M(Of U As {Class, New, Class})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32101: 'Class' constraint cannot be specified multiple times for the same type parameter.
Class C(Of T As {Class, Class})
~~~~~
BC32101: 'Class' constraint cannot be specified multiple times for the same type parameter.
Sub M(Of U As {Class, New, Class})()
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32102ERR_MultipleValueConstraints()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Class C(Of T As {Structure, Structure})
Sub M(Of U As {Structure, I, Structure})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32102: 'Structure' constraint cannot be specified multiple times for the same type parameter.
Class C(Of T As {Structure, Structure})
~~~~~~~~~
BC32102: 'Structure' constraint cannot be specified multiple times for the same type parameter.
Sub M(Of U As {Structure, I, Structure})()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32103ERR_NewAndValueConstraintsCombined()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As {Structure, New})
Sub M(Of U As {New, Structure})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32103: 'New' constraint and 'Structure' constraint cannot be combined.
Class C(Of T As {Structure, New})
~~~
BC32103: 'New' constraint and 'Structure' constraint cannot be combined.
Sub M(Of U As {New, Structure})()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32104ERR_RefAndValueConstraintsCombined()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As {Structure, Class})
Sub M(Of U As {Class, Structure})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32104: 'Class' constraint and 'Structure' constraint cannot be combined.
Class C(Of T As {Structure, Class})
~~~~~
BC32104: 'Class' constraint and 'Structure' constraint cannot be combined.
Sub M(Of U As {Class, Structure})()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32105ERR_BadTypeArgForStructConstraint2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Class B(Of T As Structure)
End Class
Class C
Shared Sub F(Of U As Structure)()
End Sub
Shared Sub M1(Of T1)()
Dim o = New B(Of T1)()
F(Of T1)()
End Sub
Shared Sub M2(Of T2 As Class)()
Dim o = New B(Of T2)()
F(Of T2)()
End Sub
Shared Sub M3(Of T3 As Structure)()
Dim o = New B(Of T3)()
F(Of T3)()
End Sub
Shared Sub M4(Of T4 As New)()
Dim o = New B(Of T4)()
F(Of T4)()
End Sub
Shared Sub M5(Of T5 As I)()
Dim o = New B(Of T5)()
F(Of T5)()
End Sub
Shared Sub M6(Of T6 As A)()
Dim o = New B(Of T6)()
F(Of T6)()
End Sub
Shared Sub M7(Of T7 As U, U)()
Dim o = New B(Of T7)()
F(Of T7)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'T1' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T1)()
~~
BC32105: Type argument 'T1' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T1)()
~~~~~~~~
BC32105: Type argument 'T2' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T2)()
~~
BC32105: Type argument 'T2' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T2)()
~~~~~~~~
BC32105: Type argument 'T4' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T4)()
~~
BC32105: Type argument 'T4' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T4)()
~~~~~~~~
BC32105: Type argument 'T5' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T5)()
~~
BC32105: Type argument 'T5' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T5)()
~~~~~~~~
BC32105: Type argument 'T6' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T6)()
~~
BC32105: Type argument 'T6' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T6)()
~~~~~~~~
BC32105: Type argument 'T7' does not satisfy the 'Structure' constraint for type parameter 'T'.
Dim o = New B(Of T7)()
~~
BC32105: Type argument 'T7' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of T7)()
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32105ERR_BadTypeArgForStructConstraint2_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C
Shared Sub F(Of T As Structure, U As Structure)(a As T, b As U)
End Sub
Shared Sub M(a As Integer, b As Object)
F(b, a)
F(a, b)
F(Of Integer, Object)(a, b)
End Sub
End Class
]]></file>
</compilation>)
' TODO: Dev10 highlights the first type parameter or argument that
' violates a generic method constraint, not the entire expression.
Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
F(b, a)
~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(a, b)
~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
F(Of Integer, Object)(a, b)
~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32105ERR_BadTypeArgForStructConstraint2_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports N.A(Of Object).B(Of String)
Imports C = N.A(Of Object).B(Of String)
Namespace N
Class A(Of T As Structure)
Friend Class B(Of U As Structure)
End Class
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
Imports N.A(Of Object).B(Of String)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32105: Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
Imports N.A(Of Object).B(Of String)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32105: Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
Imports C = N.A(Of Object).B(Of String)
~
BC32105: Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
Imports C = N.A(Of Object).B(Of String)
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32105ERR_BadTypeArgForStructConstraint2_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I(Of T As Structure)
Sub M(Of U As I(Of U))()
End Interface
Class A(Of T As Structure)
Friend Interface I
End Interface
End Class
Class B(Of T As I(Of T), U As A(Of U).I)
Sub M(Of V As A(Of V).I)()
End Sub
End Class
]]></file>
</compilation>)
' TODO: Dev10 reports errors on the type argument violating the
' constraint rather than the type with type argument (reporting
' error in U in I(Of U) rather than entire I(Of U) for instance).
Dim expectedErrors1 = <errors><![CDATA[
BC32105: Type argument 'U' does not satisfy the 'Structure' constraint for type parameter 'T'.
Sub M(Of U As I(Of U))()
~~~~~~~
BC32105: Type argument 'T' does not satisfy the 'Structure' constraint for type parameter 'T'.
Class B(Of T As I(Of T), U As A(Of U).I)
~~~~~~~
BC32105: Type argument 'U' does not satisfy the 'Structure' constraint for type parameter 'T'.
Class B(Of T As I(Of T), U As A(Of U).I)
~~~~~~~~~
BC32105: Type argument 'V' does not satisfy the 'Structure' constraint for type parameter 'T'.
Sub M(Of V As A(Of V).I)()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32105ERR_BadTypeArgForStructConstraint2_4()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"N.A(Of Object).B(Of String)", "C=N.A(Of N.B).B(Of Object)"}))
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Class A(Of T As Structure)
Friend Class B(Of U As Structure)
End Class
End Class
Class B
End Class
End Namespace
]]></file>
</compilation>, options)
Dim expectedErrors = <errors><![CDATA[
BC32105: Error in project-level import 'C=N.A(Of N.B).B(Of Object)' at 'C=N.A(Of N.B).B(Of Object)' : Type argument 'B' does not satisfy the 'Structure' constraint for type parameter 'T'.
BC32105: Error in project-level import 'C=N.A(Of N.B).B(Of Object)' at 'C=N.A(Of N.B).B(Of Object)' : Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'U'.
BC32105: Error in project-level import 'N.A(Of Object).B(Of String)' at 'N.A(Of Object).B(Of String)' : Type argument 'Object' does not satisfy the 'Structure' constraint for type parameter 'T'.
BC32105: Error in project-level import 'N.A(Of Object).B(Of String)' at 'N.A(Of Object).B(Of String)' : Type argument 'String' does not satisfy the 'Structure' constraint for type parameter 'U'.
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BC32106ERR_BadTypeArgForRefConstraint2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I
End Interface
Class A
End Class
Class B(Of T As Class)
End Class
Class C
Shared Sub F(Of T As Class)()
End Sub
Shared Sub M1(Of T1)()
Dim o = New B(Of T1)()
F(Of T1)()
End Sub
Shared Sub M2(Of T2 As Class)()
Dim o = New B(Of T2)()
F(Of T2)()
End Sub
Shared Sub M3(Of T3 As Structure)()
Dim o = New B(Of T3)()
F(Of T3)()
End Sub
Shared Sub M4(Of T4 As New)()
Dim o = New B(Of T4)()
F(Of T4)()
End Sub
Shared Sub M5(Of T5 As I)()
Dim o = New B(Of T5)()
F(Of T5)()
End Sub
Shared Sub M6(Of T6 As A)()
Dim o = New B(Of T6)()
F(Of T6)()
End Sub
Shared Sub M7(Of T7 As U, U)()
Dim o = New B(Of T7)()
F(Of T7)()
End Sub
Shared Sub M8()
Dim o = New B(Of Integer?)()
F(Of Integer?)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32106: Type argument 'T1' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of T1)()
~~
BC32106: Type argument 'T1' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of T1)()
~~~~~~~~
BC32106: Type argument 'T3' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of T3)()
~~
BC32106: Type argument 'T3' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of T3)()
~~~~~~~~
BC32106: Type argument 'T4' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of T4)()
~~
BC32106: Type argument 'T4' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of T4)()
~~~~~~~~
BC32106: Type argument 'T5' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of T5)()
~~
BC32106: Type argument 'T5' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of T5)()
~~~~~~~~
BC32106: Type argument 'T7' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of T7)()
~~
BC32106: Type argument 'T7' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of T7)()
~~~~~~~~
BC32106: Type argument 'Integer?' does not satisfy the 'Class' constraint for type parameter 'T'.
Dim o = New B(Of Integer?)()
~~~~~~~~
BC32106: Type argument 'Integer?' does not satisfy the 'Class' constraint for type parameter 'T'.
F(Of Integer?)()
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32107ERR_RefAndClassTypeConstrCombined()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
Inherits A
End Class
Interface IA(Of T, U As {A, T, Class})
End Interface
Interface IB
Sub M(Of T, U As {T, Class, A})()
End Interface
MustInherit Class C(Of T, U)
MustOverride Sub M(Of V As {T, Class, U})()
End Class
MustInherit Class D
Inherits C(Of A, B)
Public Overrides Sub M(Of V As {A, Class, B})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32107: 'Class' constraint and a specific class type constraint cannot be combined.
Interface IA(Of T, U As {A, T, Class})
~~~~~
BC32107: 'Class' constraint and a specific class type constraint cannot be combined.
Sub M(Of T, U As {T, Class, A})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32108ERR_ValueAndClassTypeConstrCombined()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
Inherits A
End Class
Interface IA(Of T, U As {A, T, Structure})
End Interface
Interface IB
Sub M(Of T, U As {T, Structure, A})()
End Interface
MustInherit Class C(Of T, U)
MustOverride Sub M(Of V As {T, Structure, U})()
End Class
MustInherit Class D
Inherits C(Of A, B)
Public Overrides Sub M(Of V As {A, Structure, B})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32108: 'Structure' constraint and a specific class type constraint cannot be combined.
Interface IA(Of T, U As {A, T, Structure})
~~~~~~~~~
BC32108: 'Structure' constraint and a specific class type constraint cannot be combined.
Sub M(Of T, U As {T, Structure, A})()
~
BC32119: Constraint 'Structure' conflicts with the constraint 'Class A' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {A, Structure, B})()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32109ERR_ConstraintClashIndirectIndirect4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
End Interface
Interface IB(Of T1 As A, T2 As B)
Sub M1(Of T3 As {T1, T2})()
Sub M2(Of T3 As {T2, T1})()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'U' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T'.
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
~
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'V' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T'.
Interface IA(Of T As A, U As B, V As U, W As {T, U, V})
~
BC32109: Indirect constraint 'Class B' obtained from the type parameter constraint 'T2' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
Sub M1(Of T3 As {T1, T2})()
~~
BC32109: Indirect constraint 'Class A' obtained from the type parameter constraint 'T1' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
Sub M2(Of T3 As {T2, T1})()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32110ERR_ConstraintClashDirectIndirect3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
End Interface
Interface IB(Of T1 As A)
Sub M(Of T2, T3 As {T2, B, T1})()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Structure' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
~~~~~~~~~
BC32110: Constraint 'Structure' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
Interface IA(Of T1 As A, T2 As B, T3 As {Structure, T1, T2})
~~~~~~~~~
BC32110: Constraint 'Class B' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
Sub M(Of T2, T3 As {T2, B, T1})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32110ERR_ConstraintClashDirectIndirect3_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Class C
End Class
Class D(Of T1 As A, T2 As B)
Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Class C' conflicts with the indirect constraint 'Class A' obtained from the type parameter constraint 'T1'.
Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
~
BC32110: Constraint 'Class C' conflicts with the indirect constraint 'Class B' obtained from the type parameter constraint 'T2'.
Sub M(Of U1 As T1, U2 As T2, V As {C, T1, T2})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32110ERR_ConstraintClashDirectIndirect3_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Enum E
A
End Enum
MustInherit Class A(Of T1, T2)
MustOverride Sub M(Of U1 As T1, U2 As {T2, U1})()
End Class
Class B0
Inherits A(Of Integer, Integer)
Public Overrides Sub M(Of U1 As Integer, U2 As {Integer, U1})()
End Sub
End Class
Class B1
Inherits A(Of Integer, Object)
Public Overrides Sub M(Of U1 As Integer, U2 As {Object, U1})()
End Sub
End Class
Class B2
Inherits A(Of Integer, Short)
Public Overrides Sub M(Of U1 As Integer, U2 As {Short, U1})()
End Sub
End Class
Class B3
Inherits A(Of Integer, Long)
Public Overrides Sub M(Of U1 As Integer, U2 As {Long, U1})()
End Sub
End Class
Class B4
Inherits A(Of Integer, UInteger)
Public Overrides Sub M(Of U1 As Integer, U2 As {UInteger, U1})()
End Sub
End Class
Class B5
Inherits A(Of Integer, E)
Public Overrides Sub M(Of U1 As Integer, U2 As {E, U1})()
End Sub
End Class
Class C0
Inherits A(Of Object(), Object())
Public Overrides Sub M(Of U1 As Object(), U2 As {Object(), U1})()
End Sub
End Class
Class C1
Inherits A(Of Object(), String())
Public Overrides Sub M(Of U1 As Object(), U2 As {String(), U1})()
End Sub
End Class
Class C2
Inherits A(Of Integer(), Integer())
Public Overrides Sub M(Of U1 As Integer(), U2 As {Integer(), U1})()
End Sub
End Class
Class C3
Inherits A(Of Integer(), E())
Public Overrides Sub M(Of U1 As Integer(), U2 As {E(), U1})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32110: Constraint 'Short' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
Public Overrides Sub M(Of U1 As Integer, U2 As {Short, U1})()
~~~~~
BC32110: Constraint 'Long' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
Public Overrides Sub M(Of U1 As Integer, U2 As {Long, U1})()
~~~~
BC32110: Constraint 'UInteger' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
Public Overrides Sub M(Of U1 As Integer, U2 As {UInteger, U1})()
~~~~~~~~
BC32110: Constraint 'Enum E' conflicts with the indirect constraint 'Integer' obtained from the type parameter constraint 'U1'.
Public Overrides Sub M(Of U1 As Integer, U2 As {E, U1})()
~
BC32110: Constraint 'E()' conflicts with the indirect constraint 'Integer()' obtained from the type parameter constraint 'U1'.
Public Overrides Sub M(Of U1 As Integer(), U2 As {E(), U1})()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32111ERR_ConstraintClashIndirectDirect3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
Class C
End Class
Interface IA(Of T As A, U As {T, Structure})
End Interface
Interface IB(Of T1 As A)
Sub M(Of T2, T3 As {T2, T1, B})()
End Interface
MustInherit Class D(Of T1, T2)
MustOverride Sub M(Of U As C, V As {U, T1, T2})()
End Class
Class E
Inherits D(Of A, B)
Public Overrides Sub M(Of U As C, V As {U, A, B})()
End Sub
End Class
]]></file>
</compilation>)
' Note: Dev10 never seems to generate BC32111. Instead, Dev10 generates
' BC32110 in the following cases, which is essentially the same error
' with arguments reordered, but with the other constraint highlighted.
Dim expectedErrors1 = <errors><![CDATA[
BC32111: Indirect constraint 'Class A' obtained from the type parameter constraint 'T' conflicts with the constraint 'Structure'.
Interface IA(Of T As A, U As {T, Structure})
~
BC32111: Indirect constraint 'Class A' obtained from the type parameter constraint 'T1' conflicts with the constraint 'Class B'.
Sub M(Of T2, T3 As {T2, T1, B})()
~~
BC32111: Indirect constraint 'Class C' obtained from the type parameter constraint 'U' conflicts with the constraint 'Class A'.
Public Overrides Sub M(Of U As C, V As {U, A, B})()
~
BC32111: Indirect constraint 'Class C' obtained from the type parameter constraint 'U' conflicts with the constraint 'Class B'.
Public Overrides Sub M(Of U As C, V As {U, A, B})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32113ERR_ConstraintCycle2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ConstraintCycle2">
<file name="a.vb"><![CDATA[
Class A(Of T1 As T2, T2 As T3, T3 As T4, T4 As T1)
End Class
Class B
Sub M(Of T As T)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32113: Type parameter 'T1' cannot be constrained to itself:
'T1' is constrained to 'T2'.
'T2' is constrained to 'T3'.
'T3' is constrained to 'T4'.
'T4' is constrained to 'T1'.
Class A(Of T1 As T2, T2 As T3, T3 As T4, T4 As T1)
~~
BC32113: Type parameter 'T' cannot be constrained to itself:
'T' is constrained to 'T'.
Sub M(Of T As T)()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32114ERR_TypeParamWithStructConstAsConst()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeParamWithStructConstAsConst">
<file name="a.vb"><![CDATA[
Interface I
End Interface
Interface IA(Of T As Structure, U As V, V As {T, New})
End Interface
Interface IB
Sub M(Of T As U, U As {I, V}, V As {I, Structure})()
End Interface
Interface IC(Of T1 As {I, Structure})
Sub M(Of T2 As T3, T3 As T1)()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
Interface IA(Of T As Structure, U As V, V As {T, New})
~
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
Sub M(Of T As U, U As {I, V}, V As {I, Structure})()
~
BC32114: Type parameter with a 'Structure' constraint cannot be used as a constraint.
Sub M(Of T2 As T3, T3 As T1)()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32115ERR_NullableDisallowedForStructConstr1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class C
Shared Sub M()
Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim n1? As Nullable(Of Integer) = New Nullable(Of Nullable(Of Integer))
~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
~~~~~~~~~~~~~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim n2 As Nullable(Of Integer)? = New Nullable(Of Integer)?
~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32115ERR_NullableDisallowedForStructConstr1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As Structure)
Shared Sub F(Of U As Structure)()
End Sub
Shared Sub M()
Dim o = New C(Of Integer?)()
F(Of T?)()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o = New C(Of Integer?)()
~~~~~~~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'U'. Only non-nullable 'Structure' types are allowed.
F(Of T?)()
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32115ERR_NullableDisallowedForStructConstr1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class C(Of T As Structure)
Shared Sub F(Of U As Structure)()
End Sub
Shared Function M() As System.Action
Return AddressOf F(Of T?)
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'U'. Only non-nullable 'Structure' types are allowed.
Return AddressOf F(Of T?)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32115ERR_NullableDisallowedForStructConstr1_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Structure S
End Structure
MustInherit Class A(Of T)
Friend MustOverride Sub M(Of U As T)()
End Class
Class B
Inherits A(Of S?)
Friend Overrides Sub M(Of U As S?)()
Dim o1? As U
Dim o2 As Nullable(Of U) = New Nullable(Of U)
Dim o3 As U? = New U?
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'o1'.
Dim o1? As U
~~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o1? As U
~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o2 As Nullable(Of U) = New Nullable(Of U)
~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o2 As Nullable(Of U) = New Nullable(Of U)
~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o3 As U? = New U?
~
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim o3 As U? = New U?
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32117ERR_NoAccessibleNonGeneric1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoAccessibleNonGeneric1">
<file name="a.vb"><![CDATA[
Module M1
Dim x As New C1.C2
End Module
Public Class C1
Public Class C2(Of T)
End Class
Public Class C2(Of U, V)
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'C1.C2(Of T)'.
Dim x As New C1.C2
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32118ERR_NoAccessibleGeneric1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NoAccessibleGeneric1">
<file name="a.vb"><![CDATA[
Module M1
Dim x As New C1(Of Object).C2(Of SByte, Byte)
End Module
Public Class C1
Public Class C2(Of T)
End Class
Public Class C2(Of U, V)
End Class
End Class
Public Class C1(Of T)
Public Class C2
End Class
Public Class C2(Of X)
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32045: 'C1(Of Object).C2' has no type parameters and so cannot have type arguments.
Dim x As New C1(Of Object).C2(Of SByte, Byte)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32119ERR_ConflictingDirectConstraints3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A(Of T1, T2, T3)
MustOverride Sub M(Of U As {T1, T2, T3, Structure})()
End Class
Class B
Inherits A(Of C1, C2, C3)
Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
End Sub
End Class
Class C1
End Class
Class C2
End Class
Class C3
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Class C2' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
~~
BC32119: Constraint 'Class C3' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
~~
BC32119: Constraint 'Structure' conflicts with the constraint 'Class C1' already specified for type parameter 'U'.
Public Overrides Sub M(Of U As {C1, C2, C3, Structure})()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32119ERR_ConflictingDirectConstraints3_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
End Class
Class B
End Class
MustInherit Class C(Of T1, T2)
MustOverride Sub M(Of U As {T1, T2})()
End Class
Class D
Inherits C(Of A, B)
Public Overrides Sub M(Of U As {A, B})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Class B' conflicts with the constraint 'Class A' already specified for type parameter 'U'.
Public Overrides Sub M(Of U As {A, B})()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32119ERR_ConflictingDirectConstraints3_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Enum E
A
End Enum
MustInherit Class A(Of T, U)
MustOverride Sub M(Of V As {T, U})()
End Class
Class B0
Inherits A(Of Integer, Integer)
Public Overrides Sub M(Of V As {Integer})()
End Sub
End Class
Class B1
Inherits A(Of Integer, Object)
Public Overrides Sub M(Of V As {Integer, Object})()
End Sub
End Class
Class B2
Inherits A(Of Integer, Short)
Public Overrides Sub M(Of V As {Integer, Short})()
End Sub
End Class
Class B3
Inherits A(Of Integer, Long)
Public Overrides Sub M(Of V As {Integer, Long})()
End Sub
End Class
Class B4
Inherits A(Of Integer, UInteger)
Public Overrides Sub M(Of V As {Integer, UInteger})()
End Sub
End Class
Class B5
Inherits A(Of Integer, E)
Public Overrides Sub M(Of V As {Integer, E})()
End Sub
End Class
Class C0
Inherits A(Of Object(), Object())
Public Overrides Sub M(Of V As {Object()})()
End Sub
End Class
Class C1
Inherits A(Of Object(), String())
Public Overrides Sub M(Of V As {Object(), String()})()
End Sub
End Class
Class C2
Inherits A(Of Integer(), Integer())
Public Overrides Sub M(Of V As {Integer()})()
End Sub
End Class
Class C3
Inherits A(Of Integer(), E())
Public Overrides Sub M(Of V As {Integer(), E()})()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32119: Constraint 'Short' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {Integer, Short})()
~~~~~
BC32119: Constraint 'Long' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {Integer, Long})()
~~~~
BC32119: Constraint 'UInteger' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {Integer, UInteger})()
~~~~~~~~
BC32119: Constraint 'Enum E' conflicts with the constraint 'Integer' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {Integer, E})()
~
BC32119: Constraint 'E()' conflicts with the constraint 'Integer()' already specified for type parameter 'V'.
Public Overrides Sub M(Of V As {Integer(), E()})()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543643, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543643")>
Public Sub BC32120ERR_InterfaceUnifiesWithInterface2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceUnifiesWithInterface2">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
End Interface
Public Interface derivedInterface(Of t1, t2)
Inherits interfaceA(Of t1), interfaceA(Of t2)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32120: Cannot inherit interface 'interfaceA(Of t2)' because it could be identical to interface 'interfaceA(Of t1)' for some type arguments.
Inherits interfaceA(Of t1), interfaceA(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(1042692, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1042692")>
<Fact()>
Public Sub BC32120ERR_InterfaceUnifiesWithInterface2_SubstituteWithOtherTypeParameter()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA(Of T, U)
End Interface
Interface IB(Of T, U)
Inherits IA(Of U, Object), IA(Of T, U)
End Interface
]]></file>
</compilation>)
compilation1.AssertTheseDeclarationDiagnostics(
<errors><![CDATA[
BC32120: Cannot inherit interface 'IA(Of T, U)' because it could be identical to interface 'IA(Of U, Object)' for some type arguments.
Inherits IA(Of U, Object), IA(Of T, U)
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact(), WorkItem(543726, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543726")>
Public Sub BC32121ERR_BaseUnifiesWithInterfaces3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BaseUnifiesWithInterfaces3">
<file name="a.vb"><![CDATA[
Interface I1(Of T)
Sub goo(Of G As T)(ByVal x As G)
End Interface
Interface I2(Of T)
Inherits I1(Of T)
End Interface
Interface I02(Of T, G)
Inherits I1(Of T), I2(Of G)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32121: Cannot inherit interface 'I2(Of G)' because the interface 'I1(Of G)' from which it inherits could be identical to interface 'I1(Of T)' for some type arguments.
Inherits I1(Of T), I2(Of G)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543727")>
Public Sub BC32122ERR_InterfaceBaseUnifiesWithBase4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceBaseUnifiesWithBase4">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
End Interface
Public Interface interfaceX(Of v)
Inherits interfaceA(Of v)
End Interface
Public Interface interfaceY(Of w)
Inherits interfaceA(Of w)
End Interface
Public Interface derivedInterface(Of t1, t2)
Inherits interfaceX(Of t1), interfaceY(Of t2)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32122: Cannot inherit interface 'interfaceY(Of t2)' because the interface 'interfaceA(Of t2)' from which it inherits could be identical to interface 'interfaceA(Of t1)' from which the interface 'interfaceX(Of t1)' inherits for some type arguments.
Inherits interfaceX(Of t1), interfaceY(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543729, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543729")>
Public Sub BC32123ERR_InterfaceUnifiesWithBase3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceUnifiesWithBase3">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
Inherits interfaceX(Of u)
End Interface
Public Interface interfaceX(Of v)
End Interface
Public Interface derivedInterface(Of t1, t2)
Inherits interfaceA(Of t1), interfaceX(Of t2)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32123: Cannot inherit interface 'interfaceX(Of t2)' because it could be identical to interface 'interfaceX(Of t1)' from which the interface 'interfaceA(Of t1)' inherits for some type arguments.
Inherits interfaceA(Of t1), interfaceX(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543643, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543643")>
Public Sub BC32072ERR_InterfacePossiblyImplTwice2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfacePossiblyImplTwice2">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
End Interface
Public Class derivedClass(Of t1, t2)
Implements interfaceA(Of t1), interfaceA(Of t2)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32072: Cannot implement interface 'interfaceA(Of t2)' because its implementation could conflict with the implementation of another implemented interface 'interfaceA(Of t1)' for some type arguments.
Implements interfaceA(Of t1), interfaceA(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543726, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543726")>
Public Sub BC32131ERR_ClassInheritsBaseUnifiesWithInterfaces3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClassInheritsBaseUnifiesWithInterfaces3">
<file name="a.vb"><![CDATA[
Interface I1(Of T)
End Interface
Interface I2(Of T)
Inherits I1(Of T)
End Interface
Class I02(Of T, G)
Implements I1(Of T), I2(Of G)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32131: Cannot implement interface 'I2(Of G)' because the interface 'I1(Of G)' from which it inherits could be identical to implemented interface 'I1(Of T)' for some type arguments.
Implements I1(Of T), I2(Of G)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543727")>
Public Sub BC32132ERR_ClassInheritsInterfaceBaseUnifiesWithBase4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClassInheritsInterfaceBaseUnifiesWithBase4">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
End Interface
Public Interface interfaceX(Of v)
Inherits interfaceA(Of v)
End Interface
Public Interface interfaceY(Of w)
Inherits interfaceA(Of w)
End Interface
Public Class derivedClass(Of t1, t2)
Implements interfaceX(Of t1), interfaceY(Of t2)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32132: Cannot implement interface 'interfaceY(Of t2)' because the interface 'interfaceA(Of t2)' from which it inherits could be identical to interface 'interfaceA(Of t1)' from which the implemented interface 'interfaceX(Of t1)' inherits for some type arguments.
Implements interfaceX(Of t1), interfaceY(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543729, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543729")>
Public Sub BC32133ERR_ClassInheritsInterfaceUnifiesWithBase3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClassInheritsInterfaceUnifiesWithBase3">
<file name="a.vb"><![CDATA[
Public Interface interfaceA(Of u)
Inherits interfaceX(Of u)
End Interface
Public Interface interfaceX(Of v)
End Interface
Public Class derivedClass(Of t1, t2)
Implements interfaceA(Of t1), interfaceX(Of t2)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32133: Cannot implement interface 'interfaceX(Of t2)' because it could be identical to interface 'interfaceX(Of t1)' from which the implemented interface 'interfaceA(Of t1)' inherits for some type arguments.
Implements interfaceA(Of t1), interfaceX(Of t2)
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32125ERR_InterfaceMethodImplsUnify3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InterfaceMethodImplsUnify3">
<file name="a.vb"><![CDATA[
Public Interface iFace1(Of t)
Sub testSub()
End Interface
Public Interface iFace2(Of u)
Inherits iFace1(Of u)
End Interface
Public Class testClass(Of y, z)
Implements iFace1(Of y), iFace2(Of z)
Public Sub testSuby() Implements iFace1(Of y).testSub
End Sub
Public Sub testSubz() Implements iFace1(Of z).testSub
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32131: Cannot implement interface 'iFace2(Of z)' because the interface 'iFace1(Of z)' from which it inherits could be identical to implemented interface 'iFace1(Of y)' for some type arguments.
Implements iFace1(Of y), iFace2(Of z)
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32200ERR_ShadowingTypeOutsideClass1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ShadowingTypeOutsideClass1">
<file name="a.vb"><![CDATA[
Public Shadows Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32200: 'C1' cannot be declared 'Shadows' outside of a class, structure, or interface.
Public Shadows Class C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32201ERR_PropertySetParamCollisionWithValue()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PropertySetParamCollisionWithValue">
<file name="a.vb"><![CDATA[
Interface IA
ReadOnly Property Goo(ByVal value As String) As String
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32201: Property parameters cannot have the name 'Value'.
ReadOnly Property Goo(ByVal value As String) As String
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32201ERR_PropertySetParamCollisionWithValue_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="PropertySetParamCollisionWithValue">
<file name="a.vb"><![CDATA[
Structure S
Property P(Index, Value)
Get
Return Nothing
End Get
Set(value)
End Set
End Property
End Structure
Class C
WriteOnly Property P(value)
Set(val)
End Set
End Property
ReadOnly Property Value(Value)
Get
Return Nothing
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32201: Property parameters cannot have the name 'Value'.
Property P(Index, Value)
~~~~~
BC32201: Property parameters cannot have the name 'Value'.
WriteOnly Property P(value)
~~~~~
BC32201: Property parameters cannot have the name 'Value'.
ReadOnly Property Value(Value)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC32205ERR_WithEventsNameTooLong()
Dim witheventname = New String("A"c, 1020)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb">
Option Strict On
Imports System
Module Program
' Declare a WithEvents variable.
Dim WithEvents <%= witheventname %> As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
<%= witheventname %>.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles <%= witheventname %>.XEvent, <%= witheventname %>.YEvent
Console.WriteLine("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
End Module
</file>
</compilation>)
Dim squiggle As New String("~"c, witheventname.Length())
Dim expectedErrors1 = <errors>
BC37220: Name 'get_<%= witheventname %>' exceeds the maximum length allowed in metadata.
Dim WithEvents <%= witheventname %> As New EventClass
<%= squiggle %>
BC37220: Name 'set_<%= witheventname %>' exceeds the maximum length allowed in metadata.
Dim WithEvents <%= witheventname %> As New EventClass
<%= squiggle %>
</errors>
CompilationUtils.AssertNoDeclarationDiagnostics(compilation1)
CompilationUtils.AssertTheseEmitDiagnostics(compilation1, expectedErrors1)
End Sub
' BC32206ERR_SxSIndirectRefHigherThanDirectRef1: See ReferenceManagerTests.ReferenceBinding_SymbolUsed
' BC32208ERR_DuplicateReference2: See ReferenceManagerTests.BC32208ERR_DuplicateReference2
' BC32208ERR_DuplicateReference2_2: See ReferenceManagerTests.BC32208ERR_DuplicateReference2_2
<Fact()>
Public Sub BC32501ERR_ComClassAndReservedAttribute1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassAndReservedAttribute1">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
<ComClass("287E43DD-5282-452C-91AF-8F1B34290CA3"), System.Runtime.InteropServices.ComSourceInterfaces(GetType(a), GetType(a))> _
Public Class c
Public Sub GOO()
End Sub
End Class
Public Interface a
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32501: 'Microsoft.VisualBasic.ComClassAttribute' and 'ComSourceInterfacesAttribute' cannot both be applied to the same class.
Public Class c
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32504ERR_ComClassRequiresPublicClass2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassRequiresPublicClass2">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
Class C
Protected Class C1
<ComClass()>
Class C2
End Class
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32504: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to 'C2' because its container 'C1' is not declared 'Public'.
Class C2
~~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C2' but 'C2' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
Class C2
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32507ERR_ComClassDuplicateGuids1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassDuplicateGuids1">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
<ComClass("22904D63-46C2-47b6-97A7-8970D8EC789A", "22904D63-46C2-47b6-97A7-8970D8EC789A", "22904D63-46C2-47b6-97A7-8970D8EC789A")>
Public Class Class11
Sub test()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32507: 'InterfaceId' and 'EventsId' parameters for 'Microsoft.VisualBasic.ComClassAttribute' on 'Class11' cannot have the same value.
Public Class Class11
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32508ERR_ComClassCantBeAbstract0()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassCantBeAbstract0">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
<ComClass()>
Public MustInherit Class C
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32508: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to a class that is declared 'MustInherit'.
Public MustInherit Class C
~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C' but 'C' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
Public MustInherit Class C
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC32509ERR_ComClassRequiresPublicClass1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassRequiresPublicClass1">
<file name="a.vb"><![CDATA[
Imports Microsoft.VisualBasic
Class C
<ComClass()>
Protected Class C1
End Class
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32509: 'Microsoft.VisualBasic.ComClassAttribute' cannot be applied to 'C1' because it is not declared 'Public'.
Protected Class C1
~~
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C1' but 'C1' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
Protected Class C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC33009ERR_ParamArrayIllegal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ParamArrayIllegal1">
<file name="a.vb"><![CDATA[
Class C1
Delegate Sub Goo(ByVal ParamArray args() As String)
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC33009: 'Delegate' parameters cannot be declared 'ParamArray'.
Delegate Sub Goo(ByVal ParamArray args() As String)
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33010ERR_OptionalIllegal1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OptionalIllegal1">
<file name="a.vb"><![CDATA[
Class C1
Event E(Optional ByVal z As String = "")
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC33010: 'Event' parameters cannot be declared 'Optional'.
Event E(Optional ByVal z As String = "")
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33011ERR_OperatorMustBePublic()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OperatorMustBePublic">
<file name="a.vb"><![CDATA[
Public Structure S1
Private Shared Operator IsFalse(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorMustBePublic, "Private").WithArguments("Private"))
End Sub
<Fact()>
Public Sub BC33012ERR_OperatorMustBeShared()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OperatorMustBeShared">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Operator IsFalse(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorMustBeShared, "IsFalse"))
End Sub
<Fact()>
Public Sub BC33013ERR_BadOperatorFlags1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BadOperatorFlags1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Overridable Shared Operator IsFalse(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BadOperatorFlags1, "Overridable").WithArguments("Overridable"))
End Sub
<Fact()>
Public Sub BC33014ERR_OneParameterRequired1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OneParameterRequired1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator IsFalse(ByVal z As S1, ByVal x As S1) As Boolean
Dim b As Boolean
Return b
End Operator
Public Shared Operator IsTrue(ByVal z As S1, ByVal x As S1) As Boolean
Dim b As Boolean
Return b
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_OneParameterRequired1, "IsFalse").WithArguments("IsFalse"),
Diagnostic(ERRID.ERR_OneParameterRequired1, "IsTrue").WithArguments("IsTrue"))
End Sub
<Fact()>
Public Sub BC33015ERR_TwoParametersRequired1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="TwoParametersRequired1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator And(ByVal x As S1) As S1
Dim r As New S1
Return r
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_TwoParametersRequired1, "And").WithArguments("And"))
End Sub
' Roslyn extra errors
<Fact()>
Public Sub BC33016ERR_OneOrTwoParametersRequired1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OneOrTwoParametersRequired1">
<file name="a.vb"><![CDATA[
Public Class C1
Public Shared Operator +
(ByVal p1 As C1, ByVal p2 As Integer) As Integer
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_ExpectedLparen, ""),
Diagnostic(ERRID.ERR_ExpectedRparen, ""),
Diagnostic(ERRID.ERR_Syntax, "("),
Diagnostic(ERRID.ERR_OneOrTwoParametersRequired1, "+").WithArguments("+"),
Diagnostic(ERRID.WRN_DefAsgNoRetValOpRef1, "End Operator").WithArguments("+"))
' Dim expectedErrors1 = <errors><![CDATA[
'BC30199: '(' expected.
' Public Shared Operator +
' ~
'BC33016: Operator '+' must have either one or two parameters.
' Public Shared Operator +
' ~
'BC30035: Syntax error.
' (ByVal p1 As C1, ByVal p2 As Integer) As Integer
' ~
' ]]></errors>
' CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33017ERR_ConvMustBeWideningOrNarrowing()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvMustBeWideningOrNarrowing">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator CType(ByVal x As S1) As Integer
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConvMustBeWideningOrNarrowing, "CType"))
End Sub
<Fact()>
Public Sub BC33019ERR_InvalidSpecifierOnNonConversion1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="InvalidSpecifierOnNonConversion1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Widening Operator And(ByVal x As S1, ByVal y As S1) As Integer
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_InvalidSpecifierOnNonConversion1, "Widening").WithArguments("Widening"))
End Sub
<Fact()>
Public Sub BC33020ERR_UnaryParamMustBeContainingType1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UnaryParamMustBeContainingType1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator IsTrue(ByVal x As Integer) As Boolean
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_UnaryParamMustBeContainingType1, "IsTrue").WithArguments("S1"))
End Sub
<Fact()>
Public Sub BC33021ERR_BinaryParamMustBeContainingType1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BinaryParamMustBeContainingType1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator And(ByVal x As Integer, ByVal y As Integer) As Boolean
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_BinaryParamMustBeContainingType1, "And").WithArguments("S1"))
End Sub
<Fact()>
Public Sub BC33022ERR_ConvParamMustBeContainingType1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConvParamMustBeContainingType1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Widening Operator CType(ByVal x As Integer) As Boolean
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConvParamMustBeContainingType1, "CType").WithArguments("S1"))
End Sub
<Fact()>
Public Sub BC33023ERR_OperatorRequiresBoolReturnType1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OperatorRequiresBoolReturnType1">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Operator IsTrue(ByVal x As S1) As Integer
Return 1
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorRequiresBoolReturnType1, "IsTrue").WithArguments("IsTrue"))
End Sub
<Fact()>
Public Sub BC33024ERR_ConversionToSameType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionToSameType">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Widening Operator CType(ByVal x As S1) As S1
Return Nothing
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToSameType, "CType"))
End Sub
<Fact()>
Public Sub BC33025ERR_ConversionToInterfaceType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionToInterfaceType">
<file name="a.vb"><![CDATA[
Interface I1
End Interface
Public Structure S1
Public Shared Widening Operator CType(ByVal x As S1) As I1
Return Nothing
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(
Diagnostic(ERRID.ERR_AccessMismatchOutsideAssembly4, "I1").WithArguments("op_Implicit", "I1", "structure", "S1"),
Diagnostic(ERRID.ERR_ConversionToInterfaceType, "CType"))
End Sub
<Fact()>
Public Sub BC33026ERR_ConversionToBaseType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionToBaseType">
<file name="a.vb"><![CDATA[
Class C1
End Class
Class S1
Inherits C1
Public Shared Widening Operator CType(ByVal x As S1) As C1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToBaseType, "CType"))
End Sub
<Fact()>
Public Sub BC33027ERR_ConversionToDerivedType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionToDerivedType">
<file name="a.vb"><![CDATA[
Class C1
Inherits S1
End Class
Class S1
Public Shared Widening Operator CType(ByVal x As S1) As C1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToDerivedType, "CType"))
End Sub
<Fact()>
Public Sub BC33028ERR_ConversionToObject()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionToObject">
<file name="a.vb"><![CDATA[
Public Structure S1
Public Shared Widening Operator CType(ByVal x As S1) As Object
Return Nothing
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionToObject, "CType"))
End Sub
<Fact()>
Public Sub BC33029ERR_ConversionFromInterfaceType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionFromInterfaceType">
<file name="a.vb"><![CDATA[
Interface I1
End Interface
Class S1
Public Shared Widening Operator CType(ByVal x As I1) As S1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromInterfaceType, "CType"))
End Sub
<Fact()>
Public Sub BC33030ERR_ConversionFromBaseType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionFromBaseType">
<file name="a.vb"><![CDATA[
Class C1
End Class
Class S1
Inherits C1
Public Shared Widening Operator CType(ByVal x As C1) As S1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromBaseType, "CType"))
End Sub
<Fact()>
Public Sub BC33031ERR_ConversionFromDerivedType()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionFromDerivedType">
<file name="a.vb"><![CDATA[
Class C1
Inherits S1
End Class
Class S1
Public Shared Widening Operator CType(ByVal x As C1) As S1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromDerivedType, "CType"))
End Sub
<Fact()>
Public Sub BC33032ERR_ConversionFromObject()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ConversionFromObject">
<file name="a.vb"><![CDATA[
Class S1
Public Shared Widening Operator CType(ByVal x As Object) As S1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_ConversionFromObject, "CType"))
End Sub
<Fact()>
Public Sub BC33033ERR_MatchingOperatorExpected2()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MatchingOperatorExpected2">
<file name="a.vb"><![CDATA[
Public Structure S1
Dim d As Date
Public Shared Operator IsFalse(ByVal z As S1) As Boolean
Dim b As Boolean
Return b
End Operator
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_MatchingOperatorExpected2, "IsFalse").WithArguments("IsTrue", "Public Shared Operator IsFalse(z As S1) As Boolean"))
End Sub
<Fact()>
Public Sub BC33041ERR_OperatorRequiresIntegerParameter1()
CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OperatorRequiresIntegerParameter1">
<file name="a.vb"><![CDATA[
Class S1
Public Shared Operator >>(ByVal x As S1, ByVal y As String) As S1
Return Nothing
End Operator
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_OperatorRequiresIntegerParameter1, ">>").WithArguments(">>"))
End Sub
<Fact()>
Public Sub BC33101ERR_BadTypeArgForStructConstraintNull()
Dim compilation1 = CreateCompilationWithMscorlib40(
<compilation name="BadTypeArgForStructConstraintNull">
<file name="a.vb"><![CDATA[
Imports System
Interface I
End Interface
Structure S
End Structure
Class A
End Class
Class B(Of T)
Shared Sub M1(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
Dim o? As Object
Dim s? As S
Dim _1? As T1
Dim _2? As T2
Dim _3? As T3
Dim _4? As T4
Dim _5? As T5
Dim _6? As T6
Dim _7? As T7
End Sub
Shared Sub M2(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
Dim o As Nullable(Of Object) = New Nullable(Of Object)
Dim s As Nullable(Of S) = New Nullable(Of S)
Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
Dim _3 As Nullable(Of T3) = New Nullable(Of T3)
Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
End Sub
Shared Sub M3(Of T1, T2 As Class, T3 As Structure, T4 As New, T5 As I, T6 As A, T7 As T)()
Dim o As Object? = New Object?
Dim s As S? = New S?
Dim _1 As T1? = New T1?
Dim _2 As T2? = New T2?
Dim _3 As T3? = New T3?
Dim _4 As T4? = New T4?
Dim _5 As T5? = New T5?
Dim _6 As T6? = New T6?
Dim _7 As T7? = New T7?
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'o'.
Dim o? As Object
~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim o? As Object
~~
BC42024: Unused local variable: 's'.
Dim s? As S
~
BC42024: Unused local variable: '_1'.
Dim _1? As T1
~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _1? As T1
~~~
BC42024: Unused local variable: '_2'.
Dim _2? As T2
~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _2? As T2
~~~
BC42024: Unused local variable: '_3'.
Dim _3? As T3
~~
BC42024: Unused local variable: '_4'.
Dim _4? As T4
~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _4? As T4
~~~
BC42024: Unused local variable: '_5'.
Dim _5? As T5
~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _5? As T5
~~~
BC42024: Unused local variable: '_6'.
Dim _6? As T6
~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _6? As T6
~~~
BC42024: Unused local variable: '_7'.
Dim _7? As T7
~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _7? As T7
~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim o As Nullable(Of Object) = New Nullable(Of Object)
~~~~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim o As Nullable(Of Object) = New Nullable(Of Object)
~~~~~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _1 As Nullable(Of T1) = New Nullable(Of T1)
~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _2 As Nullable(Of T2) = New Nullable(Of T2)
~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _4 As Nullable(Of T4) = New Nullable(Of T4)
~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _5 As Nullable(Of T5) = New Nullable(Of T5)
~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _6 As Nullable(Of T6) = New Nullable(Of T6)
~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _7 As Nullable(Of T7) = New Nullable(Of T7)
~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim o As Object? = New Object?
~~~~~~
BC33101: Type 'Object' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim o As Object? = New Object?
~~~~~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _1 As T1? = New T1?
~~
BC33101: Type 'T1' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _1 As T1? = New T1?
~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _2 As T2? = New T2?
~~
BC33101: Type 'T2' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _2 As T2? = New T2?
~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _4 As T4? = New T4?
~~
BC33101: Type 'T4' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _4 As T4? = New T4?
~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _5 As T5? = New T5?
~~
BC33101: Type 'T5' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _5 As T5? = New T5?
~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _6 As T6? = New T6?
~~
BC33101: Type 'T6' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _6 As T6? = New T6?
~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _7 As T7? = New T7?
~~
BC33101: Type 'T7' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim _7 As T7? = New T7?
~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33102ERR_CantSpecifyArrayAndNullableOnBoth()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantSpecifyArrayAndNullableOnBoth">
<file name="a.vb"><![CDATA[
Class S1
Sub goo()
Dim numbers? As Integer()
Dim values() As Integer?
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC42024: Unused local variable: 'numbers'.
Dim numbers? As Integer()
~~~~~~~
BC33101: Type 'Integer()' must be a value type or a type argument constrained to 'Structure' in order to be used with 'Nullable' or nullable modifier '?'.
Dim numbers? As Integer()
~~~~~~~~
BC42024: Unused local variable: 'values'.
Dim values() As Integer?
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC33109ERR_CantSpecifyAsNewAndNullable()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CantSpecifyAsNewAndNullable">
<file name="a.vb"><![CDATA[
Imports System
Class C
Shared Sub M()
Dim x? As New Guid()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC33109: Nullable modifier cannot be specified in variable declarations with 'As New'.
Dim x? As New Guid()
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC33112ERR_NullableImplicit()
Dim expectedErrors As New Dictionary(Of String, XElement) From {
{"On",
<expected><![CDATA[
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Public field1?()
~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Public field2?(,)
~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Public field3?()()
~~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Public field4?
~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Dim local1?()
~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Dim local2?(,)
~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Dim local3?()()
~~~~~~~~~~~
BC33112: Nullable modifier cannot be used with a variable whose implicit type is 'Object'.
Dim local4?
~~~~~~~
]]></expected>},
{"Off",
<expected><![CDATA[
BC36629: Nullable type inference is not supported in this context.
Dim local5? = 23 ' this is ok for Option Infer On
~~~~~~~
]]></expected>}}
For Each infer In {"On", "Off"}
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NullableImplicit">
<file name="a.vb">
Option Infer <%= infer %>
Class C1
Public field1?()
Public field2?(,)
Public field3?()()
Public field4?
'Public field5? = 23 ' this is _NOT_ ok for Option Infer On, but it gives another diagnostic.
Public field6?(1) ' this is ok for Option Infer On
Public field7?(1)() ' this is ok for Option Infer On
Sub goo()
Dim local1?()
Dim local2?(,)
Dim local3?()()
Dim local4?
Dim local5? = 23 ' this is ok for Option Infer On
Dim local6?(1) ' this is ok for Option Infer On
Dim local7?(1)() ' this is ok for Option Infer On
local1 = nothing
local2 = nothing
local3 = nothing
local4 = nothing
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors(infer))
Next
End Sub
<Fact(), WorkItem(651624, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/651624")>
Public Sub NestedNullableWithAttemptedConversion()
Dim comp = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="c.vb">
Imports System
Class C
Public Sub Main()
Dim x As Nullable(Of Nullable(Of Integer)) = Nothing
Dim y As Nullable(Of Integer) = Nothing
Console.WriteLine(x Is Nothing)
Console.WriteLine(y Is Nothing)
Console.WriteLine(x = y)
End Sub
End Class
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(comp,
<errors><![CDATA[
BC32115: 'System.Nullable' does not satisfy the 'Structure' constraint for type parameter 'T'. Only non-nullable 'Structure' types are allowed.
Dim x As Nullable(Of Nullable(Of Integer)) = Nothing
~~~~~~~~~~~~~~~~~~~~
BC30452: Operator '=' is not defined for types 'Integer??' and 'Integer?'.
Console.WriteLine(x = y)
~~~~~
]]></errors>)
End Sub
<Fact()>
Public Sub BC36015ERR_PropertyNameConflictInMyCollection()
Dim compilation1 = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="PropertyNameConflictInMyCollection">
<file name="a.vb"><![CDATA[
Module module1
Public f As New GRBB
End Module
<Global.Microsoft.VisualBasic.MyGroupCollection("base", "create", "DisposeI", "Module1.f")> _
Public NotInheritable Class GRBB
Private Shared Function Create(Of T As {New, base})(ByVal Instance As T) As T
Return Nothing
End Function
Private Sub DisposeI(Of T As base)(ByRef Instance As T)
End Sub
Public m_derived As Short
End Class
Public Class base
Public i As Integer
End Class
Public Class disposei
Inherits base
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36015: 'Private Sub DisposeI(Of T As base)(ByRef Instance As T)' has the same name as a member used for type 'disposei' exposed in a 'My' group. Rename the type or its enclosing namespace.
<Global.Microsoft.VisualBasic.MyGroupCollection("base", "create", "DisposeI", "Module1.f")> _
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36551ERR_ExtensionMethodNotInModule()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ExtensionMethodNotInModule">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Imports System
Class C1
<Extension()> _
Public Sub Print(ByVal str As String)
End Sub
End Class
]]></file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors><![CDATA[
BC36551: Extension methods can be defined only in modules.
<Extension()> _
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36552ERR_ExtensionMethodNoParams()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExtensionMethodNoParams">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Module C1
<Extension()> _
Public Sub Print()
End Sub
End Module
]]></file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors><![CDATA[
BC36552: Extension methods must declare at least one parameter. The first parameter specifies which type to extend.
Public Sub Print()
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36553ERR_ExtensionMethodOptionalFirstArg()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExtensionMethodOptionalFirstArg">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Module C1
<Extension()> _
Public Sub Print(Optional ByVal str As String = "hello")
End Sub
End Module
]]></file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors><![CDATA[
BC36553: 'Optional' cannot be applied to the first parameter of an extension method. The first parameter specifies which type to extend.
Public Sub Print(Optional ByVal str As String = "hello")
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36554ERR_ExtensionMethodParamArrayFirstArg()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="ExtensionMethodParamArrayFirstArg">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Module C1
<Extension()> _
Public Sub Print(ByVal ParamArray str() As String)
End Sub
End Module
]]></file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors><![CDATA[
BC36554: 'ParamArray' cannot be applied to the first parameter of an extension method. The first parameter specifies which type to extend.
Public Sub Print(ByVal ParamArray str() As String)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36561ERR_ExtensionMethodUncallable1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
Interface I(Of T)
End Interface
Module M
<Extension()>
Sub M1(Of T, U As T)(o As T)
End Sub
<Extension()>
Sub M2(Of T As I(Of U), U)(o As T)
End Sub
<Extension()>
Sub M3(Of T, U As T)(o As U)
End Sub
<Extension()>
Sub M4(Of T As I(Of U), U)(o As U)
End Sub
End Module
]]></file>
</compilation>, {Net40.References.SystemCore})
Dim expectedErrors1 = <errors><![CDATA[
BC36561: Extension method 'M2' has type constraints that can never be satisfied.
Sub M2(Of T As I(Of U), U)(o As T)
~~
BC36561: Extension method 'M3' has type constraints that can never be satisfied.
Sub M3(Of T, U As T)(o As U)
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36632ERR_NullableParameterMustSpecifyType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="NullableParameterMustSpecifyType">
<file name="a.vb"><![CDATA[
Imports System
Public Module M
Delegate Sub Del(x?)
Sub Main()
Dim x As Action(Of Integer?) = Sub(y?) Console.WriteLine()
End Sub
Sub goo(x?)
End Sub
Sub goo2(Of T)(x?)
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36632: Nullable parameters must specify a type.
Delegate Sub Del(x?)
~~
BC36632: Nullable parameters must specify a type.
Dim x As Action(Of Integer?) = Sub(y?) Console.WriteLine()
~~
BC36632: Nullable parameters must specify a type.
Sub goo(x?)
~~
BC36632: Nullable parameters must specify a type.
Sub goo2(Of T)(x?)
~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36634ERR_LambdasCannotHaveAttributes()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LambdasCannotHaveAttributes">
<file name="a.vb"><![CDATA[
Public Module M
Sub LambdaAttribute()
Dim add1 = _
Function(<System.Runtime.InteropServices.InAttribute()> m As Integer) _
m + 1
End Sub
End Module
]]></file>
</compilation>)
compilation1.VerifyDiagnostics(Diagnostic(ERRID.ERR_LambdasCannotHaveAttributes, "<System.Runtime.InteropServices.InAttribute()>"))
End Sub
<WorkItem(528712, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528712")>
<Fact()>
Public Sub BC36643ERR_CantSpecifyParamsOnLambdaParamNoType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CantSpecifyParamsOnLambdaParamNoType">
<file name="a.vb"><![CDATA[
Imports System
Public Module M
Sub Main()
Dim x As Action(Of String()) = Sub(y()) Console.WriteLine()
End Sub
End Module
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_CantSpecifyParamsOnLambdaParamNoType, "y()"))
End Sub
<Fact()>
Public Sub BC36713ERR_AutoPropertyInitializedInStructure()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AutoPropertyInitializedInStructure">
<file name="a.vb"><![CDATA[
Imports System.Collections.Generic
Structure S1(Of T As IEnumerable(Of T))
Property AP() As New T
End Structure
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_AutoPropertyInitializedInStructure, "AP"),
Diagnostic(ERRID.ERR_NewIfNullOnGenericParam, "T"))
End Sub
<WorkItem(542471, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542471")>
<Fact>
Public Sub BC36713ERR_AutoPropertyInitializedInStructure_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AutoPropertyInitializedInStructure">
<file name="a.vb"><![CDATA[
Structure S1
Public Property age1() As Integer = 10
Public Shared Property age2() As Integer = 10
End Structure
Module M1
Public Property age3() As Integer = 10
End Module
Class C1
Public Property age4() As Integer = 10
Public Shared Property age5() As Integer = 10
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36713: Auto-implemented Properties contained in Structures cannot have initializers unless they are marked 'Shared'.
Public Property age1() As Integer = 10
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
<Fact>
Public Sub BC36759ERR_AutoPropertyCantHaveParams()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AutoPropertyInitializedInStructure">
<file name="a.vb"><![CDATA[
Imports System
Class A
Public Property Item(index As Integer) As String
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36759: Auto-implemented properties cannot have parameters.
Public Property Item(index As Integer) As String
~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
<Fact>
Public Sub BC36759ERR_AutoPropertyCantHaveParams_MustOverride()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AutoPropertyInitializedInStructure">
<file name="a.vb"><![CDATA[
Imports System
Class A
Public MustOverride Property P(index As Integer) As T
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31411: 'A' must be declared 'MustInherit' because it contains methods declared 'MustOverride'.
Class A
~
BC30002: Type 'T' is not defined.
Public MustOverride Property P(index As Integer) As T
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(540702, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540702")>
<Fact>
Public Sub BC36759ERR_AutoPropertyCantHaveParams_Default()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="AutoPropertyInitializedInStructure">
<file name="a.vb"><![CDATA[
Class C
Default Public Property P(a As Integer) As T
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30025: Property missing 'End Property'.
Default Public Property P(a As Integer) As T
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.
Default Public Property P(a As Integer) As T
~
BC30002: Type 'T' is not defined.
Default Public Property P(a As Integer) As T
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36722ERR_VarianceDisallowedHere()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceDisallowedHere">
<file name="a.vb"><![CDATA[
Class C1
Structure Z(Of T, In U, Out V)
End Structure
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
Structure Z(Of T, In U, Out V)
~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
Structure Z(Of T, In U, Out V)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36723ERR_VarianceInterfaceNesting()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInterfaceNesting">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Class C : End Class
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36723: Enumerations, classes, and structures cannot be declared in an interface that has an 'In' or 'Out' type parameter.
Class C : End Class
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36724ERR_VarianceOutParamDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutParamDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub GOO(ByVal x As R(Of Tout))
End Interface
Interface R(Of Out T) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36724: Type 'Tout' cannot be used in this context because 'Tout' is an 'Out' type parameter.
Sub GOO(ByVal x As R(Of Tout))
~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36725ERR_VarianceInParamDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInParamDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As W(Of Tin))
End Interface
Interface W(Of In T) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36725: Type 'Tin' cannot be used in this context because 'Tin' is an 'In' type parameter.
Sub goo(ByVal x As W(Of Tin))
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36726ERR_VarianceOutParamDisallowedForGeneric3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutParamDisallowedForGeneric3">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As RW(Of Tout, Tout))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36726: Type 'Tout' cannot be used for the 'T1' in 'RW(Of T1, T2)' in this context because 'Tout' is an 'Out' type parameter.
Sub goo(ByVal x As RW(Of Tout, Tout))
~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36727ERR_VarianceInParamDisallowedForGeneric3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInParamDisallowedForGeneric3">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As RW(Of Tin, Tin))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36727: Type 'Tin' cannot be used for the 'T2' in 'RW(Of T1, T2)' in this context because 'Tin' is an 'In' type parameter.
Sub goo(ByVal x As RW(Of Tin, Tin))
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36728ERR_VarianceOutParamDisallowedHere2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutParamDisallowedHere2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As R(Of R(Of Tout)))
End Interface
Interface R(Of Out T) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36728: Type 'Tout' cannot be used in 'R(Of Tout)' in this context because 'Tout' is an 'Out' type parameter.
Sub goo(ByVal x As R(Of R(Of Tout)))
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36729ERR_VarianceInParamDisallowedHere2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInParamDisallowedHere2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As W(Of R(Of Tin)))
End Interface
Interface R(Of Out T) : End Interface
Interface W(Of In T) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36729: Type 'Tin' cannot be used in 'R(Of Tin)' in this context because 'Tin' is an 'In' type parameter.
Sub goo(ByVal x As W(Of R(Of Tin)))
~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36730ERR_VarianceOutParamDisallowedHereForGeneric4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutParamDisallowedHereForGeneric4">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As RW(Of RW(Of Tout, Tout), RW(Of Tout, Tin)))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36730: Type 'Tout' cannot be used for the 'T1' of 'RW(Of T1, T2)' in 'RW(Of Tout, Tout)' in this context because 'Tout' is an 'Out' type parameter.
Sub goo(ByVal x As RW(Of RW(Of Tout, Tout), RW(Of Tout, Tin)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36731ERR_VarianceInParamDisallowedHereForGeneric4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInParamDisallowedHereForGeneric4">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As RW(Of RW(Of Tin, Tin), RW(Of Tout, Tin)))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36731: Type 'Tin' cannot be used for the 'T2' of 'RW(Of T1, T2)' in 'RW(Of Tin, Tin)' in this context because 'Tin' is an 'In' type parameter.
Sub goo(ByVal x As RW(Of RW(Of Tin, Tin), RW(Of Tout, Tin)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36732ERR_VarianceTypeDisallowed2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceTypeDisallowed2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Interface J : End Interface
Sub goo(ByVal x As J)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36732: Type 'J' cannot be used in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
Sub goo(ByVal x As J)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36733ERR_VarianceTypeDisallowedForGeneric4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceTypeDisallowedForGeneric4">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Interface J : End Interface
Sub goo(ByVal x As RW(Of J, Tout))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36733: Type 'J' cannot be used for the 'T1' in 'RW(Of T1, T2)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
Sub goo(ByVal x As RW(Of J, Tout))
~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36735ERR_VarianceTypeDisallowedHere3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceTypeDisallowedHere3">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Interface J : End Interface
Sub goo(ByVal x As R(Of R(Of J)))
End Interface
Interface R(Of Out T) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36735: Type 'J' cannot be used in 'R(Of I(Of Tout, Tin, TSout, TSin).J)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
Sub goo(ByVal x As R(Of R(Of J)))
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36736ERR_VarianceTypeDisallowedHereForGeneric5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceTypeDisallowedHereForGeneric5">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Interface J : End Interface
Sub goo(ByVal x As RW(Of RW(Of J, Tout), RW(Of Tout, Tin)))
End Interface
Interface RW(Of Out T1, In T2) : End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36736: Type 'J' cannot be used for the 'T1' of 'RW(Of T1, T2)' in 'RW(Of I(Of Tout, Tin, TSout, TSin).J, Tout)' in this context because both the context and the definition of 'J' are nested within interface 'I(Of Tout, Tin, TSout, TSin)', and 'I(Of Tout, Tin, TSout, TSin)' has 'In' or 'Out' type parameters. Consider moving the definition of 'J' outside of 'I(Of Tout, Tin, TSout, TSin)'.
Sub goo(ByVal x As RW(Of RW(Of J, Tout), RW(Of Tout, Tin)))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36738ERR_VariancePreventsSynthesizedEvents2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VariancePreventsSynthesizedEvents2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Event e()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36738: Event definitions with parameters are not allowed in an interface such as 'I(Of Tout, Tin, TSout, TSin)' that has 'In' or 'Out' type parameters. Consider declaring the event by using a delegate type which is not defined within 'I(Of Tout, Tin, TSout, TSin)'. For example, 'Event e As Action(Of ...)'.
Event e()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36740ERR_VarianceOutNullableDisallowed2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutNullableDisallowed2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Function goo() As TSout?
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36740: Type 'TSout' cannot be used in 'TSout?' because 'In' and 'Out' type parameters cannot be made nullable, and 'TSout' is an 'Out' type parameter.
Function goo() As TSout?
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36741ERR_VarianceInNullableDisallowed2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInNullableDisallowed2">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub goo(ByVal x As TSin?)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36741: Type 'TSin' cannot be used in 'TSin?' because 'In' and 'Out' type parameters cannot be made nullable, and 'TSin' is an 'In' type parameter.
Sub goo(ByVal x As TSin?)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36742ERR_VarianceOutByValDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutByValDisallowed1">
<file name="a.vb"><![CDATA[
Interface IVariance(Of Out T)
Sub Goo(ByVal a As T)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36742: Type 'T' cannot be used as a ByVal parameter type because 'T' is an 'Out' type parameter.
Sub Goo(ByVal a As T)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36743ERR_VarianceInReturnDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInReturnDisallowed1">
<file name="a.vb"><![CDATA[
Interface IVariance(Of In T)
Function Goo() As T
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36743: Type 'T' cannot be used as a return type because 'T' is an 'In' type parameter.
Function Goo() As T
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36744ERR_VarianceOutConstraintDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutConstraintDisallowed1">
<file name="a.vb"><![CDATA[
Interface IVariance(Of Out T)
Function Goo(Of U As T)() As T
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36744: Type 'T' cannot be used as a generic type constraint because 'T' is an 'Out' type parameter.
Function Goo(Of U As T)() As T
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36745ERR_VarianceInReadOnlyPropertyDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInReadOnlyPropertyDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
ReadOnly Property p() As Tin
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36745: Type 'Tin' cannot be used as a ReadOnly property type because 'Tin' is an 'In' type parameter.
ReadOnly Property p() As Tin
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36746ERR_VarianceOutWriteOnlyPropertyDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutWriteOnlyPropertyDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
WriteOnly Property p() As Tout
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36746: Type 'Tout' cannot be used as a WriteOnly property type because 'Tout' is an 'Out' type parameter.
WriteOnly Property p() As Tout
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36747ERR_VarianceOutPropertyDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutPropertyDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Property p() As Tout
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36747: Type 'Tout' cannot be used as a property type in this context because 'Tout' is an 'Out' type parameter and the property is not marked ReadOnly.
Property p() As Tout
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36748ERR_VarianceInPropertyDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInPropertyDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Property p() As Tin
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36748: Type 'Tin' cannot be used as a property type in this context because 'Tin' is an 'In' type parameter and the property is not marked WriteOnly.
Property p() As Tin
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36749ERR_VarianceOutByRefDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceOutByRefDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub f(ByRef x As Tout)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36749: Type 'Tout' cannot be used in this context because 'In' and 'Out' type parameters cannot be used for ByRef parameter types, and 'Tout' is an 'Out' type parameter.
Sub f(ByRef x As Tout)
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC36750ERR_VarianceInByRefDisallowed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="VarianceInByRefDisallowed1">
<file name="a.vb"><![CDATA[
Interface I(Of Out Tout, In Tin, Out TSout As Structure, In TSin As Structure)
Sub f(ByRef x As Tin)
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36750: Type 'Tin' cannot be used in this context because 'In' and 'Out' type parameters cannot be used for ByRef parameter types, and 'Tin' is an 'In' type parameter.
Sub f(ByRef x As Tin)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC36917ERR_OverloadsModifierInModule()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OverloadsModifierInModule">
<file name="a.vb"><![CDATA[
Module M1
Overloads Function goo(x as integer) as double
return nothing
End Function
Overloads Function goo(ByVal x As Long) As Double
Return Nothing
End Function
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC36917: Inappropriate use of 'Overloads' keyword in a module.
Overloads Function goo(x as integer) as double
~~~~~~~~~
BC36917: Inappropriate use of 'Overloads' keyword in a module.
Overloads Function goo(ByVal x As Long) As Double
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' Old name"MethodErrorsOverloadsInModule"
<Fact>
Public Sub BC36917ERR_OverloadsModifierInModule_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module M
Overloads Sub S()
End Sub
Overloads Property P
End Module
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC36917: Inappropriate use of 'Overloads' keyword in a module.
Overloads Sub S()
~~~~~~~~~
BC36917: Inappropriate use of 'Overloads' keyword in a module.
Overloads Property P
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
#End Region
#Region "Targeted Warning Tests"
<Fact>
Public Sub BC40000WRN_UseOfObsoleteSymbol2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UseOfObsoleteSymbol2">
<file name="a.vb"><![CDATA[
Imports System.Net
Module Module1
Sub Main()
Dim RemoteEndPoint As EndPoint = Nothing
Dim x As Long
x = CType(CType(RemoteEndPoint, IPEndPoint).Address.Address Mod 256, Byte)
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40000: 'Public Overloads Property Address As Long' is obsolete: 'This property has been deprecated. It is address family dependent. Please use IPAddress.Equals method to perform comparisons. http://go.microsoft.com/fwlink/?linkid=14202'.
x = CType(CType(RemoteEndPoint, IPEndPoint).Address.Address Mod 256, Byte)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40003WRN_MustOverloadBase4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustOverloadBase4">
<file name="a.vb"><![CDATA[
Interface I
Sub S()
End Interface
Class C1
Implements I
Public Sub S() Implements I.S
End Sub
End Class
Class C2
Inherits C1
Public Sub S()
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'S' shadows an overloadable member declared in the base class 'C1'. If you want to overload the base method, this method must be declared 'Overloads'.
Public Sub S()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40004WRN_OverrideType5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="OverrideType5">
<file name="a.vb"><![CDATA[
Public Class Base
Public i As Integer = 10
End Class
Public Class C1
Inherits Base
Public i As String = "hi"
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40004: variable 'i' conflicts with variable 'i' in the base class 'Base' and should be declared 'Shadows'.
Public i As String = "hi"
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40005WRN_MustOverride2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustOverride2">
<file name="a.vb"><![CDATA[
Class C1
Overridable ReadOnly Property Goo(ByVal x As Integer) As Integer
Get
Return 1
End Get
End Property
End Class
Class C2
Inherits C1
ReadOnly Property Goo(ByVal x As Integer) As Integer
Get
Return 1
End Get
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40005: property 'Goo' shadows an overridable method in the base class 'C1'. To override the base method, this method must be declared 'Overrides'.
ReadOnly Property Goo(ByVal x As Integer) As Integer
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
<WorkItem(561748, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/561748")>
<Fact>
Public Sub BC40007WRN_DefaultnessShadowed4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Namespace N1
Class base
Default Public ReadOnly Property Item(ByVal i As Integer) As Integer
Get
Return i
End Get
End Property
End Class
Class base2
Inherits base
End Class
Class derive
Inherits base
Default Public Overloads ReadOnly Property Item1(ByVal i As Integer) As Integer
Get
Return 2 * i
End Get
End Property
End Class
Class derive2
Inherits base2
Default Public Overloads ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
Get
Return 2 * i
End Get
End Property
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40007: Default property 'Item1' conflicts with the default property 'Item' in the base class 'base'. 'Item1' will be the default property. 'Item1' should be declared 'Shadows'.
Default Public Overloads ReadOnly Property Item1(ByVal i As Integer) As Integer
~~~~~
BC40007: Default property 'Item3' conflicts with the default property 'Item' in the base class 'base'. 'Item3' will be the default property. 'Item3' should be declared 'Shadows'.
Default Public Overloads ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
Public Sub BC40007WRN_DefaultnessShadowed4_NoErrors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class Base
Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
End Class
Class Derived
Inherits Base
Default Public Shadows ReadOnly Property TeamProject(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, <errors><![CDATA[]]></errors>)
End Sub
<Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
Public Sub BC40007WRN_DefaultnessShadowed4_TwoErrors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class Base
Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
End Class
Class Derived
Inherits Base
Default Public ReadOnly Property TeamProject(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
Default Public ReadOnly Property TeamProject(ByVal index As String) As String
Get
Return ""
End Get
End Property
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40007: Default property 'TeamProject' conflicts with the default property 'TeamName' in the base class 'Base'. 'TeamProject' will be the default property. 'TeamProject' should be declared 'Shadows'.
Default Public ReadOnly Property TeamProject(ByVal index As Integer) As String
~~~~~~~~~~~
]]></errors>)
End Sub
<Fact, WorkItem(546773, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546773")>
Public Sub BC40007WRN_DefaultnessShadowed4_MixedErrors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Class Base
Default Public ReadOnly Property TeamName(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
End Class
Class Derived
Inherits Base
Default Public Shadows ReadOnly Property TeamProject(ByVal index As Integer) As String
Get
Return ""
End Get
End Property
Default Public ReadOnly Property TeamProject(ByVal index As String) As String
Get
Return ""
End Get
End Property
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC30695: property 'TeamProject' must be declared 'Shadows' because another member with this name is declared 'Shadows'.
Default Public ReadOnly Property TeamProject(ByVal index As String) As String
~~~~~~~~~~~
]]></errors>)
End Sub
<WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
<Fact>
Public Sub BC40007WRN_DefaultnessShadowed4_DifferentCasing()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Namespace N1
Class base
Default Public ReadOnly Property Item(ByVal i As Integer) As Integer
Get
Return i
End Get
End Property
End Class
Class derive
Inherits base
Default Public Overloads ReadOnly Property item(ByVal i As Integer, j as Integer) As Integer
Get
Return 2 * i
End Get
End Property
End Class
End Namespace
]]></file>
</compilation>)
' Differs only by case, shouldn't have errors.
Dim expectedErrors1 = <errors><![CDATA[
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(543734, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543734")>
<WorkItem(561748, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/561748")>
<Fact>
Public Sub BC40007WRN_DefaultnessShadowed4_Interface()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Interface base1
End Interface
Interface base2
Default ReadOnly Property Item2(ByVal i As Integer) As Integer
End Interface
Interface base3
Inherits base2
End Interface
Interface derive1
Inherits base1, base2
Default ReadOnly Property Item1(ByVal i As Integer) As Integer
End Interface
Interface derive2
Inherits base3
Default ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40007: Default property 'Item1' conflicts with the default property 'Item2' in the base interface 'base2'. 'Item1' will be the default property. 'Item1' should be declared 'Shadows'.
Default ReadOnly Property Item1(ByVal i As Integer) As Integer
~~~~~
BC40007: Default property 'Item3' conflicts with the default property 'Item2' in the base interface 'base2'. 'Item3' will be the default property. 'Item3' should be declared 'Shadows'.
Default ReadOnly Property Item3(ByVal i As Integer) As Integer ' No warning in Dev11
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC40011WRN_ComClassNoMembers1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ComClassNoMembers1">
<file name="a.vb"><![CDATA[
<Microsoft.VisualBasic.ComClassAttribute()>
Public Class C1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40011: 'Microsoft.VisualBasic.ComClassAttribute' is specified for class 'C1' but 'C1' has no public members that can be exposed to COM; therefore, no COM interfaces are generated.
Public Class C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40012WRN_SynthMemberShadowsMember5_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A
Public Sub get_P()
End Sub
Public Sub set_P()
End Sub
Public Function get_Q()
Return Nothing
End Function
Public Sub set_Q()
End Sub
Public Function get_R(value)
Return Nothing
End Function
Public Sub set_R(value)
End Sub
Public Function get_S()
Return Nothing
End Function
Public Function set_S()
Return Nothing
End Function
Public get_T
Public Interface set_T
End Interface
Public Enum get_U
A
End Enum
Public Structure set_U
End Structure
End Class
MustInherit Class B
Inherits A
Public Property P
Public ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Friend WriteOnly Property R
Set(value)
End Set
End Property
Protected MustOverride Property S
Public Property T
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Public Property U
End Class
MustInherit Class C
Inherits A
Public Shadows Property P
Public Shadows ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Friend Shadows WriteOnly Property R
Set(value)
End Set
End Property
Protected MustOverride Shadows Property S
Public Shadows Property T
Get
Return Nothing
End Get
Set(value)
End Set
End Property
Public Shadows Property U
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40012: property 'P' implicitly declares 'get_P', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property P
~
BC40012: property 'P' implicitly declares 'set_P', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property P
~
BC40012: property 'Q' implicitly declares 'get_Q', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public ReadOnly Property Q
~
BC40012: property 'R' implicitly declares 'set_R', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Friend WriteOnly Property R
~
BC40012: property 'S' implicitly declares 'get_S', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Protected MustOverride Property S
~
BC40012: property 'S' implicitly declares 'set_S', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Protected MustOverride Property S
~
BC40012: property 'T' implicitly declares 'get_T', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property T
~
BC40012: property 'T' implicitly declares 'set_T', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property T
~
BC40012: property 'U' implicitly declares 'get_U', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property U
~
BC40012: property 'U' implicitly declares 'set_U', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property U
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(541355, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541355")>
<Fact>
Public Sub BC40012WRN_SynthMemberShadowsMember5_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A
Private _P1
Protected _P2
Friend _P3
Public Sub _Q1()
End Sub
Public Interface _Q2
End Interface
Public Enum _Q3
A
End Enum
Public _R1
Public _R2
Public _R3
Public _R4
End Class
MustInherit Class B
Inherits A
Friend Property P1
Protected Property P2
Private Property P3
Public Property Q1
Public Property Q2
Public Property Q3
Public ReadOnly Property R1
Get
Return Nothing
End Get
End Property
Public WriteOnly Property R2
Set(value)
End Set
End Property
Public MustOverride Property R3
Public Property R4
End Class
MustInherit Class C
Inherits A
Friend Shadows Property P1
Protected Shadows Property P2
Private Shadows Property P3
Public Shadows Property Q1
Public Shadows Property Q2
Public Shadows Property Q3
Public Shadows ReadOnly Property R1
Get
Return Nothing
End Get
End Property
Public Shadows WriteOnly Property R2
Set(value)
End Set
End Property
Public MustOverride Shadows Property R3
Public Shadows Property R4
End Class
MustInherit Class D
Friend Property P1
Protected Property P2
Private Property P3
Public Property Q1
Public Property Q2
Public Property Q3
Public ReadOnly Property R1
Get
Return Nothing
End Get
End Property
Public WriteOnly Property R2
Set(value)
End Set
End Property
Public MustOverride Property R3
End Class
MustInherit Class E
Inherits D
Private _P1
Protected _P2
Friend _P3
Public Sub _Q1()
End Sub
Public Interface _Q2
End Interface
Public Enum _Q3
A
End Enum
Public _R1
Public _R2
Public _R3
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40012: property 'P2' implicitly declares '_P2', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Protected Property P2
~~
BC40012: property 'P3' implicitly declares '_P3', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Private Property P3
~~
BC40012: property 'Q1' implicitly declares '_Q1', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property Q1
~~
BC40012: property 'Q2' implicitly declares '_Q2', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property Q2
~~
BC40012: property 'Q3' implicitly declares '_Q3', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property Q3
~~
BC40012: property 'R4' implicitly declares '_R4', which conflicts with a member in the base class 'A', and so the property should be declared 'Shadows'.
Public Property R4
~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(539827, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539827")>
<Fact>
Public Sub BC40012WRN_SynthMemberShadowsMember5_3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IA
Function get_Goo() As String
End Interface
Interface IB
Inherits IA
ReadOnly Property Goo() As Integer
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 =
<errors><![CDATA[
BC40012: property 'Goo' implicitly declares 'get_Goo', which conflicts with a member in the base interface 'IA', and so the property should be declared 'Shadows'.
ReadOnly Property Goo() As Integer
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC40012WRN_SynthMemberShadowsMember5_4()
CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public add_E
Public remove_E
Public EEvent
Public EEventHandler
End Class
Class B
Inherits A
Public Event E()
End Class
Class C
Inherits A
Public Shadows Event E()
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "EEventHandler", "class", "A"),
Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "EEvent", "class", "A"),
Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "add_E", "class", "A"),
Diagnostic(ERRID.WRN_SynthMemberShadowsMember5, "E").WithArguments("event", "E", "remove_E", "class", "A"))
End Sub
<Fact>
Public Sub BC40014WRN_MemberShadowsSynthMember6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
MustInherit Class A
Public Property P
Public ReadOnly Property Q
Get
Return Nothing
End Get
End Property
Friend WriteOnly Property R
Set(value)
End Set
End Property
Protected MustOverride Property S
End Class
MustInherit Class B
Inherits A
Public Sub get_P()
End Sub
Public Sub set_P()
End Sub
Public Function get_Q()
Return Nothing
End Function
Public Sub set_Q()
End Sub
Public Function get_R(value)
Return Nothing
End Function
Public Sub set_R(value)
End Sub
Public Function get_S()
Return Nothing
End Function
Public Function set_S()
Return Nothing
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P' conflicts with a member implicitly declared for property 'P' in the base class 'A' and should be declared 'Shadows'.
Public Sub get_P()
~~~~~
BC40014: sub 'set_P' conflicts with a member implicitly declared for property 'P' in the base class 'A' and should be declared 'Shadows'.
Public Sub set_P()
~~~~~
BC40014: function 'get_Q' conflicts with a member implicitly declared for property 'Q' in the base class 'A' and should be declared 'Shadows'.
Public Function get_Q()
~~~~~
BC40014: sub 'set_R' conflicts with a member implicitly declared for property 'R' in the base class 'A' and should be declared 'Shadows'.
Public Sub set_R(value)
~~~~~
BC40014: function 'get_S' conflicts with a member implicitly declared for property 'S' in the base class 'A' and should be declared 'Shadows'.
Public Function get_S()
~~~~~
BC40014: function 'set_S' conflicts with a member implicitly declared for property 'S' in the base class 'A' and should be declared 'Shadows'.
Public Function set_S()
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40019WRN_UseOfObsoletePropertyAccessor3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UseOfObsoletePropertyAccessor3">
<file name="a.vb"><![CDATA[
Imports System
Class C1
ReadOnly Property p As String
<Obsolete("hello", False)>
Get
Return "hello"
End Get
End Property
End Class
Class C2
Sub goo()
Dim s As C1 = New C1()
Dim a = s.p
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40019: 'Get' accessor of 'Public ReadOnly Property p As String' is obsolete: 'hello'.
Dim a = s.p
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40025WRN_FieldNotCLSCompliant1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="FieldNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
<CLSCompliant(True)> Public Class GenCompClass(Of T)
<CLSCompliant(False)> Public Structure NonCompStruct
Public a As UInteger
End Structure
<CLSCompliant(False)> Class cls1
End Class
End Class
Public Class C(Of t)
Inherits GenCompClass(Of String)
Public x As GenCompClass(Of String).cls1
Public y As GenCompClass(Of String).NonCompStruct
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40025: Type of member 'x' is not CLS-compliant.
Public x As GenCompClass(Of String).cls1
~
BC40025: Type of member 'y' is not CLS-compliant.
Public y As GenCompClass(Of String).NonCompStruct
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40026WRN_BaseClassNotCLSCompliant2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="BaseClassNotCLSCompliant2">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)>
Public Class MyCompliantClass
Inherits BASE
End Class
Public Class BASE
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40026: 'MyCompliantClass' is not CLS-compliant because it derives from 'BASE', which is not CLS-compliant.
Public Class MyCompliantClass
~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40027WRN_ProcTypeNotCLSCompliant1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ProcTypeNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)>
Public Class MyCompliantClass
Public Function ChangeValue() As UInt32
Return Nothing
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40027: Return type of function 'ChangeValue' is not CLS-compliant.
Public Function ChangeValue() As UInt32
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40028WRN_ParamNotCLSCompliant1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ParamNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)>
Public Class MyCompliantClass
Public Sub ChangeValue(ByVal value As UInt32)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40028: Type of parameter 'value' is not CLS-compliant.
Public Sub ChangeValue(ByVal value As UInt32)
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40029WRN_InheritedInterfaceNotCLSCompliant2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="InheritedInterfaceNotCLSCompliant2">
<file name="a.vb"><![CDATA[
Imports System
<assembly: clscompliant(true)>
<CLSCompliant(False)> Public Interface i1
End Interface
Public Interface i2
Inherits i1
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40029: 'i2' is not CLS-compliant because the interface 'i1' it inherits from is not CLS-compliant.
Public Interface i2
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40030WRN_CLSMemberInNonCLSType3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="CLSMemberInNonCLSType3">
<file name="a.vb"><![CDATA[
Imports System
Public Module M1
<CLSCompliant(True)> Class C1
End Class
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40030: class 'M1.C1' cannot be marked CLS-compliant because its containing type 'M1' is not CLS-compliant.
<CLSCompliant(True)> Class C1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40031WRN_NameNotCLSCompliant1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NameNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
Namespace _NS
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40031: Name '_NS' is not CLS-compliant.
Namespace _NS
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40032WRN_EnumUnderlyingTypeNotCLS1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EnumUnderlyingTypeNotCLS1">
<file name="a.vb"><![CDATA[
<Assembly: System.CLSCompliant(True)>
Public Class c1
Public Enum COLORS As UInteger
RED
GREEN
BLUE
End Enum
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40032: Underlying type 'UInteger' of Enum is not CLS-compliant.
Public Enum COLORS As UInteger
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40033WRN_NonCLSMemberInCLSInterface1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NonCLSMemberInCLSInterface1">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)> Public Interface IFace
<CLSCompliant(False)> Property Prop1() As Long
<CLSCompliant(False)> Function F2() As Integer
<CLSCompliant(False)> Event EV3(ByVal i3 As Integer)
<CLSCompliant(False)> Sub Sub4()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40033: Non CLS-compliant 'Property Prop1 As Long' is not allowed in a CLS-compliant interface.
<CLSCompliant(False)> Property Prop1() As Long
~~~~~
BC40033: Non CLS-compliant 'Function F2() As Integer' is not allowed in a CLS-compliant interface.
<CLSCompliant(False)> Function F2() As Integer
~~
BC40033: Non CLS-compliant 'Event EV3(i3 As Integer)' is not allowed in a CLS-compliant interface.
<CLSCompliant(False)> Event EV3(ByVal i3 As Integer)
~~~
BC40033: Non CLS-compliant 'Sub Sub4()' is not allowed in a CLS-compliant interface.
<CLSCompliant(False)> Sub Sub4()
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40034WRN_NonCLSMustOverrideInCLSType1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NonCLSMustOverrideInCLSType1">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)> Public MustInherit Class QuiteCompliant
<CLSCompliant(False)> Public MustOverride Sub Sub1()
<CLSCompliant(False)> Protected MustOverride Function Fun2() As Integer
<CLSCompliant(False)> Protected Friend MustOverride Sub Sub3()
<CLSCompliant(False)> Friend MustOverride Function Fun4(ByVal x As Long) As Long
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
<CLSCompliant(False)> Public MustOverride Sub Sub1()
~~~~
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
<CLSCompliant(False)> Protected MustOverride Function Fun2() As Integer
~~~~
BC40034: Non CLS-compliant 'MustOverride' member is not allowed in CLS-compliant type 'QuiteCompliant'.
<CLSCompliant(False)> Protected Friend MustOverride Sub Sub3()
~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40035WRN_ArrayOverloadsNonCLS2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ArrayOverloadsNonCLS2">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(True)>
Public MustInherit Class QuiteCompliant
Public Sub goo(Of t)(ByVal p1()()() As Integer)
End Sub
Public Sub goo(Of t)(ByVal p1()()()()() As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40035: 'Public Sub goo(Of t)(p1 As Integer()()()()())' is not CLS-compliant because it overloads 'Public Sub goo(Of t)(p1 As Integer()()())' which differs from it only by array of array parameter types or by the rank of the array parameter types.
Public Sub goo(Of t)(ByVal p1()()()()() As Integer)
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40038WRN_RootNamespaceNotCLSCompliant1()
Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("_CLS")
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RootNamespaceNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
Module M1
End Module
]]></file>
</compilation>, opt)
Dim expectedErrors1 = <errors><![CDATA[
BC40038: Root namespace '_CLS' is not CLS-compliant.
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40039WRN_RootNamespaceNotCLSCompliant2()
Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("A._B")
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="RootNamespaceNotCLSCompliant2">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
Module M1
End Module
]]></file>
</compilation>, opt)
Dim expectedErrors1 = <errors><![CDATA[
BC40039: Name '_B' in the root namespace 'A._B' is not CLS-compliant.
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40041WRN_TypeNotCLSCompliant1()
Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="TypeNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
<CLSCompliant(True)> Public Class GenCompClass(Of T)
End Class
Public Class C(Of t)
Inherits GenCompClass(Of UInteger)
End Class
]]></file>
</compilation>, options:=opt)
Dim expectedErrors1 = <errors><![CDATA[
BC40041: Type 'UInteger' is not CLS-compliant.
Public Class C(Of t)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40042WRN_OptionalValueNotCLSCompliant1()
Dim opt = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="OptionalValueNotCLSCompliant1">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
Public Module M1
Public Sub goo(Of t)(Optional ByVal p1 As Object = 3UI)
End Sub
End Module
]]></file>
</compilation>, opt)
Dim expectedErrors1 = <errors><![CDATA[
BC40042: Type of optional value for optional parameter 'p1' is not CLS-compliant.
Public Sub goo(Of t)(Optional ByVal p1 As Object = 3UI)
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40043WRN_CLSAttrInvalidOnGetSet()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CLSAttrInvalidOnGetSet">
<file name="a.vb"><![CDATA[
Imports System
Class C1
Property PROP As String
<CLSCompliant(True)>
Get
Return Nothing
End Get
Set(ByVal value As String)
End Set
End Property
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40043: System.CLSCompliantAttribute cannot be applied to property 'Get' or 'Set'.
<CLSCompliant(True)>
~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40046WRN_TypeConflictButMerged6()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Interface ii
End Interface
Structure teststruct
Implements ii
End Structure
Partial Structure teststruct
End Structure
Structure teststruct
Dim a As String
End Structure
Partial Interface ii
End Interface
Interface ii ' 3
End Interface
Module m
End Module
Partial Module m
End Module
Module m ' 3
End Module
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40046: interface 'ii' and partial interface 'ii' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Interface ii
~~
BC40046: structure 'teststruct' and partial structure 'teststruct' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Structure teststruct
~~~~~~~~~~
BC40046: structure 'teststruct' and partial structure 'teststruct' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Structure teststruct
~~~~~~~~~~
BC40046: interface 'ii' and partial interface 'ii' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Interface ii ' 3
~~
BC40046: module 'm' and partial module 'm' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Module m
~
BC40046: module 'm' and partial module 'm' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Module m ' 3
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40046WRN_TypeConflictButMerged6_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace N
Partial Class C
Private F
End Class
Class C ' Warning 1
Private G
End Class
Class C ' Warning 2
Private H
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40046: class 'C' and partial class 'C' conflict in namespace 'N', but are being merged because one of them is declared partial.
Class C ' Warning 1
~
BC40046: class 'C' and partial class 'C' conflict in namespace 'N', but are being merged because one of them is declared partial.
Class C ' Warning 2
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40048WRN_ShadowingGenericParamWithParam1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ShadowingGenericParamWithParam1">
<file name="a.vb"><![CDATA[
Interface I1(Of V)
Class C1(Of V)
End Class
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40048: Type parameter 'V' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
Class C1(Of V)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact(), WorkItem(543528, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543528")>
Public Sub BC40048WRN_ShadowingGenericParamWithParam1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ShadowingGenericParamWithParam1">
<file name="a.vb"><![CDATA[
Class base(Of T)
Function TEST(Of T)(ByRef X As T)
Return Nothing
End Function
End Class
]]></file>
</compilation>).VerifyDiagnostics(Diagnostic(ERRID.WRN_ShadowingGenericParamWithParam1, "T").WithArguments("T"))
End Sub
<Fact>
Public Sub BC40050WRN_EventDelegateTypeNotCLSCompliant2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="EventDelegateTypeNotCLSCompliant2">
<file name="a.vb"><![CDATA[
Imports System
<Assembly: CLSCompliant(True)>
Public Class ETester
<CLSCompliant(False)> Public Delegate Sub abc(ByVal n As Integer)
Public Custom Event E As abc
AddHandler(ByVal Value As abc)
End AddHandler
RemoveHandler(ByVal Value As abc)
End RemoveHandler
RaiseEvent(ByVal n As Integer)
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40050: Delegate type 'ETester.abc' of event 'E' is not CLS-compliant.
Public Custom Event E As abc
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40053WRN_CLSEventMethodInNonCLSType3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="CLSEventMethodInNonCLSType3">
<file name="a.vb"><![CDATA[
Imports System
<CLSCompliant(False)> _
Public Class cls1
Delegate Sub del1()
Custom Event e1 As del1
AddHandler(ByVal value As del1)
End AddHandler
<CLSCompliant(True)> _
RemoveHandler(ByVal value As del1)
End RemoveHandler
RaiseEvent()
End RaiseEvent
End Event
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40053: 'RemoveHandler' method for event 'e1' cannot be marked CLS compliant because its containing type 'cls1' is not CLS compliant.
<CLSCompliant(True)> _
~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(539496, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539496")>
<Fact>
Public Sub BC40055WRN_NamespaceCaseMismatch3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NamespaceCaseMismatch3">
<file name="a.vb"><![CDATA[
Namespace ns1
End Namespace
Namespace Ns1
End Namespace
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'ns1' does not match casing of namespace name 'Ns1' in 'a.vb'.
Namespace ns1
~~~
]]></errors>)
compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NamespaceCaseMismatch3">
<file name="a.vb"><![CDATA[
Namespace ns1
End Namespace
]]></file>
<file name="b.vb"><![CDATA[
Namespace Ns1
End Namespace
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'ns1' does not match casing of namespace name 'Ns1' in 'b.vb'.
Namespace ns1
~~~
]]></errors>)
compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="NamespaceCaseMismatch3">
<file name="a.vb"><![CDATA[
Namespace Ns
End Namespace
Namespace ns.AB
End Namespace
]]></file>
<file name="b.vb"><![CDATA[
Namespace NS.Ab
End Namespace
Namespace Ns
Namespace Ab
End Namespace
End Namespace
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1,
<errors><![CDATA[
BC40055: Casing of namespace name 'Ns' does not match casing of namespace name 'NS' in 'b.vb'.
Namespace Ns
~~
BC40055: Casing of namespace name 'Ab' does not match casing of namespace name 'AB' in 'a.vb'.
Namespace NS.Ab
~~
]]></errors>)
End Sub
<WorkItem(545727, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545727")>
<Fact()>
Public Sub BC40055_WRN_NamespaceCaseMismatch3_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace CONSOLEAPPLICATIONVB
Class H
End Class
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="ConsoleApplicationVB"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'CONSOLEAPPLICATIONVB' does not match casing of namespace name 'ConsoleApplicationVB' in '<project settings>'.
Namespace CONSOLEAPPLICATIONVB
~~~~~~~~~~~~~~~~~~~~
]]></expected>)
' different casing to see that best name has no influence on error
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace consoleapplicationvb
Class H
End Class
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="CONSOLEAPPLICATIONVB"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'consoleapplicationvb' does not match casing of namespace name 'CONSOLEAPPLICATIONVB' in '<project settings>'.
Namespace consoleapplicationvb
~~~~~~~~~~~~~~~~~~~~
]]></expected>)
' passing nested ns to rootnamespace
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace GOO
Namespace BAR
Class H
End Class
End Namespace
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.bar"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'BAR' does not match casing of namespace name 'bar' in '<project settings>'.
Namespace BAR
~~~
]]></expected>)
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace GOO
Namespace bar
Class H
End Class
End Namespace
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.BAR"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'bar' does not match casing of namespace name 'BAR' in '<project settings>'.
Namespace bar
~~~
]]></expected>)
' passing nested ns to rootnamespace
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace goo
Namespace BAR
Class H
End Class
End Namespace
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="GOO.BAR"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'goo' does not match casing of namespace name 'GOO' in '<project settings>'.
Namespace goo
~~~
]]></expected>)
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace GOO
Namespace BAR
Class H
End Class
End Namespace
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="goo.BAR"))
compilation.AssertTheseDiagnostics(
<expected><![CDATA[
BC40055: Casing of namespace name 'GOO' does not match casing of namespace name 'goo' in '<project settings>'.
Namespace GOO
~~~
]]></expected>)
' no warnings if spelling is correct
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace CONSOLEAPPLICATIONVB
Class H
End Class
End Namespace
End Namespace
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, rootNamespace:="CONSOLEAPPLICATIONVB"))
compilation.AssertNoErrors()
' no warnings if no root namespace is given
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace Global
Namespace CONSOLEAPPLICATIONVB
Class H
End Class
End Namespace
End Namespace
]]></file>
</compilation>)
compilation.AssertNoErrors()
' no warnings for global namespace itself
compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Namespace GLObAl
Namespace CONSOLEAPPLICATIONVB
Class H
End Class
End Namespace
End Namespace
]]></file>
</compilation>)
compilation.AssertNoErrors()
End Sub
<WorkItem(528713, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528713")>
<Fact>
Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1()
Dim options = New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithRootNamespace("BC40056WRN_UndefinedOrEmptyNamespaceOrClass1")
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UndefinedOrEmptyNamespaceOrClass1">
<file name="a.vb"><![CDATA[
Imports alias1 = ns1.GenStruct(Of String)
Structure GenStruct(Of T)
End Structure
]]></file>
</compilation>,
options:=options
)
Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ns1.GenStruct' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports alias1 = ns1.GenStruct(Of String)
~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1_1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="UndefinedOrEmptyNamespaceOrClass1">
<file name="a.vb"><![CDATA[
Imports ns1.GOO
Namespace ns1
Module M1
Sub GOO()
End Sub
End Module
End Namespace
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ns1.GOO' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports ns1.GOO
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40056WRN_UndefinedOrEmptyNamespaceOrClass1_2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UndefinedOrEmptyNamespaceOrClass1">
<file name="a.vb"><![CDATA[
Imports Alias2 = System
Imports N12 = Alias2
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'Alias2' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports N12 = Alias2
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC40057WRN_UndefinedOrEmptyProjectNamespaceOrClass1()
Dim globalImports = GlobalImport.Parse({"Alias2 = System", "N12 = Alias2"})
Dim options = TestOptions.ReleaseExe.WithGlobalImports(globalImports)
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="UndefinedOrEmpyProjectNamespaceOrClass1">
<file name="a.vb"><![CDATA[
]]></file>
</compilation>, options:=options)
Dim expectedErrors1 = <errors><![CDATA[
BC40057: Namespace or type specified in the project-level Imports 'N12 = Alias2' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(545385, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545385")>
<Fact>
Public Sub BC41005WRN_MissingAsClauseinOperator()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Class D
Shared Operator +(ByVal x As D) ' BC41005 -> BC42021. "Operator without an 'As' clause; type of Object assumed."
Return Nothing
End Operator
End Class
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionStrict:=OptionStrict.Custom))
Dim expectedErrors1 = <errors><![CDATA[
BC42021: Operator without an 'As' clause; type of Object assumed.
Shared Operator +(ByVal x As D) ' BC41005 -> BC42021. "Operator without an 'As' clause; type of Object assumed."
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(528714, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528714"), WorkItem(1070286, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1070286")>
<Fact()>
Public Sub BC42000WRN_MustShadowOnMultipleInheritance2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="MustShadowOnMultipleInheritance2">
<file name="a.vb"><![CDATA[
Interface I1
Sub goo(ByVal arg As Integer)
End Interface
Interface I2
Sub goo(ByVal arg As Integer)
End Interface
Interface I3
Inherits I1, I2
Sub goo()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'goo' shadows an overloadable member declared in the base interface 'I1'. If you want to overload the base method, this method must be declared 'Overloads'.
Sub goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact()>
Public Sub BC42014WRN_IndirectlyImplementedBaseMember5()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="IndirectlyImplementedBaseMember5">
<file name="a.vb"><![CDATA[
Interface I1
Sub goo()
End Interface
Interface I2
Inherits I1
End Interface
Class C1
Implements I1
Public Sub goo() Implements I1.goo
End Sub
End Class
Class C2
Inherits C1
Implements I2
Public Shadows Sub goo() Implements I1.goo
End Sub
End Class
]]></file>
</compilation>)
' BC42014 is deprecated
Dim expectedErrors1 = <errors></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub BC42015WRN_ImplementedBaseMember4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ImplementedBaseMember4">
<file name="a.vb"><![CDATA[
Imports System
Class c1
Implements IDisposable
Public Sub Dispose1() Implements System.IDisposable.Dispose
End Sub
End Class
Class c2
Inherits c1
Implements IDisposable
Public Sub Dispose1() Implements System.IDisposable.Dispose
End Sub
End Class
]]></file>
</compilation>)
' BC42015 is deprecated
Dim expectedErrors1 = <errors><![CDATA[
BC40003: sub 'Dispose1' shadows an overloadable member declared in the base class 'c1'. If you want to overload the base method, this method must be declared 'Overloads'.
Public Sub Dispose1() Implements System.IDisposable.Dispose
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(539499, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539499")>
<Fact>
Public Sub BC42020WRN_ObjectAssumedVar1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
Dim y() = New Object() {3}
End Sub
Public Fld
Public Function Goo(ByVal x) As Integer
Return 1
End Function
End Module
]]></file>
</compilation>, TestOptions.ReleaseExe.WithOptionInfer(False).WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors><![CDATA[
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
Dim y() = New Object() {3}
~
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
Public Fld
~~~
BC42020: Variable declaration without an 'As' clause; type of Object assumed.
Public Function Goo(ByVal x) As Integer
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
compilation1 = compilation1.WithOptions(TestOptions.ReleaseExe.WithOptionInfer(False).WithOptionStrict(OptionStrict.Off))
CompilationUtils.AssertNoErrors(compilation1)
End Sub
<WorkItem(539499, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539499")>
<WorkItem(529849, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529849")>
<Fact()>
Public Sub BC42020WRN_ObjectAssumedVar1WithStaticLocal()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
Static x = 3
End Sub
End Module
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors><![CDATA[
BC42020: Static variable declared without an 'As' clause; type of Object assumed.
Static x = 3
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.Off))
CompilationUtils.AssertNoErrors(compilation1)
compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation1,
<expected><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Static x = 3
~
]]></expected>)
End Sub
<Fact>
Public Sub ValidTypeNameAsVariableNameInAssignment()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Compilation">
<file name="a.vb"><![CDATA[
Imports System
Namespace NS
End Namespace
Module Program2
Sub Main2(args As System.String())
DateTime = "hello"
NS = "hello"
End Sub
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<errors><![CDATA[
BC30110: 'Date' is a structure type and cannot be used as an expression.
DateTime = "hello"
~~~~~~~~
BC30112: 'NS' is a namespace and cannot be used as an expression.
NS = "hello"
~~
]]></errors>)
End Sub
<Fact>
Public Sub BC30209ERR_StrictDisallowImplicitObject()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Public Fld
End Module
]]></file>
</compilation>, TestOptions.ReleaseDll.WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Public Fld
~~~
]]></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
Dim y() = New Object() {3}
End Sub
End Module
]]></file>
</compilation>, TestOptions.ReleaseExe.WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation2, <errors/>)
compilation2 = compilation2.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(False).WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation2,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Dim y() = New Object() {3}
~
]]></errors>)
End Sub
<WorkItem(529849, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529849")>
<Fact>
Public Sub BC30209ERR_StrictDisallowImplicitObjectWithStaticLocals()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="BC30209ERR_StrictDisallowImplicitObjectWithStaticLocals">
<file name="a.vb"><![CDATA[
Module M1
Sub Main()
Static x = 3
End Sub
End Module
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionInfer(True).WithOptionStrict(OptionStrict.On))
CompilationUtils.AssertTheseDiagnostics(compilation1,
<errors><![CDATA[
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Static x = 3
~
]]></errors>)
End Sub
<WorkItem(539501, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539501")>
<Fact>
Public Sub BC42021WRN_ObjectAssumed1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Function Func1()
Return 3
End Function
Sub Main()
End Sub
Delegate Function Func2()
ReadOnly Property Prop3
Get
Return Nothing
End Get
End Property
End Module
]]></file>
</compilation>, TestOptions.ReleaseExe.WithOptionStrict(OptionStrict.Custom).WithOptionInfer(True))
Dim expectedErrors1 = <errors><![CDATA[
BC42021: Function without an 'As' clause; return type of Object assumed.
Function Func1()
~~~~~
BC42021: Function without an 'As' clause; return type of Object assumed.
Delegate Function Func2()
~~~~~
BC42022: Property without an 'As' clause; type of Object assumed.
ReadOnly Property Prop3
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
compilation1 = compilation1.WithOptions(New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.Off).WithOptionInfer(True))
CompilationUtils.AssertNoErrors(compilation1)
End Sub
<Fact>
Public Sub BC30210ERR_StrictDisallowsImplicitProc_4()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinVarDecl">
<file name="a.vb"><![CDATA[
Module M1
Function Func1()
Return 3
End Function
Sub Main()
End Sub
Delegate Function Func2()
ReadOnly Property Prop3
Get
Return Nothing
End Get
End Property
End Module
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.ConsoleApplication).WithOptionStrict(OptionStrict.On).WithOptionInfer(True))
Dim expectedErrors1 = <errors><![CDATA[
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Function Func1()
~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Delegate Function Func2()
~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
ReadOnly Property Prop3
~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' vbc Module1.vb /target:library /noconfig /optionstrict:custom
<Fact()>
Public Sub BC42022WRN_ObjectAssumedProperty1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ObjectAssumedProperty1">
<file name="a.vb"><![CDATA[
Module Module1
ReadOnly Property p()
Get
Return 2
End Get
End Property
End Module
]]></file>
</compilation>, TestOptions.ReleaseDll.WithOptionStrict(OptionStrict.Custom))
Dim expectedErrors1 = <errors><![CDATA[
BC42022: Property without an 'As' clause; type of Object assumed.
ReadOnly Property p()
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
' EDMAURER: tested elsewhere
' <Fact()>
' Public Sub BC42102WRN_ComClassPropertySetObject1()
' Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib(
' <compilation name="ComClassPropertySetObject1">
' <file name="a.vb"><![CDATA[
' Imports Microsoft.VisualBasic
' <ComClass()> Public Class Class1
' Public WriteOnly Property prop2(ByVal x As String) As Object
' Set(ByVal Value As Object)
' End Set
' End Property
' End Class
' ]]></file>
' </compilation>)
' Dim expectedErrors1 = <errors><![CDATA[
'BC42102: 'Public WriteOnly Property prop2(x As String) As Object' cannot be exposed to COM as a property 'Let'. You will not be able to assign non-object values (such as numbers or strings) to this property from Visual Basic 6.0 using a 'Let' statement.
' Public WriteOnly Property prop2(ByVal x As String) As Object
' ~~~~~
' ]]></errors>
' CompilationUtils.AssertTheseDeclarationErrors(compilation1, expectedErrors1)
' End Sub
<Fact()>
Public Sub BC42309WRN_XMLDocCrefAttributeNotFound1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocCrefAttributeNotFound1">
<file name="a.vb">
<![CDATA[
''' <see cref="System.Collections.Generic.List(Of _)"/>
Class E
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocCrefAttributeNotFound1">
<file name="a.vb">
<![CDATA[
''' <see cref="System.Collections.Generic.List(Of _)"/>
Class E
End Class
]]></file>
</compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors = <errors><![CDATA[
BC42309: XML comment has a tag with a 'cref' attribute 'System.Collections.Generic.List(Of _)' that could not be resolved.
''' <see cref="System.Collections.Generic.List(Of _)"/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42310WRN_XMLMissingFileOrPathAttribute1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLMissingFileOrPathAttribute1">
<file name="a.vb"><![CDATA[
'''<include/>
Class E
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLMissingFileOrPathAttribute1">
<file name="a.vb"><![CDATA[
'''<include/>
Class E
End Class
]]></file>
</compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors =
<errors>
<![CDATA[
BC42310: XML comment tag 'include' must have a 'file' attribute. XML comment will be ignored.
'''<include/>
~~~~~~~~~~
BC42310: XML comment tag 'include' must have a 'path' attribute. XML comment will be ignored.
'''<include/>
~~~~~~~~~~
]]>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42312WRN_XMLDocWithoutLanguageElement()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocWithoutLanguageElement">
<file name="a.vb"><![CDATA[
Class E
ReadOnly Property quoteForTheDay() As String
''' <summary>
Get
Return "hello"
End Get
End Property
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocWithoutLanguageElement">
<file name="a.vb"><![CDATA[
Class E
ReadOnly Property quoteForTheDay() As String
''' <summary>
Get
Return "hello"
End Get
End Property
End Class
]]></file>
</compilation>, parseOptions:=VisualBasic.VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
CompilationUtils.AssertTheseDiagnostics(compilation2,
<errors>
<![CDATA[
BC42312: XML documentation comments must precede member or type declarations.
''' <summary>
~~~~~~~~~~~
BC42304: XML documentation parse error: Element is missing an end tag. XML comment will be ignored.
''' <summary>
~~~~~~~~~
BC42304: XML documentation parse error: '>' expected. XML comment will be ignored.
''' <summary>
~
BC42304: XML documentation parse error: Expected beginning '<' for an XML tag. XML comment will be ignored.
''' <summary>
~
]]>
</errors>)
End Sub
<Fact()>
Public Sub BC42313WRN_XMLDocReturnsOnWriteOnlyProperty()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocReturnsOnWriteOnlyProperty">
<file name="a.vb"><![CDATA[
Class E
''' <returns></returns>
WriteOnly Property quoteForTheDay() As String
set
End set
End Property
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocReturnsOnWriteOnlyProperty">
<file name="a.vb"><![CDATA[
Class E
''' <returns></returns>
WriteOnly Property quoteForTheDay() As String
set
End set
End Property
End Class
]]></file>
</compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors = <errors><![CDATA[
BC42313: XML comment tag 'returns' is not permitted on a 'WriteOnly' Property.
''' <returns></returns>
~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42314WRN_XMLDocOnAPartialType()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="XMLDocOnAPartialType">
<file name="a.vb"><![CDATA[
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="XMLDocOnAPartialType">
<file name="a.vb"><![CDATA[
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class
''' <summary>
''' </summary>
''' <remarks></remarks>
partial Class E
End Class
''' <summary> 3
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface
''' <summary> 4
''' </summary>
''' <remarks></remarks>
partial Interface I
End Interface
''' <summary> 5
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
''' <summary> 6
''' </summary>
''' <remarks></remarks>
partial Module M
End Module
]]></file>
</compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors = <errors><![CDATA[
BC42314: XML comment cannot be applied more than once on a partial class. XML comments for this class will be ignored.
''' <summary>
~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial class. XML comments for this class will be ignored.
''' <summary>
~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial interface. XML comments for this interface will be ignored.
''' <summary> 3
~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial interface. XML comments for this interface will be ignored.
''' <summary> 4
~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial module. XML comments for this module will be ignored.
''' <summary> 5
~~~~~~~~~~~~~
BC42314: XML comment cannot be applied more than once on a partial module. XML comments for this module will be ignored.
''' <summary> 6
~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42317WRN_XMLDocBadGenericParamTag2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocBadGenericParamTag2">
<file name="a.vb">
<![CDATA[
Class C1(Of X)
''' <typeparam name="X">typeparam E1</typeparam>
''' <summary>summary - E1</summary>
''' <remarks>remarks - E1</remarks>
Sub E1(Of T)(ByVal p As X)
End Sub
End Class
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocBadGenericParamTag2">
<file name="a.vb">
<![CDATA[
Class C1(Of X)
''' <typeparam name="X">typeparam E1</typeparam>
''' <summary>summary - E1</summary>
''' <remarks>remarks - E1</remarks>
Sub E1(Of T)(ByVal p As X)
End Sub
End Class
]]>
</file>
</compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors =
<errors>
<![CDATA[
BC42317: XML comment type parameter 'X' does not match a type parameter on the corresponding 'sub' statement.
''' <typeparam name="X">typeparam E1</typeparam>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42318WRN_XMLDocGenericParamTagWithoutName()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocGenericParamTagWithoutName">
<file name="a.vb">
<![CDATA[
Class C1(Of X)
''' <typeparam>typeparam E1</typeparam>
Sub E1(Of T)(ByVal p As X)
End Sub
End Class
]]>
</file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocGenericParamTagWithoutName">
<file name="a.vb">
<![CDATA[
Class C1(Of X)
''' <typeparam>typeparam E1</typeparam>
Sub E1(Of T)(ByVal p As X)
End Sub
End Class
]]>
</file>
</compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors =
<errors>
<![CDATA[
BC42318: XML comment type parameter must have a 'name' attribute.
''' <typeparam>typeparam E1</typeparam>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<Fact()>
Public Sub BC42319WRN_XMLDocExceptionTagWithoutCRef()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocExceptionTagWithoutCRef">
<file name="a.vb"><![CDATA[
Class Myexception
''' <exception></exception>
Sub Test()
End Sub
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation1, <errors></errors>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="XMLDocExceptionTagWithoutCRef">
<file name="a.vb"><![CDATA[
Class Myexception
''' <exception></exception>
Sub Test()
End Sub
End Class
]]></file>
</compilation>, parseOptions:=VisualBasicParseOptions.Default.WithDocumentationMode(DocumentationMode.Diagnose))
Dim expectedErrors =
<errors>
<![CDATA[
BC42319: XML comment exception must have a 'cref' attribute.
''' <exception></exception>
~~~~~~~~~~~~~~~~~~~~~~~
]]>
</errors>
CompilationUtils.AssertTheseDiagnostics(compilation2, expectedErrors)
End Sub
<WorkItem(541661, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541661")>
<Fact()>
Public Sub BC42333WRN_VarianceDeclarationAmbiguous3()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences(
<compilation name="VarianceDeclarationAmbiguous3">
<file name="a.vb"><![CDATA[
Imports System.Xml.Linq
Imports System.Linq
Module M1
Class C1
'COMPILEWARNING : BC42333, "System.Collections.Generic.IEnumerable(Of XDocument)", BC42333, "System.Collections.Generic.IEnumerable(Of XElement)"
Implements System.Collections.Generic.IEnumerable(Of XDocument), System.Collections.Generic.IEnumerable(Of XElement)
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of System.Xml.Linq.XDocument) Implements System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XDocument).GetEnumerator
Return Nothing
End Function
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator(Of System.Xml.Linq.XElement) Implements System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XElement).GetEnumerator
Return Nothing
End Function
Public Function GetEnumerator2() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
Return Nothing
End Function
End Class
End Module
]]></file>
</compilation>, XmlReferences)
Dim expectedErrors1 = <errors><![CDATA[
BC42333: Interface 'System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XElement)' is ambiguous with another implemented interface 'System.Collections.Generic.IEnumerable(Of System.Xml.Linq.XDocument)' due to the 'In' and 'Out' parameters in 'Interface IEnumerable(Of Out T)'.
Implements System.Collections.Generic.IEnumerable(Of XDocument), System.Collections.Generic.IEnumerable(Of XElement)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
' vbc Module1.vb /target:library /noconfig /optionstrict:custom
<Fact()>
Public Sub BC42347WRN_MissingAsClauseinFunction()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MissingAsClauseinFunction">
<file name="a.vb"><![CDATA[
Module M1
Function Goo()
Return Nothing
End Function
End Module
]]></file>
</compilation>, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionStrict:=OptionStrict.Custom))
Dim expectedErrors1 = <errors><![CDATA[
BC42021: Function without an 'As' clause; return type of Object assumed.
Function Goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
#End Region
' Check that errors are reported for type parameters.
<Fact>
Public Sub TypeParameterErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class X(Of T$)
End Class
Partial Class Y(Of T, U)
End Class
Class Z(Of T, In U, Out V)
End Class
Interface IZ(Of T, In U, Out V)
End Interface
]]></file>
<file name="b.vb"><![CDATA[
Partial Class Y(Of T, V)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC32041: Type character cannot be used in a type parameter declaration.
Class X(Of T$)
~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
Class Z(Of T, In U, Out V)
~~
BC36722: Keywords 'Out' and 'In' can only be used in interface and delegate declarations.
Class Z(Of T, In U, Out V)
~~~
BC30931: Type parameter name 'V' does not match the name 'U' of the corresponding type parameter defined on one of the other partial types of 'Y'.
Partial Class Y(Of T, V)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
'Check that errors are reported for multiple type arguments
<Fact>
Public Sub MultipleTypeArgumentErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Imports System.Collections
Class G(Of T)
Dim x As G(Of System.Int64,
System.Collections.Hashtable)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC32043: Too many type arguments to 'G(Of T)'.
Dim x As G(Of System.Int64,
~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
' Check that errors are reported for duplicate option statements in a single file.
<Fact>
Public Sub BC30225ERR_DuplicateOption1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Compare Text
Option Infer On
Option Compare On
]]></file>
<file name="b.vb"><![CDATA[
Option Strict On
Option Infer On
Option Strict On
Option Explicit
Option Explicit Off
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30225: 'Option Compare' statement can only appear once per file.
Option Compare On
~~~~~~~~~~~~~~~
BC30207: 'Option Compare' must be followed by 'Text' or 'Binary'.
Option Compare On
~~
BC30225: 'Option Strict' statement can only appear once per file.
Option Strict On
~~~~~~~~~~~~~~~~
BC30225: 'Option Explicit' statement can only appear once per file.
Option Explicit Off
~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BC31393ERR_ExpressionHasTheTypeWhichIsARestrictedType()
CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Module Program
Sub M(tr As System.TypedReference)
Dim t = tr.GetType()
End Sub
End Module
]]></file>
</compilation>).VerifyDiagnostics()
End Sub
' Check that errors are reported for import statements in a single file.
<Fact>
Public Sub ImportErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Imports N1(Of String)
Imports A = N1
Imports B = N1
Imports N1.M1
Imports N1.M1
Imports A = N1.N2.C
Imports N3
Imports N1.N2
Imports N1.Gen(Of C)
Imports N1.Gen(Of Integer, String)
Imports System$.Collections%
Imports D$ = System.Collections
Imports N3
Imports System.Cheesecake.Frosting
]]></file>
<file name="b.vb"><![CDATA[
Namespace N1
Class Gen(Of T)
End Class
Module M1
End Module
End Namespace
Namespace N1.N2
Class C
End Class
End Namespace
Namespace N3
Class D
End Class
End Namespace
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC32045: 'N1' has no type parameters and so cannot have type arguments.
Imports N1(Of String)
~~~~~~~~~~~~~
BC31051: Namespace or type 'M1' has already been imported.
Imports N1.M1
~~~~~
BC30572: Alias 'A' is already declared.
Imports A = N1.N2.C
~
BC30002: Type 'C' is not defined.
Imports N1.Gen(Of C)
~
BC32043: Too many type arguments to 'Gen(Of T)'.
Imports N1.Gen(Of Integer, String)
~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30468: Type declaration characters are not valid in this context.
Imports System$.Collections%
~~~~~~~
BC30468: Type declaration characters are not valid in this context.
Imports System$.Collections%
~~~~~~~~~~~~
BC31398: Type characters are not allowed on Imports aliases.
Imports D$ = System.Collections
~~
BC31051: Namespace or type 'N3' has already been imported.
Imports N3
~~
BC40056: Namespace or type specified in the Imports 'System.Cheesecake.Frosting' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports System.Cheesecake.Frosting
~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
' Check that errors are reported for import statements in a single file.
<Fact>
Public Sub ProjectImportErrors()
Dim diagnostics As ImmutableArray(Of Diagnostic) = Nothing
Dim globalImports = GlobalImport.Parse({
"N1(Of String)",
"A = N1",
"B = N1",
"N1.M1",
"N1.M1",
"A = N1.N2.C",
"N3",
"N1.N2",
"N1.Gen(Of C)",
"N1.Gen(Of Integer, String)",
"System$.Collections%",
"D$ = System.Collections",
"N3",
"System.Cheesecake.Frosting"
}, diagnostics)
Assert.NotEqual(diagnostics, Nothing)
CompilationUtils.AssertTheseDiagnostics(diagnostics,
<errors><![CDATA[
BC31398: Error in project-level import 'D$ = System.Collections' at 'D$' : Type characters are not allowed on Imports aliases.
]]></errors>)
' only include the imports with correct syntax:
Dim options = TestOptions.ReleaseDll.WithGlobalImports(globalImports)
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="b.vb"><![CDATA[
Namespace N1
Class Gen(Of T)
End Class
Module M1
End Module
End Namespace
Namespace N1.N2
Class C
End Class
End Namespace
Namespace N3
Class D
End Class
End Namespace
]]></file>
</compilation>, options)
Dim expectedErrors = <errors><![CDATA[
BC30002: Error in project-level import 'N1.Gen(Of C)' at 'C' : Type 'C' is not defined.
BC30468: Error in project-level import 'System$.Collections%' at 'Collections%' : Type declaration characters are not valid in this context.
BC30468: Error in project-level import 'System$.Collections%' at 'System$' : Type declaration characters are not valid in this context.
BC30572: Error in project-level import 'A = N1.N2.C' at 'A' : Alias 'A' is already declared.
BC32043: Error in project-level import 'N1.Gen(Of Integer, String)' at 'N1.Gen(Of Integer, String)' : Too many type arguments to 'Gen(Of T)'.
BC32045: Error in project-level import 'N1(Of String)' at 'N1(Of String)' : 'N1' has no type parameters and so cannot have type arguments.
BC40057: Namespace or type specified in the project-level Imports 'System.Cheesecake.Frosting' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub ModifierErrorsInsideNamespace()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Namespace n1
Shadows Enum e6
x
End Enum
Private Enum e7
x
End Enum
End Namespace
Shadows Enum e8
x
End Enum
Private Enum e9
x
End Enum
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC32200: 'e6' cannot be declared 'Shadows' outside of a class, structure, or interface.
Shadows Enum e6
~~
BC31089: Types declared 'Private' must be inside another type.
Private Enum e7
~~
BC32200: 'e8' cannot be declared 'Shadows' outside of a class, structure, or interface.
Shadows Enum e8
~~
BC31089: Types declared 'Private' must be inside another type.
Private Enum e9
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub ModifierErrorsInsideInterface()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface i
Private Class c1
End Class
Shared Class c2
End Class
MustInherit Class c3
End Class
MustOverride Class c4
End Class
End Interface
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31070: Class in an interface cannot be declared 'Private'.
Private Class c1
~~~~~~~
BC30461: Classes cannot be declared 'Shared'.
Shared Class c2
~~~~~~
BC30461: Classes cannot be declared 'MustOverride'.
MustOverride Class c4
~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
' Checks for accessibility across partial types
<Fact>
Public Sub ModifierErrorsAcrossPartialTypes()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Partial public Class c1
End Class
Partial friend Class c1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30925: Specified access 'Friend' for 'c1' does not match the access 'Public' specified on one of its other partial types.
Partial friend Class c1
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
NotInheritable class A
end class
Partial MustInherit Class A
End class
]]></file>
</compilation>)
Dim expectedErrors2 = <errors><![CDATA[
BC30926: 'MustInherit' cannot be specified for partial type 'A' because it cannot be combined with 'NotInheritable' specified for one of its other partial types.
Partial MustInherit Class A
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation2, expectedErrors2)
End Sub
' Checks for missing partial on classes
<Fact>
Public Sub ModifierWarningsAcrossPartialTypes()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class cc1
End Class
Class cC1
End Class
partial Class Cc1
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40046: class 'cc1' and partial class 'Cc1' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Class cc1
~~~
BC40046: class 'cC1' and partial class 'Cc1' conflict in namespace '<Default>', but are being merged because one of them is declared partial.
Class cC1
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class cc1
End Class
Class cC1
End Class
Class Cc1
End Class
]]></file>
</compilation>)
Dim expectedErrors2 = <errors><![CDATA[
BC30179: class 'cC1' and class 'cc1' conflict in namespace '<Default>'.
Class cC1
~~~
BC30179: class 'Cc1' and class 'cc1' conflict in namespace '<Default>'.
Class Cc1
~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation2, expectedErrors2)
End Sub
<Fact>
Public Sub ErrorTypeNotDefineType()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ErrorType">
<file name="a.vb"><![CDATA[
Class A
Dim n As B
End Class
]]></file>
</compilation>)
Dim errs = compilation.GetDeclarationDiagnostics()
Assert.Equal(1, errs.Length())
Dim err = DirectCast(errs.Single(), Diagnostic)
Assert.Equal(DirectCast(ERRID.ERR_UndefinedType1, Integer), err.Code)
Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
Dim fsym = DirectCast(classA.GetMembers()(1), FieldSymbol)
Dim sym = fsym.Type
Assert.Equal(SymbolKind.ErrorType, sym.Kind)
Assert.Equal("B", sym.Name)
Assert.Null(sym.ContainingAssembly)
Assert.Null(sym.ContainingSymbol)
Assert.Equal(Accessibility.Public, sym.DeclaredAccessibility)
Assert.False(sym.IsShared)
Assert.False(sym.IsMustOverride)
Assert.False(sym.IsNotOverridable)
Assert.False(sym.IsValueType)
Assert.True(sym.IsReferenceType)
Assert.Equal(0, sym.Interfaces.Length())
Assert.Null(sym.BaseType)
Assert.Equal("B", DirectCast(sym, ErrorTypeSymbol).ConstructedFrom.ToTestDisplayString())
Assert.Equal(0, sym.GetAttributes().Length()) ' Enumerable.Empty<SymbolAttribute>()
Assert.Equal(0, sym.GetMembers().Length()) ' Enumerable.Empty<Symbol>()
Assert.Equal(0, sym.GetMembers(String.Empty).Length())
Assert.Equal(0, sym.GetTypeMembers().Length()) ' Enumerable.Empty<NamedTypeSymbol>()
Assert.Equal(0, sym.GetTypeMembers(String.Empty).Length())
Assert.Equal(0, sym.GetTypeMembers(String.Empty, 0).Length())
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessBaseClassThroughNestedClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
End Class
End Class
Class B
Inherits B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31447: Class 'B' cannot reference itself in Inherits clause.
Inherits B.C.X
~
]]></errors>)
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessBaseClassThroughNestedClass2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
End Class
End Class
Class B
Inherits C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
Inherits C.X
~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
Public Class A
End Class
End Class
End Class
Class B
Inherits B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31447: Class 'B' cannot reference itself in Inherits clause.
Inherits B.C.X
~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass4()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
Public Class A
End Class
End Class
End Class
Class B
Inherits C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
Inherits C.X
~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass5()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface A
Class X
End Class
End Interface
Class B
Inherits C.X
Public Interface C
Inherits A
End Interface
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
Inherits C.X
~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass6()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Class X
End Class
End Class
Class B
Inherits C(Of Integer).X
Public Class C(Of T)
Inherits A
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C(Of Integer)' in Inherits clause.
Inherits C(Of Integer).X
~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass7()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Class X
Class A
End Class
End Class
End Class
Class B
Inherits D.X
Public Class C
Inherits A
End Class
End Class
Class D
Inherits B.C
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'B' causes cyclic dependency:
'B.C' is nested in 'B'.
Base type of 'B' needs 'B.C' to be resolved.
Inherits D.X
~~~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass8()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Class X
Class A
End Class
End Class
End Class
Class B
Inherits D
Public Class C
Inherits A
End Class
End Class
Class D
Inherits B.C.X
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'B.C' causes cyclic dependency:
Base type of 'D' needs 'B.C' to be resolved.
Base type of 'B.C' needs 'D' to be resolved.
Inherits A
~
BC30002: Type 'B.C.X' is not defined.
Inherits B.C.X
~~~~~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClass9()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Class X
Class A
End Class
End Class
End Class
Class B
Inherits D.C.X
Public Class C
Inherits A
End Class
End Class
Class D
Inherits B
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'B' cannot reference its nested type 'B.C' in Inherits clause.
Inherits D.C.X
~~~
]]></errors>)
End Sub
<Fact>
Public Sub AccessBaseClassThroughNestedClassA()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface IIndia(Of T)
End Interface
Class Alpha
Class Bravo
End Class
End Class
Class Charlie
Inherits Alpha
Implements IIndia(Of Charlie.Bravo)
End Class
Class Echo
Implements IIndia(Of Echo)
End Class
Class Golf
Implements IIndia(Of Golf.Hotel)
Class Hotel
End Class
End Class
Class Juliet
Implements IIndia(Of Juliet.Kilo.Lima)
Class Kilo
Class Lima
End Class
End Class
End Class
Class November(Of T)
End Class
Class Oscar
Inherits November(Of Oscar)
End Class
Class Papa
Inherits November(Of Papa.Quebec)
Class Quebec
End Class
End Class
Class Romeo
Inherits November(Of Romeo.Sierra.Tango)
Class Sierra
Class Tango
End Class
End Class
End Class
Class Uniform
Implements Uniform.IIndigo
Interface IIndigo
End Interface
End Class
Interface IBlah
Inherits Victor.IIdiom
End Interface
Class Victor
Implements IBlah
Interface IIdiom
End Interface
End Class
Class Xray
Implements Yankee.IIda
Class Yankee
Inherits Xray
Interface IIda
End Interface
End Class
End Class
Class Beta
Inherits Gamma
Class Gamma
End Class
End Class
Class Delta
Inherits Delta.Epsilon
Class Epsilon
End Class
End Class
Class Zeta(Of T)
Inherits Eta(Of Beta)
End Class
Class Eta(Of T)
Inherits Zeta(Of Delta)
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31446: Class 'Beta' cannot reference its nested type 'Beta.Gamma' in Inherits clause.
Inherits Gamma
~~~~~
BC31447: Class 'Delta' cannot reference itself in Inherits clause.
Inherits Delta.Epsilon
~~~~~
BC30257: Class 'Zeta(Of T)' cannot inherit from itself:
'Zeta(Of T)' inherits from 'Eta(Of Beta)'.
'Eta(Of Beta)' inherits from 'Zeta(Of T)'.
Inherits Eta(Of Beta)
~~~~~~~~~~~~
]]></errors>)
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessInterfaceThroughNestedClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Interface X
End Interface
End Class
Class B
Implements B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>
)
CompilationUtils.AssertNoErrors(compilation)
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessBaseClassThroughNestedClassSemantic_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
End Class
End Class
Class B
Inherits B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>
)
' resolve X from 'Inherits B.C.X' first, then 'Inherits A'
Dim tree = compilation.SyntaxTrees(0)
Dim model = compilation.GetSemanticModel(tree)
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessBaseClassThroughNestedClassSemantic_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Class X
End Class
End Class
Class B
Inherits B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>
)
' resolve 'Inherits A', then X from 'Inherits B.C.X' first
Dim tree = compilation.SyntaxTrees(0)
Dim model = compilation.GetSemanticModel(tree)
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessInterfaceThroughNestedClassSemantic_1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Interface X
End Interface
End Class
Class B
Implements B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>
)
' resolve X from 'Inherits B.C.X' first, then 'Implements A'
Dim tree = compilation.SyntaxTrees(0)
Dim model = compilation.GetSemanticModel(tree)
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
End Sub
<WorkItem(539568, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/539568")>
<Fact>
Public Sub AccessInterfaceThroughNestedClassSemantic_2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class A
Public Interface X
End Interface
End Class
Class B
Implements B.C.X
Public Class C
Inherits A
End Class
End Class
]]></file>
</compilation>
)
' resolve 'Inherits A', then X from 'Implements B.C.X' first
Dim tree = compilation.SyntaxTrees(0)
Dim model = compilation.GetSemanticModel(tree)
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 8).Parent, ExpressionSyntax))
model.GetSemanticInfoSummary(CType(tree.FindNodeOrTokenByKind(SyntaxKind.IdentifierToken, 6).Parent, ExpressionSyntax))
End Sub
<Fact>
Public Sub InterfaceModifierErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Static Interface i1
End Interface
Static Class c1
End Class
Static Structure s1
End Structure
Static Enum e1
dummy
End Enum
Static Delegate Sub s()
Static Module m
End Module
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30397: 'Static' is not valid on an Interface declaration.
Static Interface i1
~~~~~~
BC30461: Classes cannot be declared 'Static'.
Static Class c1
~~~~~~
BC30395: 'Static' is not valid on a Structure declaration.
Static Structure s1
~~~~~~
BC30396: 'Static' is not valid on an Enum declaration.
Static Enum e1
~~~~~~
BC30385: 'Static' is not valid on a Delegate declaration.
Static Delegate Sub s()
~~~~~~
BC31052: Modules cannot be declared 'Static'.
Static Module m
~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub BaseClassErrors1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="1.vb"><![CDATA[
Option Strict On
Class C1
Inherits Object, Object
End Class
Class C11
Inherits System.Exception
Inherits System.Exception
End Class
Class C2
Inherits System.Collections.ArrayList, System.Collections.Generic.List(Of Integer)
End Class
Class C3(Of T)
Inherits T
End Class
Partial Class C4
Inherits System.Collections.ArrayList
End Class
NotInheritable Class NI
End class
]]></file>
<file name="a.vb"><![CDATA[
Option Strict Off
Public Partial Class C4
Inherits System.Collections.Generic.List(Of Integer)
End Class
Interface I1
End Interface
Class C5
Inherits I1
End Class
Class C6
Inherits System.Guid
End Class
Class C7
Inherits NI
End Class
Class C8
Inherits System.Delegate
End Class
Module M1
Inherits System.Object
End Module
Structure S1
Inherits System.Collections.Hashtable
End Structure
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
Inherits Object, Object
~~~~~~~~~~~~~~~~~~~~~~~
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
Inherits System.Exception
~~~~~~~~~~~~~~~~~~~~~~~~~
BC30121: 'Inherits' can appear only once within a 'Class' statement and can only specify one class.
Inherits System.Collections.ArrayList, System.Collections.Generic.List(Of Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC32055: Class 'C3' cannot inherit from a type parameter.
Inherits T
~
BC30928: Base class 'List(Of Integer)' specified for class 'C4' cannot be different from the base class 'ArrayList' of one of its other partial types.
Inherits System.Collections.Generic.List(Of Integer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30258: Classes can inherit only from other classes.
Inherits I1
~~
BC30258: Classes can inherit only from other classes.
Inherits System.Guid
~~~~~~~~~~~
BC30299: 'C7' cannot inherit from class 'NI' because 'NI' is declared 'NotInheritable'.
Inherits NI
~~
BC30015: Inheriting from '[Delegate]' is not valid.
Inherits System.Delegate
~~~~~~~~~~~~~~~
BC30230: 'Inherits' not valid in Modules.
Inherits System.Object
~~~~~~~~~~~~~~~~~~~~~~
BC30628: Structures cannot have 'Inherits' statements.
Inherits System.Collections.Hashtable
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BaseClassErrors2a()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class B(Of T)
Class Inner
End Class
End Class
Class D1
Inherits B(Of Integer)
Dim x As B(Of D1.Inner)
End Class
Class D2
Inherits B(Of D2.Inner)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30002: Type 'D2.Inner' is not defined.
Inherits B(Of D2.Inner)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact()>
Public Sub BaseClassErrors2b()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XB(Of T)
Class Inner2
End Class
End Class
Class XC
Inherits XB(Of XD.Inner2)
End Class
Class XD
Inherits XB(Of XC.Inner2)
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC31449: Inherits clause of class 'XC' causes cyclic dependency:
Base type of 'XD' needs 'XC' to be resolved.
Base type of 'XC' needs 'XD' to be resolved.
Inherits XB(Of XD.Inner2)
~~~~~~~~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
Inherits XB(Of XC.Inner2)
~~~~~~~~~
]]></errors>)
Next
End Sub
<Fact()>
Public Sub BaseClassErrors2c()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XB(Of T)
Class Inner2
End Class
End Class
Class X0
Inherits XB(Of X1.Inner2)
End Class
Class X1
Inherits XB(Of X2.Inner2)
End Class
Class X2
Inherits XB(Of X3.Inner2)
End Class
Class X3
Inherits XB(Of X4.Inner2)
End Class
Class X4
Inherits XB(Of X5.Inner2)
End Class
Class X5
Inherits XB(Of X6.Inner2)
End Class
Class X6
Inherits XB(Of X7.Inner2)
End Class
Class X7
Inherits XB(Of X8.Inner2)
End Class
Class X8
Inherits XB(Of X9.Inner2)
End Class
Class X9
Inherits XB(Of X0.Inner2)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'X0' causes cyclic dependency:
Base type of 'X1' needs 'X2' to be resolved.
Base type of 'X2' needs 'X3' to be resolved.
Base type of 'X3' needs 'X4' to be resolved.
Base type of 'X4' needs 'X5' to be resolved.
Base type of 'X5' needs 'X6' to be resolved.
Base type of 'X6' needs 'X7' to be resolved.
Base type of 'X7' needs 'X8' to be resolved.
Base type of 'X8' needs 'X9' to be resolved.
Base type of 'X9' needs 'X0' to be resolved.
Base type of 'X0' needs 'X1' to be resolved.
Inherits XB(Of X1.Inner2)
~~~~~~~~~~~~~~~~
BC30002: Type 'X0.Inner2' is not defined.
Inherits XB(Of X0.Inner2)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
Next
End Sub
<Fact()>
Public Sub BaseClassErrors2d()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XB(Of T)
Class Inner2
End Class
End Class
Class X0
Inherits XB(Of X9.Inner2) ' X0
End Class
Class X1
Inherits XB(Of X9.Inner2) ' X1
End Class
Class X2
Inherits XB(Of X1.Inner2)
End Class
Class X3
Inherits XB(Of X2.Inner2)
End Class
Class X4
Inherits XB(Of X3.Inner2)
End Class
Class X5
Inherits XB(Of X4.Inner2)
End Class
Class X6
Inherits XB(Of X5.Inner2)
End Class
Class X7
Inherits XB(Of X6.Inner2)
End Class
Class X8
Inherits XB(Of X7.Inner2)
End Class
Class X9
Inherits XB(Of X8.Inner2)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'X1' causes cyclic dependency:
Base type of 'X9' needs 'X8' to be resolved.
Base type of 'X8' needs 'X7' to be resolved.
Base type of 'X7' needs 'X6' to be resolved.
Base type of 'X6' needs 'X5' to be resolved.
Base type of 'X5' needs 'X4' to be resolved.
Base type of 'X4' needs 'X3' to be resolved.
Base type of 'X3' needs 'X2' to be resolved.
Base type of 'X2' needs 'X1' to be resolved.
Base type of 'X1' needs 'X9' to be resolved.
Inherits XB(Of X9.Inner2) ' X1
~~~~~~~~~~~~~~~~
BC30002: Type 'X1.Inner2' is not defined.
Inherits XB(Of X1.Inner2)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
Next
End Sub
<Fact()>
Public Sub BaseClassErrors2e()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XB(Of T)
Class Inner2
End Class
End Class
Class XC
Inherits XB(Of XD.Inner2)
End Class
Class XD
Inherits XB(Of XC.Inner2)
End Class
Class XE
Inherits XB(Of XC.Inner2)
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC31449: Inherits clause of class 'XC' causes cyclic dependency:
Base type of 'XD' needs 'XC' to be resolved.
Base type of 'XC' needs 'XD' to be resolved.
Inherits XB(Of XD.Inner2)
~~~~~~~~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
Inherits XB(Of XC.Inner2)
~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
Inherits XB(Of XC.Inner2)
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
Next
End Sub
<Fact()>
Public Sub BaseClassErrors2f()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XC
Inherits XD.Inner2
End Class
Class XD
Inherits XC.Inner2
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC30002: Type 'XD.Inner2' is not defined.
Inherits XD.Inner2
~~~~~~~~~
BC31449: Inherits clause of class 'XC' causes cyclic dependency:
Base type of 'XD' needs 'XC' to be resolved.
Base type of 'XC' needs 'XD' to be resolved.
Inherits XD.Inner2
~~~~~~~~~
BC30002: Type 'XC.Inner2' is not defined.
Inherits XC.Inner2
~~~~~~~~~
]]></errors>)
Next
End Sub
<Fact()>
Public Sub BaseClassErrors2g()
' There is a race known in base type detection
For i = 0 To 50
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="b.vb"><![CDATA[
Class XC
Inherits XD.Inner2
End Class
Class XD
Inherits XC.Inner2
Class Inner2
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation,
<errors><![CDATA[
BC30002: Type 'XC.Inner2' is not defined.
Inherits XC.Inner2
~~~~~~~~~
BC31449: Inherits clause of class 'XD' causes cyclic dependency:
'XD.Inner2' is nested in 'XD'.
Base type of 'XD' needs 'XD.Inner2' to be resolved.
Inherits XC.Inner2
~~~~~~~~~
]]></errors>)
Next
End Sub
<Fact>
Public Sub FieldErrors1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Partial Class C
Public Public p as Integer
Public Private q as Integer
Private MustOverride r as Integer
Dim s
End Class
]]></file>
<file name="b.vb"><![CDATA[
Option Strict On
Public Partial Class C
Dim x% As Integer
Dim t ' error only if Option Strict is on
Dim u? as Integer?
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30178: Specifier is duplicated.
Public Public p as Integer
~~~~~~
BC30176: Only one of 'Public', 'Private', 'Protected', 'Friend', 'Protected Friend', or 'Private Protected' can be specified.
Public Private q as Integer
~~~~~~~
BC30235: 'MustOverride' is not valid on a member variable declaration.
Private MustOverride r as Integer
~~~~~~~~~~~~
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
Dim x% As Integer
~~
BC30209: Option Strict On requires all variable declarations to have an 'As' clause.
Dim t ' error only if Option Strict is on
~
BC33100: Nullable modifier cannot be specified on both a variable and its type.
Dim u? as Integer?
~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub MethodErrors1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Public Partial Class C
Protected Private Sub m1()
End Sub
NotOverridable MustOverride Sub m2()
NotOverridable Overridable Sub m3()
End Sub
Overridable Overrides Sub m4()
End Sub
Overridable Shared Sub m5()
End Sub
Public Function m6()
End Function
Public Function m7%() as string
End Function
Shadows Overloads Sub m8()
End Sub
Sub m9(Of T$)()
End Sub
Public MustInherit Sub m10()
End Sub
End Class
]]></file>
<file name="b.vb"><![CDATA[
Option Strict Off
Public Partial Class C
Public Sub x$()
End Sub
End Class
]]></file>
</compilation>, parseOptions:=TestOptions.Regular.WithLanguageVersion(LanguageVersion.VisualBasic15))
Dim expectedErrors = <errors><![CDATA[
BC36716: Visual Basic 15.0 does not support Private Protected.
Protected Private Sub m1()
~~~~~~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
NotOverridable MustOverride Sub m2()
~~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
NotOverridable MustOverride Sub m2()
~~
BC30177: Only one of 'NotOverridable', 'MustOverride', or 'Overridable' can be specified.
NotOverridable Overridable Sub m3()
~~~~~~~~~~~
BC31088: 'NotOverridable' cannot be specified for methods that do not override another method.
NotOverridable Overridable Sub m3()
~~
BC30730: Methods declared 'Overrides' cannot be declared 'Overridable' because they are implicitly overridable.
Overridable Overrides Sub m4()
~~~~~~~~~
BC30501: 'Shared' cannot be combined with 'Overridable' on a method declaration.
Overridable Shared Sub m5()
~~~~~~~~~~~
BC30210: Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.
Public Function m6()
~~
BC30302: Type character '%' cannot be used in a declaration with an explicit type.
Public Function m7%() as string
~~~
BC31408: 'Overloads' and 'Shadows' cannot be combined.
Shadows Overloads Sub m8()
~~~~~~~~~
BC32041: Type character cannot be used in a type parameter declaration.
Sub m9(Of T$)()
~~
BC30242: 'MustInherit' is not valid on a method declaration.
Public MustInherit Sub m10()
~~~~~~~~~~~
BC30303: Type character cannot be used in a 'Sub' declaration because a 'Sub' doesn't return a value.
Public Sub x$()
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub MethodErrorsInInNotInheritableClass()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
NotInheritable Class c
Overridable Sub s1()
End Sub
NotOverridable Sub s2()
End Sub
MustOverride Sub s3()
Default Sub s4()
End Sub
Protected Sub s5()
End Sub
Protected Friend Sub s6()
End Sub
Overridable Sub New()
End Sub
NotOverridable Sub New(ByVal i1 As Integer)
End Sub
MustOverride Sub New(ByVal i1 As Integer, ByVal i2 As Integer)
Default Sub s4(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer)
End Sub
Protected Sub s5(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer, ByVal i4 As Integer)
End Sub
Protected Friend Sub s6(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer, ByVal i4 As Integer, ByVal i5 As Integer)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
Overridable Sub s1()
~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
NotOverridable Sub s2()
~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
MustOverride Sub s3()
~~~~~~~~~~~~
BC30242: 'Default' is not valid on a method declaration.
Default Sub s4()
~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'Overridable'.
Overridable Sub New()
~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'NotOverridable'.
NotOverridable Sub New(ByVal i1 As Integer)
~~~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
MustOverride Sub New(ByVal i1 As Integer, ByVal i2 As Integer)
~~~~~~~~~~~~
BC30242: 'Default' is not valid on a method declaration.
Default Sub s4(ByVal i1 As Integer, ByVal i2 As Integer, ByVal i3 As Integer)
~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub MethodErrorsInInterfaces1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Imports System.Collections.Generic
Public Interface i1
Private Sub m1()
Protected Sub m2()
Friend Sub m3()
Static Sub m4()
Shared Sub m5()
Shadows Sub m6()
MustInherit Sub m7()
Overloads Sub m8()
NotInheritable Sub m9()
Overrides Sub m10()
NotOverridable Sub m11()
MustOverride Sub m12()
ReadOnly Sub m13()
WriteOnly Sub m14()
Dim Sub m15()
Const Sub m16()
Default Sub m17()
WithEvents Sub m18()
Widening Sub m19()
Narrowing Sub m20()
sub m21 implements IEnumerator.MoveNext
sub m22 handles DownButton.Click
Iterator Function I1() as IEnumerable(of Integer)
End Interface
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30270: 'Private' is not valid on an interface method declaration.
Private Sub m1()
~~~~~~~
BC30270: 'Protected' is not valid on an interface method declaration.
Protected Sub m2()
~~~~~~~~~
BC30270: 'Friend' is not valid on an interface method declaration.
Friend Sub m3()
~~~~~~
BC30242: 'Static' is not valid on a method declaration.
Static Sub m4()
~~~~~~
BC30270: 'Shared' is not valid on an interface method declaration.
Shared Sub m5()
~~~~~~
BC30242: 'MustInherit' is not valid on a method declaration.
MustInherit Sub m7()
~~~~~~~~~~~
BC30242: 'NotInheritable' is not valid on a method declaration.
NotInheritable Sub m9()
~~~~~~~~~~~~~~
BC30270: 'Overrides' is not valid on an interface method declaration.
Overrides Sub m10()
~~~~~~~~~
BC30270: 'NotOverridable' is not valid on an interface method declaration.
NotOverridable Sub m11()
~~~~~~~~~~~~~~
BC30270: 'MustOverride' is not valid on an interface method declaration.
MustOverride Sub m12()
~~~~~~~~~~~~
BC30242: 'ReadOnly' is not valid on a method declaration.
ReadOnly Sub m13()
~~~~~~~~
BC30242: 'WriteOnly' is not valid on a method declaration.
WriteOnly Sub m14()
~~~~~~~~~
BC30242: 'Dim' is not valid on a method declaration.
Dim Sub m15()
~~~
BC30242: 'Const' is not valid on a method declaration.
Const Sub m16()
~~~~~
BC30242: 'Default' is not valid on a method declaration.
Default Sub m17()
~~~~~~~
BC30242: 'WithEvents' is not valid on a method declaration.
WithEvents Sub m18()
~~~~~~~~~~
BC30242: 'Widening' is not valid on a method declaration.
Widening Sub m19()
~~~~~~~~
BC30242: 'Narrowing' is not valid on a method declaration.
Narrowing Sub m20()
~~~~~~~~~
BC30270: 'implements' is not valid on an interface method declaration.
sub m21 implements IEnumerator.MoveNext
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BC30270: 'handles' is not valid on an interface method declaration.
sub m22 handles DownButton.Click
~~~~~~~~~~~~~~~~~~~~~~~~
BC30506: Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
sub m22 handles DownButton.Click
~~~~~~~~~~
BC30270: 'Iterator' is not valid on an interface method declaration.
Iterator Function I1() as IEnumerable(of Integer)
~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
<WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
<WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
Public Sub UnsupportedHandles_01()
Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
<file name="a.vb"><![CDATA[
Public Class DerivedClass
Inherits BaseClass
Private Shared Sub Handler() Handles EventHost.SomeEvent
End Sub
End Class
Public MustInherit Class BaseClass
Protected Shared WithEvents EventHost As EventHost
End Class
Public Class EventHost
Public Event SomeEvent()
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
Private Shared Sub Handler() Handles EventHost.SomeEvent
~~~~~~~~~
]]></errors>
compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
compilation.AssertTheseEmitDiagnostics(expectedErrors)
End Sub
<Fact>
<WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
<WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
Public Sub UnsupportedHandles_02()
Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
<file name="a.vb"><![CDATA[
Public Class DerivedClass
Inherits BaseClass
Private Sub Handler() Handles EventHost.SomeEvent
End Sub
End Class
Public MustInherit Class BaseClass
Protected Shared WithEvents EventHost As EventHost
End Class
Public Class EventHost
Public Event SomeEvent()
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30594: Events of shared WithEvents variables cannot be handled by non-shared methods.
Private Sub Handler() Handles EventHost.SomeEvent
~~~~~~~~~
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
Private Sub Handler() Handles EventHost.SomeEvent
~~~~~~~~~
]]></errors>
compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
compilation.AssertTheseEmitDiagnostics(expectedErrors)
End Sub
<Fact>
<WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
<WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
Public Sub UnsupportedHandles_03()
Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
<file name="a.vb"><![CDATA[
Public Class DerivedClass
Inherits BaseClass
Private Shared Sub Handler() Handles EventHost.SomeEvent, EventHost2.SomeEvent
End Sub
Protected Shared WithEvents EventHost2 As EventHost
End Class
Public MustInherit Class BaseClass
Protected Shared WithEvents EventHost As EventHost
End Class
Public Class EventHost
Public Event SomeEvent()
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
Private Shared Sub Handler() Handles EventHost.SomeEvent, EventHost2.SomeEvent
~~~~~~~~~
]]></errors>
compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
compilation.AssertTheseEmitDiagnostics(expectedErrors)
End Sub
<Fact>
<WorkItem(50472, "https://github.com/dotnet/roslyn/issues/50472")>
<WorkItem(1263908, "https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1263908")>
Public Sub UnsupportedHandles_04()
Dim compilation = CompilationUtils.CreateCompilation(
<compilation>
<file name="a.vb"><![CDATA[
Public Class DerivedClass
Inherits BaseClass
Private Shared Sub Handler() Handles EventHost2.SomeEvent, EventHost.SomeEvent
End Sub
Protected Shared WithEvents EventHost2 As EventHost
End Class
Public MustInherit Class BaseClass
Protected Shared WithEvents EventHost As EventHost
End Class
Public Class EventHost
Public Event SomeEvent()
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC36611: Events of shared WithEvents variables cannot be handled by methods in a different type.
Private Shared Sub Handler() Handles EventHost2.SomeEvent, EventHost.SomeEvent
~~~~~~~~~
]]></errors>
compilation.AssertTheseDeclarationDiagnostics(expectedErrors)
compilation.AssertTheseEmitDiagnostics(expectedErrors)
End Sub
<Fact>
Public Sub ErrorTypeSymbol_DefaultMember_CodeCoverageItems()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Coverage">
<file name="a.vb"><![CDATA[
Class A
Dim n As B
End Class
]]></file>
</compilation>)
Dim errs = compilation.GetDeclarationDiagnostics()
Assert.Equal(1, Enumerable.Count(Of Diagnostic)(errs))
Dim err As Diagnostic = Enumerable.Single(Of Diagnostic)(errs)
Assert.Equal(&H7532, err.Code)
Dim fieldSymb As FieldSymbol = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single.GetMembers.Item(1), FieldSymbol)
Dim symbType As TypeSymbol = fieldSymb.Type
Dim errTypeSym As ErrorTypeSymbol = DirectCast(symbType, ErrorTypeSymbol)
Assert.Equal(SymbolKind.ErrorType, errTypeSym.Kind)
Assert.Equal("B", errTypeSym.Name)
Assert.Null(errTypeSym.ContainingAssembly)
Assert.Null(errTypeSym.ContainingSymbol)
Assert.Equal(Accessibility.Public, errTypeSym.DeclaredAccessibility)
Assert.False(errTypeSym.IsShared)
Assert.False(errTypeSym.IsMustOverride)
Assert.False(errTypeSym.IsNotOverridable)
Assert.False(errTypeSym.IsValueType)
Assert.True(errTypeSym.IsReferenceType)
Assert.Equal(SpecializedCollections.EmptyCollection(Of String), errTypeSym.MemberNames)
Assert.Equal(ImmutableArray.Create(Of Symbol)(), errTypeSym.GetMembers)
Assert.Equal(ImmutableArray.Create(Of Symbol)(), errTypeSym.GetMembers("B"))
Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers)
Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers("B"))
Assert.Equal(ImmutableArray.Create(Of NamedTypeSymbol)(), errTypeSym.GetTypeMembers("B", 1))
Assert.Equal(TypeKind.Error, errTypeSym.TypeKind)
Assert.Equal(ImmutableArray.Create(Of Location)(), errTypeSym.Locations)
Assert.Equal(ImmutableArray.Create(Of SyntaxReference)(), errTypeSym.DeclaringSyntaxReferences)
Assert.Equal(0, errTypeSym.Arity)
Assert.Null(errTypeSym.EnumUnderlyingType)
Assert.Equal("B", errTypeSym.Name)
Assert.Equal(0, errTypeSym.TypeArguments.Length)
Assert.Equal(0, errTypeSym.TypeParameters.Length)
Assert.Equal(errTypeSym.CandidateSymbols.Length, errTypeSym.IErrorTypeSymbol_CandidateSymbols.Length)
End Sub
<Fact>
Public Sub ConstructorErrors1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Public Partial Class C
Public Overridable Sub New(x as Integer)
End Sub
MustOverride Sub New(y as String)
NotOverridable Friend Sub New(z as Object)
End Sub
Private Shadows Sub New(z as Object, a as integer)
End Sub
Protected Overloads Sub New(z as Object, a as string)
End Sub
Public Static Sub New(z as string, a as Object)
End Sub
Overrides Sub New()
End Sub
End Class
]]></file>
<file name="b.vb"><![CDATA[
Option Strict Off
Public Partial Class C
End Class
Public Interface I
Sub New()
End Interface
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30364: 'Sub New' cannot be declared 'Overridable'.
Public Overridable Sub New(x as Integer)
~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'MustOverride'.
MustOverride Sub New(y as String)
~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'NotOverridable'.
NotOverridable Friend Sub New(z as Object)
~~~~~~~~~~~~~~
BC30364: 'Sub New' cannot be declared 'Shadows'.
Private Shadows Sub New(z as Object, a as integer)
~~~~~~~
BC32040: The 'Overloads' keyword is used to overload inherited members; do not use the 'Overloads' keyword when overloading 'Sub New'.
Protected Overloads Sub New(z as Object, a as string)
~~~~~~~~~
BC30242: 'Static' is not valid on a method declaration.
Public Static Sub New(z as string, a as Object)
~~~~~~
BC30283: 'Sub New' cannot be declared 'Overrides'.
Overrides Sub New()
~~~~~~~~~
BC30363: 'Sub New' cannot be declared in an interface.
Sub New()
~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub SharedConstructorErrors1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Public Class C
Public Shared Sub New() '1
End Sub
Private Shared Sub New() '2
End Sub
Friend Shared Sub New() '3
End Sub
Shared Protected Sub New() '4
End Sub
Shared Protected Friend Sub New() '5
End Sub
Shared Sub New(x as integer) '6
End Sub
End Class
]]></file>
<file name="b.vb"><![CDATA[
Option Strict Off
Public Module M
Public Sub New() '8
End Sub
Private Sub New() '9
End Sub
Friend Sub New() '10
End Sub
Protected Sub New() '11
End Sub
Protected Friend Sub New() '12
End Sub
Sub New(x as Integer, byref y as string) '13
End Sub
End Module
]]></file>
</compilation>)
Dim expectedErrors =
<errors><![CDATA[
BC30480: Shared 'Sub New' cannot be declared 'Public'.
Public Shared Sub New() '1
~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
Public Shared Sub New() '1
~~~
BC30480: Shared 'Sub New' cannot be declared 'Private'.
Private Shared Sub New() '2
~~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
Private Shared Sub New() '2
~~~
BC30480: Shared 'Sub New' cannot be declared 'Friend'.
Friend Shared Sub New() '3
~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
Friend Shared Sub New() '3
~~~
BC30480: Shared 'Sub New' cannot be declared 'Protected'.
Shared Protected Sub New() '4
~~~~~~~~~
BC30269: 'Private Shared Sub New()' has multiple definitions with identical signatures.
Shared Protected Sub New() '4
~~~
BC30480: Shared 'Sub New' cannot be declared 'Protected Friend'.
Shared Protected Friend Sub New() '5
~~~~~~~~~~~~~~~~
BC30479: Shared 'Sub New' cannot have any parameters.
Shared Sub New(x as integer) '6
~~~~~~~~~~~~~~
BC30480: Shared 'Sub New' cannot be declared 'Public'.
Public Sub New() '8
~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
Public Sub New() '8
~~~
BC30480: Shared 'Sub New' cannot be declared 'Private'.
Private Sub New() '9
~~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
Private Sub New() '9
~~~
BC30480: Shared 'Sub New' cannot be declared 'Friend'.
Friend Sub New() '10
~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
Friend Sub New() '10
~~~
BC30433: Methods in a Module cannot be declared 'Protected'.
Protected Sub New() '11
~~~~~~~~~
BC30269: 'Private Sub New()' has multiple definitions with identical signatures.
Protected Sub New() '11
~~~
BC30433: Methods in a Module cannot be declared 'Protected Friend'.
Protected Friend Sub New() '12
~~~~~~~~~~~~~~~~
BC30479: Shared 'Sub New' cannot have any parameters.
Sub New(x as Integer, byref y as string) '13
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub ParameterErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Strict On
Public Partial Class C
Public Sub m1(x)
End Sub
Public Sub m2(byref byval k as Integer)
End Sub
Public Sub m3(byref byref k as Integer)
End Sub
Public Sub m4(ByRef ParamArray x() as string)
End Sub
Public Sub m5(ParamArray q as Integer)
End Sub
End Class
]]></file>
<file name="b.vb"><![CDATA[
Option Strict Off
Public Partial Class C
Public Sub m8(x, y$)
End Sub
Public Sub m9(x, z As String, w)
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors = <errors><![CDATA[
BC30211: Option Strict On requires that all method parameters have an 'As' clause.
Public Sub m1(x)
~
BC30641: 'ByVal' and 'ByRef' cannot be combined.
Public Sub m2(byref byval k as Integer)
~~~~~
BC30785: Parameter specifier is duplicated.
Public Sub m3(byref byref k as Integer)
~~~~~
BC30667: ParamArray parameters must be declared 'ByVal'.
Public Sub m4(ByRef ParamArray x() as string)
~~~~~~~~~~
BC30050: ParamArray parameter must be an array.
Public Sub m5(ParamArray q as Integer)
~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
Public Sub m8(x, y$)
~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
Public Sub m9(x, z As String, w)
~
BC30529: All parameters must be explicitly typed if any of them are explicitly typed.
Public Sub m9(x, z As String, w)
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation, expectedErrors)
End Sub
<Fact>
Public Sub MoreParameterErrors()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="MoreParameterErrors">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Function F1(f1 as integer) as Integer
return 0
End Function
Function F1(i1 as integer, I1 as integer) as Integer
return 0
End Function
Function F1(of T1) (i1 as integer, t1 as integer) as Integer
return 0
End Function
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30530: Parameter cannot have the same name as its defining function.
Function F1(f1 as integer) as Integer
~~
BC30237: Parameter already declared with name 'I1'.
Function F1(i1 as integer, I1 as integer) as Integer
~~
BC32089: 't1' is already declared as a type parameter of this method.
Function F1(of T1) (i1 as integer, t1 as integer) as Integer
~~
]]></expected>)
End Sub
<Fact>
Public Sub LocalDeclarationSameAsFunctionNameError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="LocalDeclarationSameAsFunctionNameError">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Function F1() as Integer
dim f1 as integer = 0
do
dim f1 As integer = 0
loop
return 0
End Function
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30290: Local variable cannot have the same name as the function containing it.
dim f1 as integer = 0
~~
BC30290: Local variable cannot have the same name as the function containing it.
dim f1 As integer = 0
~~
]]></expected>)
End Sub
<Fact>
Public Sub DuplicateLocalDeclarationError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Function F1() as Integer
dim i as long = 0
dim i as integer = 0
dim j,j as integer
return 0
End Function
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30288: Local variable 'i' is already declared in the current block.
dim i as integer = 0
~
BC42024: Unused local variable: 'j'.
dim j,j as integer
~
BC30288: Local variable 'j' is already declared in the current block.
dim j,j as integer
~
BC42024: Unused local variable: 'j'.
dim j,j as integer
~
]]></expected>)
End Sub
<Fact>
Public Sub LocalDeclarationTypeParameterError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Function F1(of T)() as Integer
dim t as integer = 0
do
dim t as integer = 0
loop
return 0
End Function
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC32089: 't' is already declared as a type parameter of this method.
dim t as integer = 0
~
BC30616: Variable 't' hides a variable in an enclosing block.
dim t as integer = 0
~
]]></expected>)
End Sub
<Fact>
Public Sub LocalDeclarationParameterError()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="DuplicateLocalDeclarationError">
<file name="a.vb"><![CDATA[
Imports System
Module M1
Function F1(p as integer) as Integer
dim p as integer = 0
do
dim p as integer = 0
loop
return 0
End Function
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30734: 'p' is already declared as a parameter of this method.
dim p as integer = 0
~
BC30616: Variable 'p' hides a variable in an enclosing block.
dim p as integer = 0
~
]]></expected>)
End Sub
' Checks for duplicate type parameters
<Fact>
Public Sub DuplicateMethodTypeParameterErrors()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class BB(Of T)
Class A(Of t1)
Public t1 As Integer
Sub f(Of t, t)()
End Sub
End Class
End Class
Class a(Of t)
Inherits BB(Of t)
Class b
Class c(Of t)
End Class
End Class
End Class
Class base(Of T)
Function TEST(Of T)(ByRef X As T)
Return Nothing
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32054: 't1' has the same name as a type parameter.
Public t1 As Integer
~~
BC40048: Type parameter 't' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
Sub f(Of t, t)()
~
BC32049: Type parameter already declared with name 't'.
Sub f(Of t, t)()
~
BC40048: Type parameter 't' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
Class c(Of t)
~
BC40048: Type parameter 'T' has the same name as a type parameter of an enclosing type. Enclosing type's type parameter will be shadowed.
Function TEST(Of T)(ByRef X As T)
~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(527182, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/527182")>
Public Sub DuplicatedNameWithDifferentCases()
Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="AAA">
<file name="a.vb"><![CDATA[
Module Module1
Dim S1 As String
Dim s1 As String
Dim S1 As Integer
Function MyFunc() As Integer
Return 0
End Function
Function MYFUNC() As Integer
Return 0
End Function
Sub Main()
End Sub
End Module
Namespace NS
Partial Public Class AAA
Public BBB As Integer
Friend BBb As Integer
Sub SSS()
End Sub
End Class
Partial Public Class AaA
Public Structure ST1
Shared CH1, ch1 As Char
End Structure
Structure st1
Shared ch1, ch2 As Char
End Structure
End Class
End Namespace
]]></file>
<file name="b.vb"><![CDATA[
Namespace Ns
Partial Public Class Aaa
Private Bbb As Integer
Sub Sss()
End Sub
End Class
End Namespace
]]></file>
</compilation>)
Dim globalNS = compilation.SourceModule.GlobalNamespace
Dim myMod = DirectCast(globalNS.GetMembers("module1").Single(), NamedTypeSymbol)
' no merge for non-namespace/type members
Dim mem1 = myMod.GetMembers("S1")
Assert.Equal(3, mem1.Length) ' 3
mem1 = myMod.GetMembers("myfunc")
Assert.Equal(2, mem1.Length) ' 2
Dim myNS = DirectCast(globalNS.GetMembers("ns").Single(), NamespaceSymbol)
Dim types = myNS.GetMembers("aaa")
Assert.Equal(1, types.Length)
Dim type1 = DirectCast(types.First(), NamedTypeSymbol)
' no merge for fields
Dim mem2 = type1.GetMembers("bbb")
Assert.Equal(3, mem2.Length) ' 3
Dim mem3 = type1.GetMembers("sss")
Assert.Equal(2, mem3.Length) ' 2
Dim mem4 = type1.GetMembers("St1")
Assert.Equal(1, mem4.Length)
Dim type2 = DirectCast(mem4.First(), NamedTypeSymbol)
' from both St1
Dim mem5 = type2.GetMembers("Ch1")
Assert.Equal(3, mem2.Length) ' 3
Dim errs = compilation.GetDeclarationDiagnostics()
' Native compilers 9 errors
Assert.True(errs.Length > 6, "Contain Decl Errors")
End Sub
<WorkItem(537443, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537443")>
<Fact>
Public Sub DuplicatedTypes()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Module Module1
Sub sub1()
Dim element1 = <RootEle>
</RootEle>
End Sub
End Module
'COMPILEERROR: BC30179, "Module1"
Module Module1
Sub sub1()
Dim element1 = <RootEle>
</RootEle>
End Sub
End Module
Namespace GenArityErr001
Public Structure ga001Str2 (Of T As Integer)
Dim i As Integer
End Structure
' BC30179: Name conflict
' COMPILEERROR: BC30179, "ga001Str2"
Public Structure ga001Str2 (Of X As New)
Dim i As Integer
End Structure
End Namespace
]]></file>
</compilation>)
Dim globalNS = compilation.Assembly.GlobalNamespace
Dim modOfNS = DirectCast(globalNS.GetMembers("Module1").Single(), NamedTypeSymbol)
Dim mem1 = DirectCast(modOfNS.GetMembers().First(), MethodSymbol)
Assert.Equal("sub1", mem1.Name)
Dim ns = DirectCast(globalNS.GetMembers("GenArityErr001").First(), NamespaceSymbol)
Dim type1 = DirectCast(ns.GetMembers("ga001Str2").First(), NamedTypeSymbol)
Assert.NotEmpty(type1.GetMembers().AsEnumerable())
End Sub
<WorkItem(537443, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537443")>
<Fact>
Public Sub InvalidPartialTypes()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Option Explicit On
Namespace PartialStruct118
Interface ii
Sub abc()
End Interface
'COMPILEWARNING: BC40046, "teststruct"
Structure teststruct
Implements ii
'COMPILEERROR: BC30269, "abc"
Public Sub abc() Implements ii.abc
End Sub
Public Scen5 As String
'COMPILEERROR: BC30269, "Scen6"
Public Sub Scen6(ByVal x As String)
End Sub
'COMPILEERROR: BC30269, "New"
Public Sub New(ByVal x As String)
End Sub
End Structure
'COMPILEERROR: BC32200, "teststruct"
partial Shadows Structure teststruct
End Structure
'COMPILEERROR: BC30395, "MustInherit"
partial MustInherit Structure teststruct
End Structure
'COMPILEERROR: BC30395, "NotInheritable"
partial NotInheritable Structure teststruct
End Structure
'COMPILEERROR: BC30178, "partial"
partial partial structure teststruct
End Structure
partial Structure teststruct
'COMPILEERROR: BC30260, "Scen5"
Public Scen5 As String
Public Sub Scen6(ByVal x As String)
End Sub
End Structure
partial Structure teststruct
'COMPILEERROR: BC30628, "Inherits Scen7"
Inherits scen7
End Structure
partial Structure teststruct
Implements ii
Public Sub New(ByVal x As String)
End Sub
Public Sub abc() Implements ii.abc
End Sub
End Structure
'COMPILEWARNING: BC40046, "teststruct"
Structure teststruct
Dim a As String
End Structure
End Namespace
]]></file>
</compilation>)
Dim globalNS = compilation.Assembly.GlobalNamespace
Dim ns = DirectCast(globalNS.GetMembers("PartialStruct118").Single(), NamespaceSymbol)
Dim type1 = DirectCast(ns.GetTypeMembers("teststruct").First(), NamedTypeSymbol)
Assert.Equal("teststruct", type1.Name)
Assert.NotEmpty(type1.GetMembers().AsEnumerable)
End Sub
<WorkItem(537680, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537680")>
<Fact>
Public Sub ModuleWithTypeParameters()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="Err">
<file name="a.vb"><![CDATA[
Namespace Regression139822
'COMPILEERROR: BC32073, "(of T)"
Module Module1(of T)
End Module
End Namespace
]]></file>
</compilation>)
Dim globalNS = compilation.SourceModule.GlobalNamespace
Dim ns = DirectCast(globalNS.GetMembers("Regression139822").Single(), NamespaceSymbol)
Dim myMod = DirectCast(ns.GetMembers("Module1").SingleOrDefault(), NamedTypeSymbol)
Assert.Equal(0, myMod.TypeParameters.Length)
Assert.Equal(0, myMod.Arity)
End Sub
<Fact>
Public Sub Bug4577()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="Bug4577">
<file name="a.vb"><![CDATA[
Namespace A.B
End Namespace
Namespace A
Class B
End Class
Class B(Of T)
End Class
End Namespace
Class C
Class D
End Class
Public d As Integer
Class E(Of T)
End Class
Public e As Integer
Class D '2
End Class
End Class
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC30179: class 'B' and namespace 'B' conflict in namespace 'A'.
Class B
~
BC30260: 'd' is already declared as 'Class D' in this class.
Public d As Integer
~
BC30260: 'e' is already declared as 'Class E(Of T)' in this class.
Public e As Integer
~
BC30179: class 'D' and class 'D' conflict in class 'C'.
Class D '2
~
]]></expected>)
End Sub
<Fact>
Public Sub Bug4054()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="Bug4054">
<file name="a.vb"><![CDATA[
Module Program
Sub Main()
Dim x(0# To 2)
End Sub
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation,
<expected><![CDATA[
BC32059: Array lower bounds can be only '0'.
Dim x(0# To 2)
~~
]]></expected>)
End Sub
<WorkItem(537507, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537507")>
<Fact>
Public Sub ReportErrorTypeCharacterInTypeNameDeclaration()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReportErrorTypeCharacterInTypeNameDeclaration">
<file name="a.vb"><![CDATA[
Namespace n1#
Class C1#
End Class
Class c2#(of T)
end class
Enum e1#
dummy
end enum
Structure s1#
End structure
End Namespace
Module Program#
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
Namespace n1#
~~~
BC30468: Type declaration characters are not valid in this context.
Class C1#
~~~
BC30468: Type declaration characters are not valid in this context.
Class c2#(of T)
~~~
BC30468: Type declaration characters are not valid in this context.
Enum e1#
~~~
BC30468: Type declaration characters are not valid in this context.
Structure s1#
~~~
BC30468: Type declaration characters are not valid in this context.
Module Program#
~~~~~~~~
]]></errors>)
End Sub
<WorkItem(537507, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/537507")>
<Fact>
Public Sub ReportErrorTypeCharacterInTypeName()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation name="ReportErrorTypeCharacterInTypeName">
<file name="a.vb"><![CDATA[
Namespace n1
Class C1#
End Class
Class c2#(of T)
public f1 as c1#
end class
End Namespace
Module Program
Dim x1 as C1#
dim x2 as N1.C1#
dim x3 as n1.c2#(of integer)
End Module
]]></file>
</compilation>)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30468: Type declaration characters are not valid in this context.
Class C1#
~~~
BC30468: Type declaration characters are not valid in this context.
Class c2#(of T)
~~~
BC30468: Type declaration characters are not valid in this context.
public f1 as c1#
~~~
BC30002: Type 'C1' is not defined.
Dim x1 as C1#
~~~
BC30468: Type declaration characters are not valid in this context.
Dim x1 as C1#
~~~
BC30468: Type declaration characters are not valid in this context.
dim x2 as N1.C1#
~~~
BC30468: Type declaration characters are not valid in this context.
dim x3 as n1.c2#(of integer)
~~~
]]></errors>)
End Sub
<WorkItem(540895, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/540895")>
<Fact>
Public Sub BC31538ERR_FriendAssemblyBadAccessOverride2()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ClassLibrary1">
<file name="a.vb"><![CDATA[
Imports System
Public Class A
Protected Friend Overridable Sub G()
Console.WriteLine("A.G")
End Sub
End Class
]]></file>
</compilation>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="ConsoleApp">
<file name="c.vb"><![CDATA[
Imports System
Imports ClassLibrary1
MustInherit Class B
Inherits A
Protected Friend Overrides Sub G()
End Sub
End Class
]]></file>
</compilation>, {New VisualBasicCompilationReference(compilation1)})
CompilationUtils.AssertTheseDiagnostics(compilation2, <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'ClassLibrary1' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
Imports ClassLibrary1
~~~~~~~~~~~~~
BC31538: Member 'Protected Friend Overrides Sub G()' cannot override member 'Protected Friend Overridable Sub G()' defined in another assembly/project because the access modifier 'Protected Friend' expands accessibility. Use 'Protected' instead.
Protected Friend Overrides Sub G()
~
]]></errors>)
End Sub
' Note that the candidate symbols infrastructure on error types is tested heavily in
' the SemanticModel tests. The following tests just make sure the public
' API is working correctly.
Public Sub ErrorTypeCandidateSymbols1()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ErrorType">
<file name="a.vb"><![CDATA[
Option Strict On
Class A
Dim n As B
End Class
]]></file>
</compilation>)
Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
Dim typ = fsym.Type
Assert.Equal(SymbolKind.ErrorType, typ.Kind)
Assert.Equal("B", typ.Name)
Dim errortype = DirectCast(typ, ErrorTypeSymbol)
Assert.Equal(CandidateReason.None, errortype.CandidateReason)
Assert.Equal(0, errortype.CandidateSymbols.Length)
End Sub
<Fact()>
Public Sub ErrorTypeCandidateSymbols2()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ErrorType">
<file name="a.vb"><![CDATA[
Option Strict On
Class C
Private Class B
End Class
End Class
Class A
Inherits C
Dim n As B
End Class
]]></file>
</compilation>)
Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
Dim classB = DirectCast(DirectCast(compilation.GlobalNamespace.GetTypeMembers("C").Single(), NamedTypeSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
Dim typ = fsym.Type
Assert.Equal(SymbolKind.ErrorType, typ.Kind)
Assert.Equal("B", typ.Name)
Dim errortyp = DirectCast(typ, ErrorTypeSymbol)
Assert.Equal(CandidateReason.Inaccessible, errortyp.CandidateReason)
Assert.Equal(1, errortyp.CandidateSymbols.Length)
Assert.Equal(classB, errortyp.CandidateSymbols(0))
End Sub
<Fact()>
Public Sub ErrorTypeCandidateSymbols3()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="ErrorType">
<file name="a.vb"><![CDATA[
Option Strict On
Imports N1, N2
Namespace N1
Class B
End Class
End Namespace
Namespace N2
Class B
End Class
End Namespace
Class A
Dim n As B
End Class
]]></file>
</compilation>)
Dim classA = DirectCast(compilation.GlobalNamespace.GetTypeMembers("A").Single(), NamedTypeSymbol)
Dim classB1 = DirectCast(DirectCast(compilation.GlobalNamespace.GetMembers("N1").Single(), NamespaceSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
Dim classB2 = DirectCast(DirectCast(compilation.GlobalNamespace.GetMembers("N2").Single(), NamespaceSymbol).GetTypeMembers("B").Single, NamedTypeSymbol)
Dim fsym = DirectCast(classA.GetMembers("n").First(), FieldSymbol)
Dim typ = fsym.Type
Assert.Equal(SymbolKind.ErrorType, typ.Kind)
Assert.Equal("B", typ.Name)
Dim errortyp = DirectCast(typ, ErrorTypeSymbol)
Assert.Equal(CandidateReason.Ambiguous, errortyp.CandidateReason)
Assert.Equal(2, errortyp.CandidateSymbols.Length)
Assert.True((TypeSymbol.Equals(classB1, TryCast(errortyp.CandidateSymbols(0), TypeSymbol), TypeCompareKind.ConsiderEverything) AndAlso
TypeSymbol.Equals(classB2, TryCast(errortyp.CandidateSymbols(1), TypeSymbol), TypeCompareKind.ConsiderEverything)) OrElse
(TypeSymbol.Equals(classB2, TryCast(errortyp.CandidateSymbols(0), TypeSymbol), TypeCompareKind.ConsiderEverything) AndAlso
TypeSymbol.Equals(classB1, TryCast(errortyp.CandidateSymbols(1), TypeSymbol), TypeCompareKind.ConsiderEverything)), "should have B1 and B2 in some order")
End Sub
<Fact()>
Public Sub TypeArgumentOfFriendType()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="E">
<file name="a.vb"><![CDATA[
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("goo")>
Friend Class ImmutableStack(Of T)
End Class
]]></file>
</compilation>)
Dim compilation2 = CompilationUtils.CreateCompilationWithMscorlib40AndReferences(
<compilation name="goo">
<file name="a.vb"><![CDATA[
Friend Class Scanner
Protected Class ConditionalState
End Class
Protected Class PreprocessorState
Friend ReadOnly _conditionals As ImmutableStack(Of ConditionalState)
End Class
End Class
]]></file>
</compilation>, {New VisualBasicCompilationReference(compilation)})
Assert.Empty(compilation2.GetDiagnostics())
End Sub
<Fact, WorkItem(544071, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544071")>
Public Sub ProtectedTypeExposureGeneric()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation name="E">
<file name="a.vb"><![CDATA[
Friend Class B(Of T)
Protected Enum ENM
None
End Enum
End Class
Class D
Inherits B(Of Integer)
Protected Sub proc(p1 As ENM)
End Sub
Protected Sub proc(p1 As B(Of Long).ENM)
End Sub
End Class
]]></file>
</compilation>)
Dim diags = compilation.GetDiagnostics()
Assert.Empty(diags)
End Sub
<Fact, WorkItem(574771, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/574771")>
Public Sub Bug574771()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Public Interface vbGI6504Int1(Of X)
End Interface
Public Interface vbGI6504Int2(Of T, U)
Function Fun2(ByVal p1 As T, ByVal t2 As U) As Long
End Interface
Public Interface vbGI6504Int3(Of T)
Inherits vbGI6504Int1(Of T)
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
End Interface
Public Class vbGI6504Cls1(Of X)
Implements vbGI6504Int3(Of X)
Public Function Fun2(ByVal p1 As X, ByVal t2 As X) As Long Implements vbGI6504Int2(Of X, X).Fun2
Return 12000L
End Function
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC32042: Too few type arguments to 'vbGI6504Int2(Of T, U)'.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
~~~~~~~~~~~~~~~
BC32093: 'Of' required when specifying type arguments for a generic type or method.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
~
BC30002: Type 'O' is not defined.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
~
BC30198: ')' expected.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
~
BC32055: Interface 'vbGI6504Int3' cannot inherit from a type parameter.
Inherits vbGI6504Int2(O T, T) ' f is removed from Of
~
BC31035: Interface 'vbGI6504Int2(Of X, X)' is not implemented by this class.
Public Function Fun2(ByVal p1 As X, ByVal t2 As X) As Long Implements vbGI6504Int2(Of X, X).Fun2
~~~~~~~~~~~~~~~~~~~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(578723, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/578723")>
Public Sub Bug578723()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I(Of T)
Sub Goo(Optional x As Integer = Nothing)
End Interface
Class C
Implements I(Of Integer)
Public Sub Goo(Optional x As Integer = 0) Implements (Of Integer).Goo
End Sub
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC30149: Class 'C' must implement 'Sub Goo([x As Integer = 0])' for interface 'I(Of Integer)'.
Implements I(Of Integer)
~~~~~~~~~~~~~
BC30203: Identifier expected.
Public Sub Goo(Optional x As Integer = 0) Implements (Of Integer).Goo
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<WorkItem(783920, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/783920")>
<Fact()>
Public Sub Bug783920()
Dim comp1 = CreateCompilationWithMscorlib40(
<compilation name="Bug783920_VB">
<file name="a.vb"><![CDATA[
Public Class MyAttribute1
Inherits System.Attribute
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll)
Dim comp2 = CreateCompilationWithMscorlib40AndReferences(
<compilation>
<file name="a.vb"><![CDATA[
Public Class MyAttribute2
Inherits MyAttribute1
End Class
]]></file>
</compilation>, {New VisualBasicCompilationReference(comp1)}, TestOptions.ReleaseDll)
Dim source3 =
<compilation>
<file name="a.vb"><![CDATA[
<MyAttribute2>
Public Class Test
End Class
]]></file>
</compilation>
Dim expected =
<expected><![CDATA[
BC30652: Reference required to assembly 'Bug783920_VB, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'MyAttribute1'. Add one to your project.
<MyAttribute2>
~~~~~~~~~~~~
]]></expected>
Dim comp4 = CreateCompilationWithMscorlib40AndReferences(source3, {comp2.EmitToImageReference()}, TestOptions.ReleaseDll)
AssertTheseDiagnostics(comp4, expected)
Dim comp3 = CreateCompilationWithMscorlib40AndReferences(source3, {New VisualBasicCompilationReference(comp2)}, TestOptions.ReleaseDll)
AssertTheseDiagnostics(comp3, expected)
End Sub
<Fact()>
Public Sub BC30166ERR_ExpectedNewableClass1()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime(
<compilation>
<file name="a.vb"><![CDATA[
Friend Module AttrRegress006mod
' Need this attribute
<System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)>
Class test
End Class
Sub AttrRegress006()
'COMPILEERROR: BC30166, "Test" EDMAURER no longer giving this error.
Dim c As New test
End Sub
End Module]]></file>
</compilation>)
Dim expectedErrors1 = <errors></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(528709, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/528709")>
Public Sub Bug528709()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Enum TestEnum
One
One
End Enum
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC31421: 'One' is already declared in this enum.
One
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(529327, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529327")>
Public Sub Bug529327()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I1
Property Bar As Integer
Sub Goo()
End Interface
Interface I2
Inherits I1
Property Bar As Integer
Sub Goo()
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40003: property 'Bar' shadows an overloadable member declared in the base interface 'I1'. If you want to overload the base method, this method must be declared 'Overloads'.
Property Bar As Integer
~~~
BC40003: sub 'Goo' shadows an overloadable member declared in the base interface 'I1'. If you want to overload the base method, this method must be declared 'Overloads'.
Sub Goo()
~~~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(531353, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531353")>
Public Sub Bug531353()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class c1
Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
Return 0
End Operator
End Class
Class c2
Inherits c1
'COMPILEWARNING: BC40003, "+"
Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
Return 0
End Operator
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40003: operator 'op_Addition' shadows an overloadable member declared in the base class 'c1'. If you want to overload the base method, this method must be declared 'Overloads'.
Shared Operator +(ByVal x As c1, ByVal y As c2) As Integer
~
]]></errors>
CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(1068209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068209")>
Public Sub Bug1068209_01()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Interface I1
ReadOnly Property P1 As Integer
Sub get_P2()
Event E1 As System.Action
Sub remove_E2()
End Interface
Interface I3
Inherits I1
Overloads Sub get_P1()
Overloads Property P2 As Integer
Overloads Sub add_E1()
Event E2 As System.Action
End Interface
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P1' conflicts with a member implicitly declared for property 'P1' in the base interface 'I1' and should be declared 'Shadows'.
Overloads Sub get_P1()
~~~~~~
BC40012: property 'P2' implicitly declares 'get_P2', which conflicts with a member in the base interface 'I1', and so the property should be declared 'Shadows'.
Overloads Property P2 As Integer
~~
BC40014: sub 'add_E1' conflicts with a member implicitly declared for event 'E1' in the base interface 'I1' and should be declared 'Shadows'.
Overloads Sub add_E1()
~~~~~~
BC40012: event 'E2' implicitly declares 'remove_E2', which conflicts with a member in the base interface 'I1', and so the event should be declared 'Shadows'.
Event E2 As System.Action
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact, WorkItem(1068209, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068209")>
Public Sub Bug1068209_02()
Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Class I1
ReadOnly Property P1 As Integer
Get
return Nothing
End Get
End Property
Sub get_P2()
End Sub
Event E1 As System.Action
Sub remove_E2()
End Sub
End Class
Class I3
Inherits I1
Overloads Sub get_P1()
End Sub
Overloads ReadOnly Property P2 As Integer
Get
return Nothing
End Get
End Property
Overloads Sub add_E1()
End Sub
Event E2 As System.Action
End Class
]]></file>
</compilation>)
Dim expectedErrors1 = <errors><![CDATA[
BC40014: sub 'get_P1' conflicts with a member implicitly declared for property 'P1' in the base class 'I1' and should be declared 'Shadows'.
Overloads Sub get_P1()
~~~~~~
BC40012: property 'P2' implicitly declares 'get_P2', which conflicts with a member in the base class 'I1', and so the property should be declared 'Shadows'.
Overloads ReadOnly Property P2 As Integer
~~
BC40014: sub 'add_E1' conflicts with a member implicitly declared for event 'E1' in the base class 'I1' and should be declared 'Shadows'.
Overloads Sub add_E1()
~~~~~~
BC40012: event 'E2' implicitly declares 'remove_E2', which conflicts with a member in the base class 'I1', and so the event should be declared 'Shadows'.
Event E2 As System.Action
~~
]]></errors>
CompilationUtils.AssertTheseDeclarationDiagnostics(compilation1, expectedErrors1)
End Sub
<Fact>
Public Sub NoObsoleteDiagnosticsForProjectLevelImports_01()
Dim options = TestOptions.ReleaseDll.WithGlobalImports(GlobalImport.Parse({"GlobEnumsClass"}))
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
<System.Serializable><System.Obsolete()>
Class GlobEnumsClass
Public Enum xEmailMsg
Option1
Option2
End Enum
End Class
Class Account
Property Status() As xEmailMsg
End Class
]]></file>
</compilation>, options:=options)
CompileAndVerify(compilation).VerifyDiagnostics()
End Sub
<Fact>
Public Sub NoObsoleteDiagnosticsForProjectLevelImports_02()
Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40(
<compilation>
<file name="a.vb"><![CDATA[
Imports GlobEnumsClass
<System.Serializable><System.Obsolete()>
Class GlobEnumsClass
Public Enum xEmailMsg
Option1
Option2
End Enum
End Class
Class Account
Property Status() As xEmailMsg
End Class
]]></file>
</compilation>, options:=TestOptions.ReleaseDll)
compilation.AssertTheseDiagnostics(<expected>
BC40008: 'GlobEnumsClass' is obsolete.
Imports GlobEnumsClass
~~~~~~~~~~~~~~
</expected>)
End Sub
<Fact>
Public Sub MustOverrideInScript()
Dim source = <![CDATA[
Friend MustOverride Function F() As Object
Friend MustOverride ReadOnly Property P
]]>
Dim comp = CreateCompilationWithMscorlib461(
{VisualBasicSyntaxTree.ParseText(source.Value, TestOptions.Script)},
references:={SystemCoreRef})
comp.AssertTheseDiagnostics(<expected>
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride Function F() As Object
~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride ReadOnly Property P
~~~~~~~~~~~~
</expected>)
End Sub
<Fact>
Public Sub MustOverrideInInteractive()
Dim source = <![CDATA[
Friend MustOverride Function F() As Object
Friend MustOverride ReadOnly Property P
]]>
Dim submission = VisualBasicCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree:=Parse(source.Value, TestOptions.Script),
references:={MscorlibRef, SystemCoreRef})
submission.AssertTheseDiagnostics(<expected>
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride Function F() As Object
~~~~~~~~~~~~
BC30607: 'NotInheritable' classes cannot have members declared 'MustOverride'.
Friend MustOverride ReadOnly Property P
~~~~~~~~~~~~
</expected>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub MultipleForwardsOfATypeToDifferentAssembliesWithoutUsingItShouldNotReportAnError()
Dim forwardingIL = "
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
.ver 4:0:0:0
}
.assembly Forwarding
{
}
.module Forwarding.dll
.assembly extern Destination1
{
}
.assembly extern Destination2
{
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination2
}
.class public auto ansi beforefieldinit TestSpace.ExistingReference
extends [mscorlib]System.Object
{
.field public static literal string Value = ""TEST VALUE""
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// Code size 8 (0x8)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void[mscorlib] System.Object::.ctor()
IL_0006: nop
IL_0007: ret
}
}"
Dim ilReference = CompileIL(forwardingIL, prependDefaultHeader:=False)
Dim code =
<compilation>
<file name="a.vb"><![CDATA[
Imports TestSpace
Namespace UserSpace
Public Class Program
Public Shared Sub Main()
System.Console.WriteLine(ExistingReference.Value)
End Sub
End Class
End Namespace
]]></file>
</compilation>
CompileAndVerify(
source:=code,
references:={ilReference},
expectedOutput:="TEST VALUE")
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub MultipleForwardsOfFullyQualifiedTypeToDifferentAssembliesWhileReferencingItShouldErrorOut()
Dim userCode =
<compilation>
<file name="a.vb"><![CDATA[
Namespace ForwardingNamespace
Public Class Program
Public Shared Sub Main()
Dim obj = New Destination.TestClass()
End Sub
End Class
End Namespace
]]></file>
</compilation>
Dim forwardingIL = "
.assembly extern Destination1
{
.ver 1:0:0:0
}
.assembly extern Destination2
{
.ver 1:0:0:0
}
.assembly Forwarder
{
.ver 1:0:0:0
}
.module ForwarderModule.dll
.class extern forwarder Destination.TestClass
{
.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination2
}"
Dim compilation = CreateCompilationWithCustomILSource(userCode, forwardingIL, appendDefaultHeader:=False)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30002: Type 'Destination.TestClass' is not defined.
Dim obj = New Destination.TestClass()
~~~~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Destination.TestClass' to multiple assemblies: 'Destination1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'Destination2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Dim obj = New Destination.TestClass()
~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub MultipleForwardsToManyAssembliesShouldJustReportTheFirstTwo()
Dim userCode =
<compilation>
<file name="a.vb"><![CDATA[
Namespace ForwardingNamespace
Public Class Program
Public Shared Sub Main()
Dim obj = New Destination.TestClass()
End Sub
End Class
End Namespace
]]></file>
</compilation>
Dim forwardingIL = "
.assembly Forwarder
{
}
.module ForwarderModule.dll
.assembly extern Destination1 { }
.assembly extern Destination2 { }
.assembly extern Destination3 { }
.assembly extern Destination4 { }
.assembly extern Destination5 { }
.class extern forwarder Destination.TestClass
{
.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination2
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination3
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination4
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination5
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination1
}
.class extern forwarder Destination.TestClass
{
.assembly extern Destination2
}"
Dim compilation = CreateCompilationWithCustomILSource(userCode, forwardingIL, appendDefaultHeader:=False)
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30002: Type 'Destination.TestClass' is not defined.
Dim obj = New Destination.TestClass()
~~~~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Destination.TestClass' to multiple assemblies: 'Destination1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'Destination2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
Dim obj = New Destination.TestClass()
~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub RequiredExternalTypesForAMethodSignatureWillReportErrorsIfForwardedToMultipleAssemblies()
' The scenario Is that assembly A Is calling a method from assembly B. This method has a parameter of a type that lives
' in assembly C. If A Is compiled against B And C, it should compile successfully.
' Now if assembly C Is replaced with assembly C2, that forwards the type to both D1 And D2, it should fail with the appropriate error.
Dim codeC = "
Namespace C
Public Class ClassC
End Class
End Namespace"
Dim referenceC = CreateCompilationWithMscorlib40(
source:=codeC,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="C").EmitToImageReference()
Dim codeB = "
Imports C
Namespace B
Public Class ClassB
Public Shared Sub MethodB(obj As ClassC)
System.Console.WriteLine(obj.GetHashCode())
End Sub
End Class
End Namespace"
Dim compilationB = CreateCompilationWithMscorlib40(
source:=codeB,
references:={referenceC},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="B")
Dim referenceB = compilationB.EmitToImageReference()
Dim codeA = "
Imports B
Namespace A
Public Class ClassA
Public Sub MethodA()
ClassB.MethodB(Nothing)
End Sub
End Class
End Namespace"
Dim compilation = CreateCompilationWithMscorlib40(
source:=codeA,
references:={referenceB, referenceC},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="A")
compilation.VerifyDiagnostics() ' No Errors
Dim codeC2 = "
.assembly C { }
.module CModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder C.ClassC
{
.assembly extern D1
}
.class extern forwarder C.ClassC
{
.assembly extern D2
}"
Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
compilation = CreateCompilationWithMscorlib40(
source:=codeA,
references:={referenceB, referenceC2},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="A")
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC37208: Module 'CModule.dll' in assembly 'C, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'C.ClassC' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
ClassB.MethodB(Nothing)
~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub MultipleTypeForwardersToTheSameAssemblyShouldNotResultInMultipleForwardError()
Dim codeC = "
Namespace C
Public Class ClassC
End Class
End Namespace"
Dim compilationC = CreateCompilationWithMscorlib40(
source:=codeC,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="C")
Dim referenceC = compilationC.EmitToImageReference()
Dim codeB = "
Imports C
Namespace B
Public Class ClassB
Public Shared Function MethodB(obj As ClassC) As String
Return ""obj is "" + If(obj Is Nothing, ""nothing"", obj.ToString())
End Function
End Class
End Namespace"
Dim compilationB = CreateCompilationWithMscorlib40(
source:=codeB,
references:={referenceC},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="B")
Dim referenceB = compilationB.EmitToImageReference()
Dim codeA =
<compilation>
<file name="a.vb"><![CDATA[
Imports B
Namespace A
Public Class ClassA
Public Shared Sub Main()
System.Console.WriteLine(ClassB.MethodB(Nothing))
End Sub
End Class
End Namespace
]]></file>
</compilation>
CompileAndVerify(
source:=codeA,
references:={referenceB, referenceC},
expectedOutput:="obj is nothing")
Dim codeC2 = "
.assembly C
{
.ver 0:0:0:0
}
.module C.dll
.assembly extern D { }
.class extern forwarder C.ClassC
{
.assembly extern D
}
.class extern forwarder C.ClassC
{
.assembly extern D
}"
Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
Dim compilation = CreateCompilationWithMscorlib40(codeA, references:={referenceB, referenceC2})
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30652: Reference required to assembly 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'ClassC'. Add one to your project.
System.Console.WriteLine(ClassB.MethodB(Nothing))
~~~~~~~~~~~~~~~~~~~~~~~
]]></errors>)
Dim codeD = "
Namespace C
Public Class ClassC
End Class
End Namespace"
Dim referenceD = CreateCompilationWithMscorlib40(
source:=codeD,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="D").EmitToImageReference()
' ECMA-335 "II.22.14 ExportedType : 0x27" rule 14: "Ignoring nested Types, there shall be no duplicate rows, based upon FullName [ERROR]".
Dim verifier = CompileAndVerify(
source:=codeA,
references:={referenceB, referenceC2, referenceD},
expectedOutput:="obj is nothing",
verify:=Verification.FailsILVerify.WithILVerifyMessage("[Main]: Unable to resolve token. { Offset = 0x1, Token = 167772166 }"))
verifier.VerifyIL("A.ClassA.Main()", "
{
// Code size 12 (0xc)
.maxstack 1
IL_0000: ldnull
IL_0001: call ""Function B.ClassB.MethodB(C.ClassC) As String""
IL_0006: call ""Sub System.Console.WriteLine(String)""
IL_000b: ret
}
")
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub CompilingModuleWithMultipleForwardersToDifferentAssembliesShouldErrorOut()
Dim ilSource = "
.module ForwarderModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
.assembly extern D2
}"
Dim ilModule = GetILModuleReference(ilSource, prependDefaultHeader:=False)
Dim compilation = CreateCompilationWithMscorlib40(
source:=String.Empty,
references:={ilModule},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="Forwarder")
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub CompilingModuleWithMultipleForwardersToTheSameAssemblyShouldNotProduceMultipleForwardingErrors()
Dim ilSource = "
.assembly extern D { }
.class extern forwarder Testspace.TestType
{
.assembly extern D
}
.class extern forwarder Testspace.TestType
{
.assembly extern D
}"
Dim ilModule = GetILModuleReference(ilSource, prependDefaultHeader:=False)
Dim compilation = CreateCompilationWithMscorlib40(String.Empty, references:={ilModule}, options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
CompilationUtils.AssertTheseDiagnostics(compilation, <errors><![CDATA[
BC30652: Reference required to assembly 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' containing the type 'TestType'. Add one to your project.
]]></errors>)
Dim dCode = "
Namespace Testspace
Public Class TestType
End Class
End Namespace"
Dim dReference = CreateCompilationWithMscorlib40(
source:=dCode,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="D").EmitToImageReference()
' Now compilation succeeds
CreateCompilationWithMscorlib40(
source:=String.Empty,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
references:={ilModule, dReference}).VerifyDiagnostics()
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub LookingUpATypeForwardedTwiceInASourceCompilationReferenceShouldFail()
' This test specifically tests that SourceAssembly symbols also produce this error (by using a CompilationReference instead of the usual PEAssembly symbol)
Dim ilSource = "
.module ForwarderModule.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
.assembly extern D2
}"
Dim ilModuleReference = GetILModuleReference(ilSource, prependDefaultHeader:=False)
Dim forwarderCompilation = CreateEmptyCompilation(
source:=String.Empty,
references:={ilModuleReference},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="Forwarder")
Dim vbSource = "
Namespace UserSpace
Public Class UserClass
Public Shared Sub Main()
Dim obj = new Testspace.TestType()
End Sub
End Class
End Namespace"
Dim userCompilation = CreateCompilationWithMscorlib40(
source:=vbSource,
references:={forwarderCompilation.ToMetadataReference()},
assemblyName:="UserAssembly")
CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC30002: Type 'Testspace.TestType' is not defined.
Dim obj = new Testspace.TestType()
~~~~~~~~~~~~~~~~~~
BC37208: Module 'ForwarderModule.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D2, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
Dim obj = new Testspace.TestType()
~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub ForwardingErrorsInLaterModulesAlwaysOverwriteOnesInEarlierModules()
Dim module1IL = "
.module module1IL.dll
.assembly extern D1 { }
.assembly extern D2 { }
.class extern forwarder Testspace.TestType
{
.assembly extern D1
}
.class extern forwarder Testspace.TestType
{
.assembly extern D2
}"
Dim module1Reference = GetILModuleReference(module1IL, prependDefaultHeader:=False)
Dim module2IL = "
.module module12L.dll
.assembly extern D3 { }
.assembly extern D4 { }
.class extern forwarder Testspace.TestType
{
.assembly extern D3
}
.class extern forwarder Testspace.TestType
{
.assembly extern D4
}"
Dim module2Reference = GetILModuleReference(module2IL, prependDefaultHeader:=False)
Dim forwarderCompilation = CreateEmptyCompilation(
source:=String.Empty,
references:={module1Reference, module2Reference},
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="Forwarder")
Dim vbSource = "
Namespace UserSpace
Public Class UserClass
Public Shared Sub Main()
Dim obj = new Testspace.TestType()
End Sub
End Class
End Namespace"
Dim userCompilation = CreateCompilationWithMscorlib40(
source:=vbSource,
references:={forwarderCompilation.ToMetadataReference()},
assemblyName:="UserAssembly")
CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC30002: Type 'Testspace.TestType' is not defined.
Dim obj = new Testspace.TestType()
~~~~~~~~~~~~~~~~~~
BC37208: Module 'module12L.dll' in assembly 'Forwarder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'Testspace.TestType' to multiple assemblies: 'D3, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'D4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
Dim obj = new Testspace.TestType()
~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(16484, "https://github.com/dotnet/roslyn/issues/16484")>
Public Sub MultipleForwardsThatChainResultInTheSameAssemblyShouldStillProduceAnError()
' The scenario Is that assembly A Is calling a method from assembly B. This method has a parameter of a type that lives
' in assembly C. Now if assembly C Is replaced with assembly C2, that forwards the type to both D And E, And D fowards it to E,
' it should fail with the appropriate error.
Dim codeC = "
Namespace C
Public Class ClassC
End Class
End Namespace"
Dim referenceC = CreateCompilationWithMscorlib40(
source:=codeC,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="C").EmitToImageReference()
Dim codeB = "
Imports C
Namespace B
Public Class ClassB
Public Shared Sub MethodB(obj As ClassC)
System.Console.WriteLine(obj.GetHashCode())
End Sub
End Class
End Namespace"
Dim referenceB = CreateCompilationWithMscorlib40(
source:=codeB,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
references:={referenceC},
assemblyName:="B").EmitToImageReference()
Dim codeC2 = "
.assembly C { }
.module C.dll
.assembly extern D { }
.assembly extern E { }
.class extern forwarder C.ClassC
{
.assembly extern D
}
.class extern forwarder C.ClassC
{
.assembly extern E
}"
Dim referenceC2 = CompileIL(codeC2, prependDefaultHeader:=False)
Dim codeD = "
.assembly D { }
.assembly extern E { }
.class extern forwarder C.ClassC
{
.assembly extern E
}"
Dim referenceD = CompileIL(codeD, prependDefaultHeader:=False)
Dim referenceE = CreateCompilationWithMscorlib40(
source:=codeC,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
assemblyName:="E").EmitToImageReference()
Dim codeA = "
Imports B
Imports C
Namespace A
Public Class ClassA
Public Sub MethodA(obj As ClassC)
ClassB.MethodB(obj)
End Sub
End Class
End Namespace"
Dim userCompilation = CreateCompilationWithMscorlib40(
source:=codeA,
options:=New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
references:={referenceB, referenceC2, referenceD, referenceE},
assemblyName:="A")
CompilationUtils.AssertTheseDiagnostics(userCompilation, <errors><![CDATA[
BC37208: Module 'C.dll' in assembly 'C, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is forwarding the type 'C.ClassC' to multiple assemblies: 'D, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' and 'E, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'.
ClassB.MethodB(obj)
~~~~~~~~~~~~~~~~~~~
]]></errors>)
End Sub
<Fact>
<WorkItem(52516, "https://github.com/dotnet/roslyn/issues/52516")>
Public Sub ErrorInfo_01()
Dim [error] = New MissingMetadataTypeSymbol.Nested(New UnsupportedMetadataTypeSymbol(), "Test", 0, False)
Dim info = [error].ErrorInfo
Assert.Equal(ERRID.ERR_UnsupportedType1, CType(info.Code, ERRID))
Assert.Null([error].ContainingModule)
Assert.Null([error].ContainingAssembly)
Assert.NotNull([error].ContainingSymbol)
End Sub
End Class
End Namespace
|