/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/VisualBasic/Test/Semantic/Semantics/GetSemanticInfoTests.vb
6 641 строка
244 KB
Julien Couvreur
Enable GetTypeInfo for type of object creation syntax (#81802)
30 дек 2025, 23:12
Не верифицирован
30 дек 2025, 23:12
ab54c0a
Код
Авторство
О чём код?
' 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.Runtime.CompilerServices Imports Basic.Reference.Assemblies Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.Collections Imports Microsoft.CodeAnalysis.Test.Utilities Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics Partial Public Class SemanticModelTests <Fact> Public Sub BindingMaxIntPlusOneHexLiteralConst() Dim source = <compilation name="Bug4400"> <file name="a.vb"> Option Strict On Module Module1 Sub Main() Test(2147483647) Test(-2147483647) Test(-2147483648) Test(-2147483649) Test(&H7FFFFFFF) Test(&H80000000) Test(&HFFFFFFFF) Test(&H100000000) End Sub Sub Test(x As Integer) System.Console.WriteLine("Integer") End Sub Sub Test(x As Long) System.Console.WriteLine("Long") End Sub End Module </file> </compilation> CompileAndVerify(source, <![CDATA[ Integer Integer Long Long Integer Integer Integer Long ]]>) End Sub <Fact> Public Sub BindingInEnum3() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingEnumMembers"> <file name="a.vb"> Enum filePermissions create = 1 read = create write = 4 delete = 8 End Enum Class c1 Public Shared Sub Main(args As String()) Dim file1Perm As filePermissions file1Perm = filePermissions.create Or filePermissions.read End Sub End Class </file> </compilation>) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "read = create") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Dim a = DirectCast(symbol, SourceEnumConstantSymbol) Assert.Equal("read", a.Name) End Sub <Fact> Public Sub ForEachControlVariableExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each C1.field(0) In C1.field'BIND:"C1.field(0)" Next C1.field(0) End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachNextVariableExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each C1.field(0) In C1.field Next C1.field(0)'BIND:"C1.field(0)" End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachCollectionExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 field2 = field For Each x as Integer In C1.field'BIND:"C1.field" Next x End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32()", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Array, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32()", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Array, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Equal("C1.field As System.Int32()", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Field, semanticInfo.Symbol.Kind) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachInvalidControlVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each C1.prop In C1.field 'BIND:"C1.prop" Next C1.prop End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.NotAVariable, semanticInfo.CandidateReason) Assert.Equal(1, semanticInfo.CandidateSymbols.Length) Dim sortedCandidates = semanticInfo.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Property C1.prop As System.Int32", sortedCandidates(0).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(0).Kind) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachNextVariableSameAsInvalidControlVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each C1.prop In C1.field Next C1.prop'BIND:"C1.prop" End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Equal("Property C1.prop As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticInfo.Symbol.Kind) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachNonCollectionExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Shared Function Goo() As Integer Return 23 End Function Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each x As Integer In C1.Goo()'BIND:"C1.Goo()" Next End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Equal("Function C1.Goo() As System.Int32", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, semanticInfo.Symbol.Kind) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachErrorCollectionExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Shared Function Goo() As Integer Return 23 End Function Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each x As Integer In C1.NotDefined()'BIND:"C1.NotDefined()" Next End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("?", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.Type.TypeKind) Assert.Equal("?", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachErrorNextVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Shared Function Goo() As Integer Return 23 End Function Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each x As Integer In C1.field Next C1.NotDefined()'BIND:"C1.NotDefined()" End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("?", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.Type.TypeKind) Assert.Equal("?", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachErrorControlVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Shared Function Goo() As Integer Return 23 End Function Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each C1.NotDefined() In C1.field'BIND:"C1.NotDefined()" Next End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("?", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.Type.TypeKind) Assert.Equal("?", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForEachValidNextVariableOfBrokenForEach() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() End Sub Public Shared field() As Integer Public Shared Property prop As Integer Public Shared Function Goo() As Integer Return 23 End Function Public Sub DoStuff(d As Object) field = New Integer(1) {} field(0) = 23 field(1) = 42 For Each Next field(0)'BIND:"field(0)" End Sub End Class ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.Type.TypeKind) Assert.Equal("System.Int32", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Null(semanticInfo.Symbol) Assert.Equal(CandidateReason.None, semanticInfo.CandidateReason) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <Fact> Public Sub ForAndForEachGetDeclaredSymbolWithDeclaredVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() for each controlVar as integer in {1,2,3} next controlVar for controlVar2 as integer = 0 to 10 next controlVar2 End Sub End Class ]]></file> </compilation>) Dim tree = compilation.SyntaxTrees(0) ' for each loop Dim node = FindNodeFromText(tree, "controlVar") ' on modified identifier Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Equal("controlVar", symbol.Name) node = FindNodeFromText(tree, "for each controlVar as integer in {1,2,3}") symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) ' For loop node = FindNodeFromText(tree, "controlVar2") ' on modified identifier symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Equal("controlVar2", symbol.Name) node = FindNodeFromText(tree, "for controlVar2 as integer = 0 to 10") symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) End Sub <Fact> Public Sub ForAndForEachGetDeclaredSymbolWithLocallyDeclaredVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Class C1 Public Shared Sub Main() for each goo1 in {1,2,3} next dim goo2 as integer for goo2 = 0 to 10 next End Sub End Class ]]></file> </compilation>) Dim tree = compilation.SyntaxTrees(0) ' for each loop Dim node = FindNodeFromText(tree, "for each goo1 in {1,2,3}") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) ' For loop node = FindNodeFromText(tree, "for goo2 = 0 to 10") symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) End Sub <Fact> Public Sub ForAndForEachGetDeclaredSymbolWithImplicitlyDeclaredVariable() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Option Infer Off Option Explicit Off Imports System Class C1 Public Shared Sub Main() for each goo in {1,2,3} next for goo2 = 0 to 10 next End Sub End Class ]]></file> </compilation>) Dim tree = compilation.SyntaxTrees(0) ' for each loop Dim node = FindNodeFromText(tree, "for each goo in {1,2,3}") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) ' For loop node = FindNodeFromText(tree, "for goo2 = 0 to 10") symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) End Sub <WorkItem(541850, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541850")> <Fact> Public Sub Bug8757_AttributeWithParamArray() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System <A>'BIND:"A" Class A Inherits Attribute Sub New(ParamArray x As Object()) End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of AttributeSyntax)(compilation, "a.vb") Assert.Equal("A", semanticSummary.Type.ToTestDisplayString()) Assert.Equal("A", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal("Sub A..ctor(ParamArray x As System.Object())", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(1, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub A..ctor(ParamArray x As System.Object())", sortedMethodGroup(0).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <WorkItem(8641, "DevDiv_Projects/Roslyn")> <Fact()> Public Sub Bug8641_PropertyInAttribute() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq <A(TypeOf (Goo) Is Nullable)>'BIND:"Goo" Module Program Property Goo as Object Get return nothing End Get Set (v as Object) End Set End Property Sub Main(args As String()) End Sub End Module ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticInfo.Type.TypeKind) Assert.Equal("System.Object", semanticInfo.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticInfo.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticInfo.ImplicitConversion.Kind) Assert.Equal("Property Program.Goo As System.Object", semanticInfo.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticInfo.Symbol.Kind) Assert.Equal(0, semanticInfo.CandidateSymbols.Length) Assert.Equal(0, semanticInfo.MemberGroup.Length) Assert.False(semanticInfo.ConstantValue.HasValue) End Sub <WorkItem(542186, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542186")> <Fact> Public Sub Bug9321_IndexerParameter() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Default Property Item(ByVal x as Integer) as Integer Get Return x 'BIND:"x" End Get Set (ByVal x as Integer) End Set End Property End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Dim symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Parameter, symbol.Kind) Assert.Equal("x", symbol.Name) Assert.Equal(SymbolKind.Method, symbol.ContainingSymbol.Kind) Dim lookupSymbols = model.LookupSymbols(expressionSyntax.SpanStart, name:="x") Assert.Equal(symbol, lookupSymbols.Single()) End Sub <WorkItem(542186, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542186")> <Fact> Public Sub Bug9321_IndexerValueParameterWithoutParameterDeclaration() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Default Property Item(ByVal x as Integer) as Integer Get Return x End Get Set dim x = Value 'BIND:"Value" End Set End Property End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Dim symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Parameter, symbol.Kind) Assert.Equal("Value", symbol.Name) Assert.Equal(SymbolKind.Method, symbol.ContainingSymbol.Kind) Dim lookupSymbols = model.LookupSymbols(expressionSyntax.SpanStart, name:="Value") Assert.Equal(symbol, lookupSymbols.Single()) End Sub <WorkItem(542186, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542186")> <Fact> Public Sub Bug9321_IndexerValueParameterWithParameterDeclaration() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Default Property Item(ByVal x as Integer) as Integer Get Return x End Get Set (ByVal value2 as Integer) 'BIND:"ByVal value2 as Integer" x = Value2 End Set End Property End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of ParameterSyntax)(compilation, "a.vb", 0) Dim parameter = model.GetDeclaredSymbol(expressionSyntax) Assert.NotNull(parameter) Assert.Equal(SymbolKind.Parameter, parameter.Kind) Assert.Equal("value2", parameter.Name) Assert.Equal(SymbolKind.Method, parameter.ContainingSymbol.Kind) End Sub <WorkItem(542186, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542186")> <Fact> Public Sub Bug9321_IndexerValueParameterWithParameterDeclaration2() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Default Property Item(ByVal x as Integer) as Integer Get Return x End Get Set (ByVal value2 as Integer) x = Value2 'BIND:"x" End Set End Property End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Dim symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Parameter, symbol.Kind) Assert.Equal("x", symbol.Name) Assert.Equal(SymbolKind.Method, symbol.ContainingSymbol.Kind) Dim lookupSymbols = model.LookupSymbols(expressionSyntax.SpanStart, name:="x") Assert.Equal(symbol, lookupSymbols.Single()) End Sub <WorkItem(542777, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542777")> <Fact> Public Sub Bug10154_IndexerThisParameter() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Default Property Item(ByVal x as Integer) as Integer Get Return x End Get Set (ByVal value2 as Integer) Console.Write(Me) 'BIND:"Me" End Set End Property End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of MeExpressionSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.MeExpression, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MeExpressionSyntax)(compilation, "a.vb") Dim symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Parameter, symbol.Kind) Assert.True(DirectCast(symbol, ParameterSymbol).IsMe) ' TODO: Assert.Equal(SymbolKind.Method, symbol.ContainingSymbol.Kind) End Sub <WorkItem(542335, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542335")> <Fact> Public Sub Bug9530_LabelsSymbolInfo() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Public Shared Sub Main() Goto mylabel 'BIND:"mylabel" mylabel: Console.WriteLine("Hello Goto") Goto &HA 'BIND1:"&HA" 10: 'BIND2:"10:" Console.WriteLine("Goodbye") End Sub End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of LabelSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.IdentifierLabel, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of LabelSyntax)(compilation, "a.vb") Dim symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Label, symbol.Kind) Assert.Equal("mylabel", symbol.Name) expressionSyntax = CompilationUtils.FindBindingText(Of LabelSyntax)(compilation, "a.vb", 1) Assert.Equal(SyntaxKind.NumericLabel, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of LabelSyntax)(compilation, "a.vb", 1) symbol = semanticInfo.Symbol Assert.NotNull(symbol) Assert.Equal(SymbolKind.Label, symbol.Kind) Assert.Equal("10", symbol.Name) Dim expressionSyntax2 = CompilationUtils.FindBindingText(Of LabelStatementSyntax)(compilation, "a.vb", 2) Assert.Equal(SyntaxKind.LabelStatement, expressionSyntax2.Kind) Dim labelSymbol = model.GetDeclaredSymbol(expressionSyntax2) Assert.NotNull(labelSymbol) Assert.Equal(SymbolKind.Label, labelSymbol.Kind) Assert.Equal("10", labelSymbol.Name) End Sub <Fact()> Public Sub LabelsSymbolInfoInErrorCase() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Public Shared Sub Main() Goto mylabel mylabel: 'BIND:"mylabel:" Console.WriteLine("Hello Goto") MYLABEL: Console.WriteLine("Goodbye") End Sub End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of LabelStatementSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.LabelStatement, expressionSyntax.Kind) Dim declaredSymbol = model.GetDeclaredSymbol(expressionSyntax) Assert.NotNull(declaredSymbol) Assert.Equal(SymbolKind.Label, declaredSymbol.Kind) Assert.Equal("mylabel", declaredSymbol.Name) End Sub <WorkItem(542335, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/542335")> <Fact> Public Sub Bug9530_LabelsDeclaredSymbol() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Public Shared Sub Main() Goto mylabel mylabel: 'BIND:"mylabel:" Console.WriteLine("Hello Goto") End Sub End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of LabelStatementSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.LabelStatement, expressionSyntax.Kind) Dim declaredSymbol = model.GetDeclaredSymbol(expressionSyntax) Assert.NotNull(declaredSymbol) Assert.Equal(SymbolKind.Label, declaredSymbol.Kind) Assert.Equal("mylabel", declaredSymbol.Name) End Sub <WorkItem(545562, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545562")> <Fact()> Public Sub SymbolInfo_HexadecimalLabel() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) &HFFFFFFFF: GoTo 4294967295'BIND:"4294967295" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of LabelSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("4294967295", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Label, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact> Public Sub SymbolInfo_TypeInfo_GetType() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports MyAlias1=System.Int32 Imports MyAlias2=Generic(Of AClass) Class Generic(Of T) End Class Class AClass End Class Structure AStructure End Structure Class C Public Shared Sub Main() Dim a = GetType(Integer) 'BIND:"Integer" Dim b = GetType(Integer()) 'BIND1:"Integer()" Dim c = GetType(AClass) 'BIND2:"AClass" Dim d = GetType(AClass()) 'BIND3:"AClass()" Dim e = GetType(AStructure(,)) 'BIND4:"AStructure(,)" Dim f = GetType(System.RuntimeTypeHandle) 'BIND5:"System.RuntimeTypeHandle" Dim g = GetType(System.RuntimeTypeHandle()) 'BIND6:"System.RuntimeTypeHandle()" Dim h = GetType(Generic(Of Integer)) 'BIND7:"Generic(Of Integer)" Dim i = GetType(Generic(Of )) 'BIND8:"Generic(Of )" Dim j = GetType(System.Void) 'BIND9:"System.Void" Dim k = GetType(System.Void()) 'BIND10:"System.Void()" ' is not legal to use in VB, but C# Semantic Model returns the same result here. Dim AClass as Integer = 42 Dim l = GetType(AClass) 'BIND11:"AClass" Dim m = GetType(MyAlias1) 'BIND12:"MyAlias1" Dim n = GetType(MyAlias2) 'BIND13:"MyAlias2" End Sub End Class ]]></file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 0) Assert.Equal(SyntaxKind.PredefinedType, expressionSyntax.Kind) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 0) Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) Dim symbol = semanticInfo.Symbol Assert.Equal("System.Int32", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 1) Assert.Equal(SyntaxKind.ArrayType, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 1) Assert.Equal("System.Int32()", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("System.Int32()", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 2) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 2) Assert.Equal("AClass", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("AClass", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 3) Assert.Equal(SyntaxKind.ArrayType, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 3) Assert.Equal("AClass()", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("AClass()", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 4) Assert.Equal(SyntaxKind.ArrayType, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 4) Assert.Equal("AStructure(,)", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("AStructure(,)", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 5) Assert.Equal(SyntaxKind.QualifiedName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 5) Assert.Equal("System.RuntimeTypeHandle", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("System.RuntimeTypeHandle", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 6) Assert.Equal(SyntaxKind.ArrayType, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 6) Assert.Equal("System.RuntimeTypeHandle()", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("System.RuntimeTypeHandle()", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 7) Assert.Equal(SyntaxKind.GenericName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 7) Assert.Equal("Generic(Of System.Int32)", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("Generic(Of System.Int32)", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 8) Assert.Equal(SyntaxKind.GenericName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 8) Assert.Equal("Generic(Of )", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("Generic(Of )", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 9) Assert.Equal(SyntaxKind.QualifiedName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 9) Assert.Equal("System.Void", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("System.Void", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 10) Assert.Equal(SyntaxKind.ArrayType, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 10) Assert.Equal("System.Void()", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal("System.Void()", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 11) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 11) Assert.Equal("AClass", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal(SymbolKind.NamedType, symbol.Kind) Assert.Equal("AClass", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 12) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 12) Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal(SymbolKind.NamedType, symbol.Kind) Assert.Equal("System.Int32", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) Assert.NotNull(semanticInfo.Alias) Assert.Equal("MyAlias1=System.Int32", semanticInfo.Alias.ToDisplayString(SymbolDisplayFormat.TestFormat)) expressionSyntax = CompilationUtils.FindBindingText(Of TypeSyntax)(compilation, "a.vb", 13) Assert.Equal(SyntaxKind.IdentifierName, expressionSyntax.Kind) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of TypeSyntax)(compilation, "a.vb", 13) Assert.Equal("Generic(Of AClass)", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(1, semanticInfo.AllSymbols.Length) symbol = semanticInfo.Symbol Assert.Equal(SymbolKind.NamedType, symbol.Kind) Assert.Equal("Generic(Of AClass)", symbol.ToDisplayString(SymbolDisplayFormat.TestFormat)) Assert.NotNull(semanticInfo.Alias) Assert.Equal("MyAlias2=Generic(Of AClass)", semanticInfo.Alias.ToDisplayString(SymbolDisplayFormat.TestFormat)) End Sub <Fact()> Public Sub BindingModule() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingEnumMembers"> <file name="a.vb"> Module M1 Public Sub Main(args As String()) End Sub End Module </file> </compilation>) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "Module M1") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Dim a = DirectCast(symbol, SourceNamedTypeSymbol) Assert.Equal("M1", a.Name) Assert.True(a.IsModuleType) End Sub <Fact()> Public Sub BindingVariableAssignmentInScript() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingVariableAssignmentInScript"> <file name="a.vb"> Dim x As Object = y 'BIND:"y" x = x 'BIND1:"x" </file> </compilation>, parseOptions:=TestOptions.Script) Dim model = GetSemanticModel(compilation, "a.vb") Dim ySyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Dim ySymbolInfo = model.GetSymbolInfo(ySyntax) Assert.Null(ySymbolInfo.Symbol) Dim xSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 1) Dim xSymbolInfo = model.GetSymbolInfo(xSyntax) Assert.Equal("x", xSymbolInfo.Symbol.Name) Dim typeInfo = model.GetTypeInfo(xSyntax) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Object", typeInfo.Type.ToTestDisplayString) End Sub <Fact()> Public Sub BindingModuleMemberInQualifiedExpressionWithGlobal() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingEnumMembers"> <file name="a.vb"> Module M1 Public Sub Main(args As String()) Console.WriteLine(Global.Goo) 'BIND:"Global.Goo" Console.WriteLine(Global.M2.Goo) 'BIND1:"Global.M2.Goo" End Sub End Module Module M2 Public Goo as Integer = 23 Public Sub DoStuff() Console.WriteLine(Goo) 'BIND2:"Goo" End Sub End Module </file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 0) Dim sym = DirectCast(semanticInfo.Symbol, SourceFieldSymbol) Assert.Equal("M2.Goo As System.Int32", sym.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingType.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingSymbol.ToTestDisplayString()) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 1) Dim sym2 = DirectCast(semanticInfo.Symbol, SourceFieldSymbol) Assert.Equal("M2.Goo As System.Int32", sym.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingType.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingSymbol.ToTestDisplayString()) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 2) Dim sym3 = DirectCast(semanticInfo.Symbol, SourceFieldSymbol) Assert.Equal("M2.Goo As System.Int32", sym.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingType.ToTestDisplayString()) Assert.Equal("M2", sym.ContainingSymbol.ToTestDisplayString()) Assert.Same(sym, sym2) Assert.Same(sym2, sym3) End Sub <WorkItem(543192, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543192")> <Fact()> Public Sub BindingParameterDefaultValue() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingParameterDefaultValue"> <file name="a.vb"> Imports System Module M1 Sub s1(optional i as integer = 100) 'BIND:"100" End Sub Sub s2(optional s as string = "Hi There") 'BIND1:""Hi There"" End Sub Sub S3(optional e as AttributeTargets = AttributeTargets.Class) 'BIND2:"AttributeTargets.Class" End Sub Property p1(Optional i As Integer = 100) As Integer 'BIND3:"100" Get Return Nothing End Get Set(value As Integer) End Set End Property Property p2(Optional s As String = "s") As String 'BIND4:""s"" Get Return Nothing End Get Set(value As String) End Set End Property Property p3(Optional e As AttributeTargets = AttributeTargets.Property) As AttributeTargets 'BIND5:"AttributeTargets.Property" Get Return Nothing End Get Set(value As AttributeTargets) End Set End Property Property p4(Optional d As DateTime = #2/24/2012#) As DateTime 'BIND6:"#2/24/2012#" Get Return Nothing End Get Set(value As DateTime) End Set End Property Property p5(Optional d As Decimal = 99.99D) As Decimal 'BIND7:"99.99D" Get 'BIND8:"Get" Return Nothing End Get Set(value As Decimal) 'BIND9:"Set(value As Decimal)" End Set End Property Event E(optional i as integer = 100) 'BIND10:"100" Optional is not allowed but semantic model should be able to bind Delegate Sub D(optional s as string = "Roslyn") 'BIND11:""Roslyn"" Optional is not allowed but semantic model should be able to bind End Module </file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 0) Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(100, semanticInfo.ConstantValue.Value) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 1) Assert.Equal("System.String", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal("Hi There", semanticInfo.ConstantValue.Value) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 2) Assert.Equal("System.AttributeTargets", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(AttributeTargets.Class, CType(semanticInfo.ConstantValue.Value, AttributeTargets)) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 3) Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(100, semanticInfo.ConstantValue.Value) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 4) Assert.Equal("System.String", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal("s", semanticInfo.ConstantValue.Value) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 5) Assert.Equal("System.AttributeTargets", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(AttributeTargets.Property, CType(semanticInfo.ConstantValue.Value, AttributeTargets)) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 6) Assert.Equal("System.DateTime", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(#2/24/2012#, CType(semanticInfo.ConstantValue.Value, DateTime)) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 7) Assert.Equal("System.Decimal", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(99.99D, CType(semanticInfo.ConstantValue.Value, Decimal)) Dim model = GetSemanticModel(compilation, "a.vb") Dim accessorSyntax = CompilationUtils.FindBindingText(Of AccessorStatementSyntax)(compilation, "a.vb", 8) Dim accessor = model.GetDeclaredSymbol(accessorSyntax) Dim parameter = DirectCast(accessor.Parameters.Where(Function(p) p.Name = "d").FirstOrDefault, ParameterSymbol) Assert.Equal("System.Decimal", parameter.Type.ToTestDisplayString()) Assert.Equal(True, parameter.HasExplicitDefaultValue) Assert.Equal(99.99D, CType(parameter.ExplicitDefaultConstantValue.Value, Decimal)) accessorSyntax = CompilationUtils.FindBindingText(Of AccessorStatementSyntax)(compilation, "a.vb", 9) accessor = model.GetDeclaredSymbol(accessorSyntax) parameter = DirectCast(accessor.Parameters.Where(Function(p) p.Name = "d").FirstOrDefault, ParameterSymbol) Assert.Equal("System.Decimal", parameter.Type.ToTestDisplayString()) Assert.Equal(True, parameter.HasExplicitDefaultValue) Assert.Equal(99.99D, CType(parameter.ExplicitDefaultConstantValue.Value, Decimal)) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 10) Assert.Equal("System.Int32", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal(100, semanticInfo.ConstantValue.Value) semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of ExpressionSyntax)(compilation, "a.vb", 11) Assert.Equal("System.String", semanticInfo.Type.ToTestDisplayString()) Assert.Equal(True, semanticInfo.ConstantValue.HasValue) Assert.Equal("Roslyn", semanticInfo.ConstantValue.Value) End Sub <WorkItem(545207, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545207")> <Fact()> Public Sub BindingAttributeWithNamedArgument1() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Security.Permissions Module Program <PermissionSet(SecurityAction.LinkDemand, FileAttr:="Goo")>'BIND:"PermissionSet" Sub Main(args As String()) End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Equal("System.Security.Permissions.PermissionSetAttribute", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Security.Permissions.PermissionSetAttribute", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Sub System.Security.Permissions.PermissionSetAttribute..ctor(action As System.Security.Permissions.SecurityAction)", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(1, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub System.Security.Permissions.PermissionSetAttribute..ctor(action As System.Security.Permissions.SecurityAction)", sortedMethodGroup(0).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <WorkItem(545558, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545558")> <Fact()> Public Sub BindingAttributeWithUndefinedEnumArgument() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Imports System.ComponentModel Module Program <EditorBrowsable(EditorBrowsableState.n)>'BIND:"EditorBrowsableState.n" Sub Main(args As String()) End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("?", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticSummary.Type.TypeKind) Assert.Equal("?", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Error, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <WorkItem(529096, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529096")> <Fact()> Public Sub MemberAccessExpressionResults() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingEnumMembers"> <file name="a.vb"> Imports system Imports system.collections.generic Public Class C1 Public Shared A as Integer Public Shared Function B as Byte return 23 End Function Public Shared Property C as Byte End Class Module Program Public Sub Main(args As String()) C1.A 'BIND:"C1.A" C1.B 'BIND1:"C1.B" C1.C 'BIND2:"C1.C" Dim x as Integer = C1.C 'BIND3:"C1.C" Dim y as integer = C1.B() 'BIND4:"C1.B" Dim z as integer = C1.B() 'BIND5:"C1.B()" dim d as Func(of byte) = addressof C1.B 'BIND6:"C1.B" Dim o As Object Dim c = o.ToString(0) 'BIND7:"o.ToString" Dim i = F(1) 'BIND8:"F" Dim v = P1(0) 'BIND9:"P1" Dim v2 = P2(0) 'BIND10:"P2" Dim v3 = P3(0) 'BIND11:"P3" Dim v4 = F1(0) 'BIND12:"F1" Dim v5 = F2(0) 'BIND13:"F2" x = C1.C() 'BIND14:"C1.C" d = CType(addressof C1.B, Func(of byte)) 'BIND15:"C1.B" d = DirectCast(addressof C1.B, Func(of byte)) 'BIND16:"C1.B" d = TryCast(addressof C1.B, Func(of byte)) 'BIND17:"C1.B" End Sub Function F() As Func(Of Integer, Integer) Return Nothing End Function Property P1 As String() Property P2 As List(Of String) Property P3 As Func(Of Integer, Integer) Function F1() As String() Return Nothing End Function Function F2() As List(Of String) Return Nothing End Function End Module </file> </compilation>) compilation.AssertTheseDiagnostics(<expected> BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute..ctor' is not defined. Module Program ~~~~~~~ BC30454: Expression is not a method. C1.A 'BIND:"C1.A" ~~~~ BC30545: Property access must assign to the property or use its value. C1.C 'BIND2:"C1.C" ~~~~ BC42104: Variable 'o' is used before it has been assigned a value. A null reference exception could result at runtime. Dim c = o.ToString(0) 'BIND7:"o.ToString" ~ </expected>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 0) Dim symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("A", symbolInfo.Symbol.Name) Dim typeInfo = model.GetTypeInfo(expressionSyntax) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Int32", typeInfo.Type.ToTestDisplayString) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 1) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("B", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 2) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("C", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 3) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("C", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Byte", typeInfo.Type.ToTestDisplayString) Assert.Equal("System.Int32", typeInfo.ConvertedType.ToTestDisplayString) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 4) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("B", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) Dim expressionSyntax2 = CompilationUtils.FindBindingText(Of InvocationExpressionSyntax)(compilation, "a.vb", 5) symbolInfo = model.GetSymbolInfo(expressionSyntax2) Assert.Equal("B", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax2) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Byte", typeInfo.Type.ToTestDisplayString) Assert.Equal("System.Int32", typeInfo.ConvertedType.ToTestDisplayString) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 6) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("B", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 7) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("ToString", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.NotNull(typeInfo.Type) Assert.Equal("System.String", typeInfo.Type.ToTestDisplayString) Dim expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 8) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("F", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Func(Of System.Int32, System.Int32)", typeInfo.Type.ToTestDisplayString) expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 9) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("P1", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.String()", typeInfo.Type.ToTestDisplayString) expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 10) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("P2", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Collections.Generic.List(Of System.String)", typeInfo.Type.ToTestDisplayString) expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 11) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("P3", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Func(Of System.Int32, System.Int32)", typeInfo.Type.ToTestDisplayString) expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 12) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("F1", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.String()", typeInfo.Type.ToTestDisplayString) expressionSyntax3 = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 13) symbolInfo = model.GetSymbolInfo(expressionSyntax3) Assert.Equal("F2", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax3) Assert.NotNull(typeInfo.Type) Assert.Equal("System.Collections.Generic.List(Of System.String)", typeInfo.Type.ToTestDisplayString) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 14) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("C", symbolInfo.Symbol.Name) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 15) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Function C1.B() As System.Byte", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 16) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Function C1.B() As System.Byte", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) expressionSyntax = CompilationUtils.FindBindingText(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 17) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Function C1.B() As System.Byte", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) typeInfo = model.GetTypeInfo(expressionSyntax) Assert.Null(typeInfo.Type) End Sub <WorkItem(543572, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543572")> <Fact()> Public Sub DefaultValueWithConversion() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="BindingEnumMembers"> <file name="a.vb"> Module Module1 Structure S : Public i As Integer : End Structure Class C : Public i As Integer : End Class Sub dump(ByVal x As Object) Console.WriteLine("{0}:{1}", If(x Is Nothing, "Nothing", x.ToString), If(x Is Nothing, "Nothing", x.GetType.ToString)) End Sub Sub f0(Of T)(Optional ByVal x As T = Nothing) dump(x) End Sub Sub Func(i As String) End Sub Sub Func(Optional i As Integer = 0) End Sub Sub Main() Func() 'BIND1:"Func" f0(Of Object)() 'BIND2:"f0(Of Object)" f0(Of Integer)() 'BIND3:"f0(Of Integer)" f0(Of String)() 'BIND4:"f0(Of String)" f0(Of S)() 'BIND5:"f0(Of S)" f0(Of C)() 'BIND6:"f0(Of C)" End Sub End Module </file> </compilation>) Dim model = GetSemanticModel(compilation, "a.vb") Dim expressionSyntax As ExpressionSyntax Dim symbolInfo As SymbolInfo expressionSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 1) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.Func([i As System.Int32 = 0])", symbolInfo.Symbol.ToTestDisplayString()) expressionSyntax = CompilationUtils.FindBindingText(Of GenericNameSyntax)(compilation, "a.vb", 2) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.f0(Of System.Object)([x As System.Object = Nothing])", symbolInfo.Symbol.ToTestDisplayString()) expressionSyntax = CompilationUtils.FindBindingText(Of GenericNameSyntax)(compilation, "a.vb", 3) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.f0(Of System.Int32)([x As System.Int32 = Nothing])", symbolInfo.Symbol.ToTestDisplayString()) expressionSyntax = CompilationUtils.FindBindingText(Of GenericNameSyntax)(compilation, "a.vb", 4) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.f0(Of System.String)([x As System.String = Nothing])", symbolInfo.Symbol.ToTestDisplayString()) expressionSyntax = CompilationUtils.FindBindingText(Of GenericNameSyntax)(compilation, "a.vb", 5) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.f0(Of Module1.S)([x As Module1.S = Nothing])", symbolInfo.Symbol.ToTestDisplayString()) expressionSyntax = CompilationUtils.FindBindingText(Of GenericNameSyntax)(compilation, "a.vb", 6) symbolInfo = model.GetSymbolInfo(expressionSyntax) Assert.Equal("Sub Module1.f0(Of Module1.C)([x As Module1.C = Nothing])", symbolInfo.Symbol.ToTestDisplayString()) End Sub <Fact()> Public Sub NamedArgsInRaiseEvent() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class derive Shared Event myevent(ByRef aaaa As Integer) Sub main() myeventEvent(aaaa:=123) myeventEvent.Invoke(aaaa:=123) RaiseEvent myevent(aaaa:=123)'BIND:"aaaa" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("ByRef aaaa As System.Int32", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Parameter, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub NamedArgsInRaiseEvent1() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class derive Shared Event myevent(ByRef aaaa As Integer) Sub main() myeventEvent(aaaa:=123) 'BIND:"aaaa" myeventEvent.Invoke(aaaa:=123) RaiseEvent myevent(aaaa:=123) End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("ByRef aaaa As System.Int32", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Parameter, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub NamedArgsInRaiseEvent2() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class derive Shared Event myevent(ByRef aaaa As Integer) Sub main() myeventEvent(aaaa:=123) myeventEvent.Invoke(aaaa:=123) 'BIND:"aaaa" RaiseEvent myevent(aaaa:=123) End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("ByRef aaaa As System.Int32", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Parameter, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub NamedArgsInRaiseEventImplemented() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Interface I1 Event E(qwer As Integer) End Interface Class cls1 : Implements I1 Event E3(bar As Integer) Implements I1.E ' bar means nothing here, only type matters. Sub moo() ' binds to parameter on I1.EEventhandler.invoke(goo) RaiseEvent E3(qwer:=123) 'BIND:"qwer" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("qwer As System.Int32", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Parameter, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub NamedArgsInRaiseEventCustom() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Class cls1 Custom Event E1 As Action(Of Integer) AddHandler(value As Action(Of Integer)) End AddHandler RemoveHandler(value As Action(Of Integer)) End RemoveHandler RaiseEvent(objArg As Integer) End RaiseEvent End Event Sub moo() RaiseEvent E1(objArg:=123) ' goo binds to parameter on I1.EEventhandler.invoke(goo)'BIND:"objArg" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("objArg As System.Int32", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Parameter, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub #Region "ObjectInitializer" <Fact()> Public Sub FieldNameOfNamedFieldInitializer() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Public Class C1 Sub New() End Sub Sub New(p as integer) End Sub Public FieldInt as Long Public FieldStr as String Public Property PropInt as Integer End Class Public Class C2 Public Shared Sub Main Dim x as C1 = new C1() With {.FieldInt = 23%} 'BIND:"FieldInt" x = new C1() With {.FieldInt = 23} 'BIND1:"23" x = new C1() With {.FieldStr = .FieldInt.ToString()} 'BIND2:".FieldInt" x = new C1(23) With {.FieldInt = 23} 'BIND3:"new C1(23) With {.FieldInt = 23}" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal("System.Int64", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("C1.FieldInt As System.Int64", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Field, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of LiteralExpressionSyntax)(compilation, "a.vb", 1) Assert.Equal("System.Int32", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningNumeric, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.True(semanticSummary.ConstantValue.HasValue) Assert.Equal(23, semanticSummary.ConstantValue.Value) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb", 2) Assert.Equal("System.Int64", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("C1.FieldInt As System.Int64", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Field, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", 3) Assert.Equal("C1", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("C1", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Sub C1..ctor(p As System.Int32)", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(2, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub C1..ctor()", sortedMethodGroup(0).ToTestDisplayString()) Assert.Equal("Sub C1..ctor(p As System.Int32)", sortedMethodGroup(1).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "x") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbolFromSyntaxNode(node) Assert.Equal("x As C1", symbol.ToTestDisplayString) End Sub <Fact()> Public Sub ObjectInitializersCompleteObjectCreation() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Imports System.Collections Imports System.Collections.Generic Public Class C2 Public Goo as Integer Public Bar as Integer End Class Public Class C3 Inherits C2 End Class Class C1 Public Shared Sub Main() Dim goo As Byte = 23 Dim abcdef As New C2() With {.Goo = goo, .Bar = 23} 'BIND:"New C2() With {.Goo = goo, .Bar = 23}" abcdef = New C3() With {.Goo = goo, .Bar = 23} 'BIND1:"New C3() With {.Goo = goo, .Bar = 23}" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", 0) Assert.Equal("C2", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("C2", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Sub C2..ctor()", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(1, semanticSummary.MemberGroup.Length) Assert.Equal("Sub C2..ctor()", semanticSummary.MemberGroup(0).ToTestDisplayString) Assert.False(semanticSummary.ConstantValue.HasValue) Assert.Null(semanticSummary.ConstantValue.Value) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "abcdef") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbolFromSyntaxNode(node) Assert.Equal("abcdef As C2", symbol.ToTestDisplayString) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", 1) Assert.Equal("C3", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("C2", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningReference, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Sub C3..ctor()", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(1, semanticSummary.MemberGroup.Length) Assert.Equal("Sub C3..ctor()", semanticSummary.MemberGroup(0).ToTestDisplayString) Assert.False(semanticSummary.ConstantValue.HasValue) Assert.Null(semanticSummary.ConstantValue.Value) End Sub #End Region #Region "CollectionInitializer" <Fact()> Public Sub CollectionInitializersAreExpressionSyntaxNodesButNoVBExpressions() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Public Class C2 Public Shared Sub Main Dim x as new List(Of Integer)() From {23%, 42} 'BIND:"{23%, 42}" Dim y as new Dictionary(Of Byte, Integer)() From {{1, 42}, {2, 23}} 'BIND1:"{1, 42}" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of CollectionInitializerSyntax)(compilation, "a.vb", 0) Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of CollectionInitializerSyntax)(compilation, "a.vb", 1) Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <WorkItem(11989, "DevDiv_Projects/Roslyn")> <Fact()> Public Sub CollectionInitializersAreExpressionSyntaxNodes() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Public Module Module1 Public Sub Main() Dim y As New Dictionary(Of Byte, Integer())() From {{1, {23, 42}}, {2, {42, 23}}} 'BIND:"{23, 42}"'BIND:"{23, 42}" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of CollectionInitializerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Equal("System.Int32()", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Array, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Widening, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub CollectionInitializersConvertedType() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Imports System.Collections Imports System.Collections.Generic Public Class C2 Implements IEnumerable Dim mylist As List(Of String) Public Sub Add(p As Long) End Sub Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return mylist.GetEnumerator End Function End Class Class C1 Public Shared Sub Main() Dim goo As Byte = 23 Dim a As New C2() From {goo} 'BIND:"goo" const bar As Byte = 23 Dim a As New C2() From {bar} 'BIND1:"bar" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal("System.Byte", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningNumeric, semanticSummary.ImplicitConversion.Kind) Assert.Equal("goo As System.Byte", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) Assert.Null(semanticSummary.ConstantValue.Value) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 1) Assert.Equal("System.Byte", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningNumeric, semanticSummary.ImplicitConversion.Kind) Assert.Equal("bar As System.Byte", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.True(semanticSummary.ConstantValue.HasValue) Assert.Equal(CByte(23), semanticSummary.ConstantValue.Value) End Sub <Fact()> Public Sub CollectionInitializersConvertedTypeTypeParameters() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Imports System.Collections Imports System.Collections.Generic Public Interface IAdd(Of T) Sub Add(p As T) End Interface Class C1 Public Shared Sub DoStuff(Of T As {IAdd(Of Long), ICollection, New})() Dim goo As Byte = 23 Dim a As New T() From {goo} 'BIND:"goo" const bar As Byte = 23 Dim a As New T() From {bar} 'BIND1:"bar" End Sub Public Shared Sub Main() End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 0) Assert.Equal("System.Byte", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningNumeric, semanticSummary.ImplicitConversion.Kind) Assert.Equal("goo As System.Byte", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) Assert.Null(semanticSummary.ConstantValue.Value) semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb", 1) Assert.Equal("System.Byte", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.Type.TypeKind) Assert.Equal("System.Int64", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.WideningNumeric, semanticSummary.ImplicitConversion.Kind) Assert.Equal("bar As System.Byte", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.True(semanticSummary.ConstantValue.HasValue) Assert.Equal(CByte(23), semanticSummary.ConstantValue.Value) End Sub <Fact()> Public Sub CollectionInitializersCompleteObjectCreation() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict On Imports System Imports System.Collections Imports System.Collections.Generic Public Class C2 Implements IEnumerable Dim mylist As List(Of String) Public Sub Add(p As Long) End Sub Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return mylist.GetEnumerator End Function End Class Class C1 Public Shared Sub Main() Dim goo As Byte = 23 Dim abcdef As New C2() From {goo} 'BIND:"New C2() From {goo}" End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", 0) Assert.Equal("C2", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("C2", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Sub C2..ctor()", semanticSummary.Symbol.ToTestDisplayString) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(1, semanticSummary.MemberGroup.Length) Assert.Equal("Sub C2..ctor()", semanticSummary.MemberGroup(0).ToTestDisplayString) Assert.False(semanticSummary.ConstantValue.HasValue) Assert.Null(semanticSummary.ConstantValue.Value) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "abcdef") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbolFromSyntaxNode(node) Assert.Equal("abcdef As C2", symbol.ToTestDisplayString) End Sub #End Region <Fact(), WorkItem(544083, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544083")> Public Sub PropertySpeculativeBinding() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Module Module1 Property Property1 As String Sub Main() 'BINDHERE End Sub End Module </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim position = compilation.SyntaxTrees.Single().ToString().IndexOf("'BINDHERE", StringComparison.Ordinal) Dim expr = SyntaxFactory.ParseExpression("Property1") Dim speculativeTypeInfo = semanticModel.GetSpeculativeTypeInfo(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal("String", speculativeTypeInfo.ConvertedType.ToDisplayString()) Dim conv = semanticModel.GetSpeculativeConversion(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal(ConversionKind.Identity, conv.Kind) Assert.Equal("String", speculativeTypeInfo.Type.ToDisplayString()) Dim speculativeSymbolInfo = semanticModel.GetSpeculativeSymbolInfo(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal("Public Property Property1 As String", speculativeSymbolInfo.Symbol.ToDisplayString()) Assert.Equal(SymbolKind.Property, speculativeSymbolInfo.Symbol.Kind) End Sub <Fact(), WorkItem(544083, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544083")> Public Sub WriteOnlyPropertySpeculativeBinding() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Module Module1 WriteOnly Property Property1 As String Set End Set End Property Sub Main() 'BINDHERE End Sub End Module </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim position = compilation.SyntaxTrees.Single().ToString().IndexOf("'BINDHERE", StringComparison.Ordinal) Dim expr = SyntaxFactory.ParseExpression("Property1") Dim speculativeTypeInfo = semanticModel.GetSpeculativeTypeInfo(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal("String", speculativeTypeInfo.ConvertedType.ToDisplayString()) Dim speculativeConv = semanticModel.GetSpeculativeConversion(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal(ConversionKind.Identity, speculativeConv.Kind) Assert.Equal("String", speculativeTypeInfo.Type.ToDisplayString()) Dim speculativeSymbolInfo = semanticModel.GetSpeculativeSymbolInfo(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal("Public WriteOnly Property Property1 As String", speculativeSymbolInfo.Symbol.ToDisplayString()) Assert.Equal(SymbolKind.Property, speculativeSymbolInfo.Symbol.Kind) End Sub <Fact()> Public Sub HandlesEvent_WithEvents() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class cls1 Public Event e1() End Class Module Program Public WithEvents ww As cls1 Sub Main() Handles ww.e1'BIND:"e1" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Event cls1.e1()", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Event, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesContainer_WithEvents() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class cls1 Public Event e1() End Class Module Program Public WithEvents ww As cls1 Sub Main() Handles ww.e1'BIND:"ww" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of WithEventsEventContainerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("WithEvents Program.ww As cls1", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesProperty_WithEvents() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <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 OuterClass Private Shared SubObject As New EventSource <DesignOnly(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> Public Property SomeProperty() 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 goo() Handles x.SomeProperty.MyEvent 'BIND:"SomeProperty" 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 semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Property Project1.OuterClass.SomeProperty As Project1.EventSource", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Count) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Count) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesProperty_WithEvents001() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <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 OuterClass Private Shared SubObject As New EventSource <DesignOnly(True)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> Public Property SomeProperty() 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 goo() Handles x.SomeProperty.MyEvent'BIND:"x" 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 semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of WithEventsEventContainerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("WithEvents Project1.Sink.x As Project1.OuterClass", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Count) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Count) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesEvent_Me() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class cls1 Shared Public Event e1() Sub goo() Handles Me.e1'BIND:"e1" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Event cls1.e1()", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Event, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesEvent_MybaseInBase() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base Shared Sub goo() Handles MyBase.e1'BIND:"e1" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Event base.e1()", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Event, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesEvent_WithEventsInclass() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class cls3 Public WithEvents we As cls1 Public Sub goo() Handles we.e1'BIND:"e1" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Event base.e1()", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Event, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesEvent_WithEventsHandlesInDerived() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Public WithEvents we As cls1 End Class Class C1 Inherits C0 End Class Class cls3 Inherits C1 Public Sub goo() Handles we.e1'BIND:"e1" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("Event base.e1()", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Event, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub HandlesContainer_WithEventsHandlesInDerived() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Public WithEvents we As cls1 End Class Class C1 Inherits C0 Public Sub moo() Handles we.e1 End Sub End Class Class cls3 Inherits C1 Public Sub goo() Handles we.e1'BIND:"we" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of WithEventsEventContainerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Equal("WithEvents C0.we As cls1", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Property, semanticSummary.Symbol.Kind) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact> Public Sub HandledEvent001() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="Compilation"> <file name="q.vb"> Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Inherits cls1 Public WithEvents we As cls1 End Class Class C1 Inherits C0 Public Sub moo() Handles we.e1 End Sub End Class Class cls3 Inherits C1 Public Shadows Event e1() Public Sub goo() Handles we.e1, Me.e1, MyBase.e1, MyClass.e1 End Sub End Class Module Program Sub Main() End Sub End Module </file> </compilation>, options:=TestOptions.ReleaseExe) Dim globalNS = compilation.GlobalNamespace Dim class_cls2 = DirectCast(globalNS.GetMembers("cls3").Single(), NamedTypeSymbol) Assert.Null(class_cls2.AssociatedSymbol) Dim meth_goo = DirectCast(class_cls2.GetMembers("goo").Single(), SourceMethodSymbol) Dim handledEvents = meth_goo.HandledEvents Assert.Equal(4, handledEvents.Length) Dim handledEvent0 = handledEvents(0) Assert.Equal(HandledEventKind.WithEvents, handledEvent0.HandlesKind) Assert.Equal("e1", handledEvent0.EventSymbol.Name) Dim we = handledEvent0.EventContainer Assert.Equal("C0", we.ContainingType.Name) Assert.Equal(False, we.IsImplicitlyDeclared) Assert.Equal(False, we.IsOverrides) Dim handledEvent1 = handledEvents(1) Assert.Equal(HandledEventKind.Me, handledEvent1.HandlesKind) Assert.NotEqual(handledEvent0.EventSymbol, handledEvent1.EventSymbol) Dim handledEvent2 = handledEvents(2) Assert.Equal(HandledEventKind.MyBase, handledEvent2.HandlesKind) Assert.Equal("e1", handledEvent2.EventSymbol.Name) Assert.Equal(handledEvent0.EventSymbol, handledEvent2.EventSymbol) Dim handledEvent3 = handledEvents(3) Assert.Equal(HandledEventKind.MyClass, handledEvent3.HandlesKind) Assert.NotEqual(handledEvent0.EventSymbol, handledEvent3.EventSymbol) Assert.Equal("Private e1Event As cls3.e1EventHandler", handledEvent3.EventSymbol.AssociatedField.ToString) Assert.True(handledEvent3.EventSymbol.HasAssociatedField) Assert.Equal(ImmutableArray(Of VisualBasicAttributeData).Empty, handledEvent3.EventSymbol.GetFieldAttributes) Assert.Null(handledEvent3.EventSymbol.OverriddenEvent) Assert.Null(handledEvent0.EventSymbol.RaiseMethod) Dim commonEventSymbol As IEventSymbol = handledEvent0.EventSymbol Assert.Equal(handledEvent0.EventSymbol.AddMethod, commonEventSymbol.AddMethod) Assert.Equal(handledEvent0.EventSymbol.RemoveMethod, commonEventSymbol.RemoveMethod) Assert.Equal(handledEvent0.EventSymbol.RaiseMethod, commonEventSymbol.RaiseMethod) Assert.Equal(handledEvent0.EventSymbol.Type, commonEventSymbol.Type) Assert.Equal(handledEvent0.EventSymbol.OverriddenEvent, commonEventSymbol.OverriddenEvent) Assert.Equal(handledEvent0.EventSymbol.ExplicitInterfaceImplementations.Length, commonEventSymbol.ExplicitInterfaceImplementations.Length) Assert.Equal(handledEvent0.EventSymbol.GetHashCode, handledEvent0.EventSymbol.GetHashCode) End Sub <Fact()> Public Sub Handles_WithEventsAmbiguous() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Public Property we As cls1 Public Property we(x As Integer) As cls1 Get Return Nothing End Get Set(ByVal value As cls1) End Set End Property End Class Class cls3 Inherits C0 Public Sub goo() Handles we.e1'BIND:"we" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of WithEventsEventContainerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.Ambiguous, semanticSummary.CandidateReason) Assert.Equal(2, semanticSummary.CandidateSymbols.Length) Dim sortedCandidates = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Property C0.we As cls1", sortedCandidates(0).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(0).Kind) Assert.Equal("Property C0.we(x As System.Int32) As cls1", sortedCandidates(1).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(1).Kind) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub Handles_NotAWithEvents() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Public Property we As cls1 End Class Class cls3 Inherits C0 Public Sub goo() Handles we.e1'BIND:"we" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of WithEventsEventContainerSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.NotAWithEventsMember, semanticSummary.CandidateReason) Assert.Equal(1, semanticSummary.CandidateSymbols.Length) Dim sortedCandidates = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Property C0.we As cls1", sortedCandidates(0).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(0).Kind) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub Handles_NotAnEvent() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base Public Event e1() End Class Class cls1 Inherits base Property P1 As Integer End Class Class C0 Public WithEvents we As cls1 End Class Class cls3 Inherits C0 Public Sub goo() Handles we.P1'BIND:"P1" End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.NotAnEvent, semanticSummary.CandidateReason) Assert.Equal(1, semanticSummary.CandidateSymbols.Length) Dim sortedCandidates = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Property cls1.P1 As System.Int32", sortedCandidates(0).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(0).Kind) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub DllImportSemanticModel() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Runtime.InteropServices Module Module1 <DllImport("user32.dll", CharSet:=CharSet.Unicode, ExactSpelling:=False, EntryPoint:="MessageBox")> Public Function MessageBox(hwnd As IntPtr, t As String, t1 As String, t2 As UInt32) As Integer End Function Sub Main() MessageBox(IntPtr.Zero, "", "", 1) 'BIND:"MessageBox" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Dim sym = DirectCast(semanticSummary.Symbol, SourceMethodSymbol) Assert.Equal("Function Module1.MessageBox(hwnd As System.IntPtr, t As System.String, t1 As System.String, t2 As System.UInt32) As System.Int32", sym.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, sym.Kind) Assert.Equal("Module1", sym.ContainingSymbol.ToTestDisplayString()) End Sub <Fact()> Public Sub DeclareStatementSemanticModel() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Module Module1 Public Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" ( hwnd As IntPtr, t As String, t2 As String, t2 As UInt32) As Integer Sub Main() MessageBox(IntPtr.Zero, "", "", 1) 'BIND:"MessageBox" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Dim sym = DirectCast(semanticSummary.Symbol, SourceMethodSymbol) Assert.Equal("Declare Ansi Function Module1.MessageBox Lib ""user32.dll"" Alias ""MessageBoxA"" (hwnd As System.IntPtr, t As System.String, t2 As System.String, t2 As System.UInt32) As System.Int32", sym.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, sym.Kind) Assert.Equal("Module1", sym.ContainingSymbol.ToTestDisplayString()) End Sub <Fact()> Public Sub LateBoundCall001() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim o As Object = "qqq" Dim i As Integer = o.Length'BIND:"Length" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Int32", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Structure, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.NarrowingValue, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundCallOverloaded() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim o As Object = 1 goo(o) 'BIND:"goo" End Sub Sub goo(x As String) End Sub Sub goo(x As Integer) End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(2, semanticSummary.CandidateSymbols.Length) Dim sortedSymbols = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedSymbols(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedSymbols(1).ToTestDisplayString()) Assert.Null(semanticSummary.Alias) Assert.Equal(2, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedMethodGroup(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedMethodGroup(1).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundCallOverloaded001() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim o As Object = 1 goo(o)'BIND:"goo(o)" End Sub Sub goo(x As String) End Sub Sub goo(x As Integer) End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(2, semanticSummary.CandidateSymbols.Length) Dim sortedSymbols = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedSymbols(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedSymbols(1).ToTestDisplayString()) Assert.Null(semanticSummary.Alias) Assert.Equal(2, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedMethodGroup(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedMethodGroup(1).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundCallOverloaded002() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Class Program Shared Sub Main(args As String()) Dim o As Object = 1 Dim c As New Program c.goo(o)'BIND:"c.goo" End Sub Sub goo(x As String) End Sub Sub goo(x As Integer) End Sub End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(2, semanticSummary.CandidateSymbols.Length) Dim sortedSymbols = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedSymbols(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedSymbols(1).ToTestDisplayString()) Assert.Null(semanticSummary.Alias) Assert.Equal(2, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("Sub Program.goo(x As System.Int32)", sortedMethodGroup(0).ToTestDisplayString()) Assert.Equal("Sub Program.goo(x As System.String)", sortedMethodGroup(1).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundIndex() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim o As Object = 1 Dim x = o(o)'BIND:"o(o)" End Sub Sub goo(x As String) End Sub Sub goo(x As Integer) End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundIndexOverloaded() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Class Program Sub Main(args As String()) Dim o As Object = 1 Dim c As New Program Dim x = c(o)'BIND:"c(o)" End Sub Default ReadOnly Property P1(x As Integer) As Integer Get Return 1 End Get End Property Default ReadOnly Property P1(x As String) As Integer Get Return 1 End Get End Property End Class ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(2, semanticSummary.CandidateSymbols.Length) Dim sortedSymbols = semanticSummary.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("ReadOnly Property Program.P1(x As System.Int32) As System.Int32", sortedSymbols(0).ToTestDisplayString()) Assert.Equal("ReadOnly Property Program.P1(x As System.String) As System.Int32", sortedSymbols(1).ToTestDisplayString()) Assert.Null(semanticSummary.Alias) Assert.Equal(2, semanticSummary.MemberGroup.Length) Dim sortedMethodGroup = semanticSummary.MemberGroup.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("ReadOnly Property Program.P1(x As System.Int32) As System.Int32", sortedMethodGroup(0).ToTestDisplayString()) Assert.Equal("ReadOnly Property Program.P1(x As System.String) As System.Int32", sortedMethodGroup(1).ToTestDisplayString()) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact()> Public Sub LateBoundAddressOf() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim o As Object = "qq" Dim a As Action = AddressOf o.Length'BIND:"o.Length" End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of MemberAccessExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.Type.TypeKind) Assert.Equal("System.Object", semanticSummary.ConvertedType.ToTestDisplayString()) Assert.Equal(TypeKind.Class, semanticSummary.ConvertedType.TypeKind) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact(), WorkItem(545976, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545976")> Public Sub ArrayLiteralSpeculativeBinding() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Module Module1 Sub Main() 'BINDHERE End Sub End Module </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim position = compilation.SyntaxTrees.Single().ToString().IndexOf("'BINDHERE", StringComparison.Ordinal) Dim expr = SyntaxFactory.ParseExpression("{1, 2, 3}") Dim speculativeTypeInfo = semanticModel.GetSpeculativeTypeInfo(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Null(speculativeTypeInfo.Type) Assert.Equal("Integer()", speculativeTypeInfo.ConvertedType.ToDisplayString()) Dim speculativeConversion = semanticModel.GetSpeculativeConversion(position, expr, SpeculativeBindingOption.BindAsExpression) Assert.Equal(ConversionKind.Widening, speculativeConversion.Kind) End Sub <WorkItem(545346, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/545346")> <Fact()> Public Sub Bug13693() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Class C Sub Goo() Dim x As New |D(5) 'BIND:"Dim x As New |D(5)" End Sub End Class </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim node = compilation.SyntaxTrees(0).FindNodeOrTokenByKind(SyntaxKind.NewKeyword) Dim info = semanticModel.GetSymbolInfo(DirectCast(node.Parent, NewExpressionSyntax).Type) Assert.Equal(SymbolInfo.None, info) End Sub ''' <summary> ''' Bind reference to property with no accessors. ''' </summary> ''' <remarks></remarks> <WorkItem(546182, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546182")> <Fact> Public Sub ReferenceToPropertyWithNoAccessors() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation> <file name="a.vb"><![CDATA[ Class C Property P As Object End Property End Class Module M Sub M(o As C) Dim v As Object v = o.P o.P = v End Sub End Module ]]></file> </compilation>, {SystemCoreRef}) compilation.AssertTheseDiagnostics(<errors><![CDATA[ BC30124: Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'. Property P As Object ~ BC30524: Property 'P' is 'WriteOnly'. v = o.P ~~~ BC30526: Property 'P' is 'ReadOnly'. o.P = v ~~~~~~~ ]]></errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) ' v = o.P Dim syntax = FindNodeOfTypeFromText(Of AssignmentStatementSyntax)(tree, "v = o.P") Dim info = GetSemanticInfoSummary(model, syntax.Right) Assert.NotNull(info.Type) Assert.Equal(info.Type.SpecialType, SpecialType.System_Object) Assert.Null(info.Symbol) CheckSymbols(info.CandidateSymbols, "Property C.P As Object") Dim [property] = DirectCast(info.CandidateSymbols(0), PropertySymbol) Assert.Null([property].GetMethod) Assert.Null([property].SetMethod) ' o.P = v syntax = FindNodeOfTypeFromText(Of AssignmentStatementSyntax)(tree, "o.P = v") info = GetSemanticInfoSummary(model, syntax.Left) Assert.NotNull(info.Type) Assert.Equal(info.Type.SpecialType, SpecialType.System_Object) CheckSymbol(info.Symbol, "Property C.P As Object") [property] = DirectCast(info.Symbol, PropertySymbol) Assert.Null([property].GetMethod) Assert.Null([property].SetMethod) End Sub <Fact()> Public Sub SpeculativeConstantValueForGroupAggregationSyntax() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim qr_Result = From i In "hello" Select a = i, b = "test" Group By a Into fielda = Group End Sub End Module </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim source = compilation.SyntaxTrees.Single().GetCompilationUnitRoot().ToFullString() Dim position = source.IndexOf("fielda = Group", StringComparison.Ordinal) Dim syntaxNode = compilation.SyntaxTrees().Single().GetCompilationUnitRoot().FindToken(position).Parent.Parent.Parent.DescendantNodesAndSelf.OfType(Of GroupAggregationSyntax).Single() Dim speculativeConstantValue = semanticModel.GetSpeculativeConstantValue(syntaxNode.SpanStart, syntaxNode) Assert.False(speculativeConstantValue.HasValue) End Sub <WorkItem(546270, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546270")> <Fact()> Public Sub SpeculativeConstantValueForLabelSyntax() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Module Program Sub Main(args As String()) If True Then GoTo Label1 Label1: End Sub End Module </file> </compilation>) Dim semanticModel = GetSemanticModel(compilation, "a.vb") Dim source = compilation.SyntaxTrees.Single().GetCompilationUnitRoot().ToFullString() Dim position = source.IndexOf("GoTo Label1", StringComparison.Ordinal) Dim syntaxNode = compilation.SyntaxTrees().Single().GetCompilationUnitRoot().FindToken(position).Parent.DescendantNodesAndSelf.OfType(Of LabelSyntax).Single() Dim speculativeTypeInfo = semanticModel.GetSpeculativeConstantValue(syntaxNode.SpanStart, syntaxNode) Assert.False(speculativeTypeInfo.HasValue) End Sub <Fact()> Public Sub Regress15532() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq #Const goo = Nothing Module Program Sub Main(args As String()) #If goo = 3 + 20 Then 'BIND:"20" Console.WriteLine() #Else console.writeline() #End If End Sub End Module ]]></file> </compilation>) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of LiteralExpressionSyntax)(compilation, "a.vb") Assert.Null(semanticSummary.Type) Assert.Null(semanticSummary.ConvertedType) Assert.Equal(ConversionKind.Identity, semanticSummary.ImplicitConversion.Kind) Assert.Null(semanticSummary.Symbol) Assert.Equal(CandidateReason.None, semanticSummary.CandidateReason) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Null(semanticSummary.Alias) Assert.Equal(0, semanticSummary.MemberGroup.Length) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub #Region "Diagnostics" <WorkItem(541269, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541269")> <Fact()> Public Sub GetDiagnosticsAddressOfOperatorWithoutMscorlibRef() Dim options = TestOptions.ReleaseDll.WithRootNamespace("Goo.Bar") Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences( <compilation name="Compilation"> <file name="a.vb"> Namespace Server Public Class Scen8 Delegate Function DelFunction() As Integer Delegate Sub DelSub(x as Integer) Public DelField1 As DelFunction = AddressOf TestFunction Public DelField2 As DelSub = AddressOf TestSub Friend Function TestFunction() As Integer Return 42 End Function Friend Sub TestSub(x as Integer) End Sub public sub MySub() Dim delLocal1 As DelFunction = AddressOf TestFunction Dim delLocal2 As DelSub = AddressOf TestSub End Sub End Class End Namespace </file> </compilation>, {}) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") Dim bindingsA = compilation.GetSemanticModel(treeA) Dim diagnostics = bindingsA.GetDiagnostics() AssertTheseDiagnostics(compilation, <errors> BC30002: Type 'System.Void' is not defined. Public Class Scen8 ~~~~~~~~~~~~~~~~~~~ BC31091: Import of type 'Object' from assembly or module 'Compilation.dll' failed. Public Class Scen8 ~~~~~ BC30002: Type 'System.AsyncCallback' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IAsyncResult' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IntPtr' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Object' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Void' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC31091: Import of type 'MulticastDelegate' from assembly or module 'Compilation.dll' failed. Delegate Function DelFunction() As Integer ~~~~~~~~~~~ BC30002: Type 'System.Int32' is not defined. Delegate Function DelFunction() As Integer ~~~~~~~ BC30002: Type 'System.AsyncCallback' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IAsyncResult' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.IntPtr' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Object' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Void' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Void' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC31091: Import of type 'MulticastDelegate' from assembly or module 'Compilation.dll' failed. Delegate Sub DelSub(x as Integer) ~~~~~~ BC30002: Type 'System.Int32' is not defined. Delegate Sub DelSub(x as Integer) ~~~~~~~ BC31091: Import of type 'Object' from assembly or module 'Compilation.dll' failed. Public DelField1 As DelFunction = AddressOf TestFunction ~~~~~~~~~~~~ BC31143: Method 'Friend Function TestFunction() As Integer' does not have a signature compatible with delegate 'Delegate Function Scen8.DelFunction() As Integer'. Public DelField1 As DelFunction = AddressOf TestFunction ~~~~~~~~~~~~ BC31091: Import of type 'Object' from assembly or module 'Compilation.dll' failed. Public DelField2 As DelSub = AddressOf TestSub ~~~~~~~ BC31143: Method 'Friend Sub TestSub(x As Integer)' does not have a signature compatible with delegate 'Delegate Sub Scen8.DelSub(x As Integer)'. Public DelField2 As DelSub = AddressOf TestSub ~~~~~~~ BC30002: Type 'System.Int32' is not defined. Friend Function TestFunction() As Integer ~~~~~~~ BC30002: Type 'System.Int32' is not defined. Return 42 ~~ BC30002: Type 'System.Void' is not defined. Friend Sub TestSub(x as Integer) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC30002: Type 'System.Int32' is not defined. Friend Sub TestSub(x as Integer) ~~~~~~~ BC30002: Type 'System.Void' is not defined. public sub MySub() ~~~~~~~~~~~~~~~~~~~ BC31091: Import of type 'Object' from assembly or module 'Compilation.dll' failed. Dim delLocal1 As DelFunction = AddressOf TestFunction ~~~~~~~~~~~~ BC31143: Method 'Friend Function TestFunction() As Integer' does not have a signature compatible with delegate 'Delegate Function Scen8.DelFunction() As Integer'. Dim delLocal1 As DelFunction = AddressOf TestFunction ~~~~~~~~~~~~ BC31091: Import of type 'Object' from assembly or module 'Compilation.dll' failed. Dim delLocal2 As DelSub = AddressOf TestSub ~~~~~~~ BC31143: Method 'Friend Sub TestSub(x As Integer)' does not have a signature compatible with delegate 'Delegate Sub Scen8.DelSub(x As Integer)'. Dim delLocal2 As DelSub = AddressOf TestSub ~~~~~~~ </errors>) End Sub <WorkItem(541271, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541271")> <Fact()> Public Sub GetDiagnosticsSubInsideAnInterfaceWithoutMscorlibRef() Dim options = TestOptions.ReleaseDll.WithRootNamespace("Goo.Bar") Dim compilation = CompilationUtils.CreateEmptyCompilationWithReferences( <compilation name="Compilation"> <file name="a.vb"> Friend Interface I10 Sub goo() End Interface </file> </compilation>, {}) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") Dim bindingsA = compilation.GetSemanticModel(treeA) Dim diagnostics = bindingsA.GetDiagnostics() Assert.Equal(1, diagnostics.Length()) AssertTheseDiagnostics(diagnostics, <expected> BC30002: Type 'System.Void' is not defined. Sub goo() ~~~~~~~~~ </expected>) End Sub <WorkItem(541304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541304")> <Fact()> Public Sub GetDiagnosticsDoLoopWithConditionAtBottomAndTopPart() Dim options = TestOptions.ReleaseDll.WithRootNamespace("Goo.Bar") Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Module Program Sub Main(ByVal args As String()) Do Until Loop Until End Sub End Module </file> </compilation>, options) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") Dim diagnostics = compilation.GetDiagnostics() Assert.InRange(diagnostics.Length(), 1, Integer.MaxValue) AssertTheseDiagnostics(diagnostics, <expected> BC30201: Expression expected. Do Until ~ BC30238: 'Loop' cannot have a condition if matching 'Do' has one. Loop Until ~~~~~ BC30201: Expression expected. Loop Until ~ </expected>) End Sub <Fact()> Public Sub GetDiagnosticsDoLoopWithConditionAtBottomAndTopPart2() Dim options = TestOptions.ReleaseDll.WithRootNamespace("Goo.Bar") Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Module Program Sub Main(ByVal args As String()) dim a as Integer = 23 ' test that this only shows one diagnostic for using both conditions Do Until a > 42 Loop Until a = 23 ' test that diagnostics get reported from both conditions Do Until (goo() + 23) Loop Until a = (goo() + 23) End Sub Sub goo() end sub End Module </file> </compilation>, options) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") AssertTheseDiagnostics(compilation.GetDiagnostics(), <expected> BC30238: 'Loop' cannot have a condition if matching 'Do' has one. Loop Until a = 23 ~~~~~ BC30491: Expression does not produce a value. Do Until (goo() + 23) ~~~~~ BC30238: 'Loop' cannot have a condition if matching 'Do' has one. Loop Until a = (goo() + 23) ~~~~~ BC30491: Expression does not produce a value. Loop Until a = (goo() + 23) ~~~~~ </expected>) End Sub <WorkItem(541407, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541407")> <Fact> Public Sub GetDiagnosticsWithRootNamespace() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="Compilation"> <file name="a.vb"> Option Strict Off Imports System Class C Sub M() Dim a As String a = New Guid() End Sub End Class </file> <file name="b.vb"> Namespace N1 Public Class Class2 Sub b() Return 43 End Sub End Class End Namespace </file> </compilation>, options:=TestOptions.ReleaseDll.WithRootNamespace("Goo.Bar")) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") Dim semanticModelA = compilation.GetSemanticModel(treeA) CompilationUtils.AssertTheseDiagnostics(semanticModelA.GetDiagnostics(), <expected> BC30311: Value of type 'Guid' cannot be converted to 'String'. a = New Guid() ~~~~~~~~~~ </expected>) Dim treeB = CompilationUtils.GetTree(compilation, "b.vb") Dim semanticModelB = compilation.GetSemanticModel(treeB) CompilationUtils.AssertTheseDiagnostics(semanticModelB.GetDiagnostics(), <expected> BC30647: 'Return' statement in a Sub or a Set cannot return a value. Return 43 ~~~~~~~~~ </expected>) End Sub <Fact, WorkItem(541479, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541479")> Public Sub GetDiagnosticsPropNameAsForLoopVariable() CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Friend Module CtFor001_01mod Sub main() 'COMPILEERROR: BC30039, "prop1" For prop1 = 1 To 10 Dim vvv As Short vvv = prop1 Next End Sub Public Property prop1() As Short Set(ByVal Value As Short) End Set Get Return 1 End Get End Property End Module </file> </compilation>).VerifyDiagnostics(Diagnostic(ERRID.ERR_LoopControlMustNotBeProperty, "prop1")) End Sub <WorkItem(541480, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541480")> <Fact()> Public Sub GetDiagnosticsWithEventsInStruct() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Imports System Friend Module StructFunc040mod Class c1 End Class Structure struct1 'COMPILEERROR: BC30435,"withevents" Dim WithEvents c As c1 End Structure End Module </file> </compilation>) Dim errs = compilation.GetDiagnostics() CompilationUtils.AssertTheseDiagnostics(compilation, <errors> BC30435: Members in a Structure cannot be declared 'WithEvents'. Dim WithEvents c As c1 ~~~~~~~~~~ </errors>) End Sub <WorkItem(541559, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541559")> <Fact()> Public Sub BindIncompleteFieldDeclAsArray() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="Compilation"> <file name="a.vb"> Public Module publicHMod Public DecimalVarArr( </file> </compilation>) Dim errs = compilation.GetDiagnostics() Assert.NotEqual(0, errs.Length()) End Sub <WorkItem(541578, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541578")> <Fact()> Public Sub PassByRefArgumentWithAlias() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Imports System Imports ProjRoot = Qlid036 Namespace Qlid036 Friend Module QLID036BAS Public VariableA As Integer Sub proc307(ByRef tempvar As Object) End Sub Sub S() proc307(ProjRoot.[VariableA]) End Sub End Module End Namespace </file> </compilation>) compilation.AssertNoDiagnostics() End Sub <WorkItem(541579, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541579")> <Fact()> Public Sub InvalidLabelsWithNumericSuffix() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Friend Module GotoRegress003mod Sub Main() ' COMPILEERROR: BC30035, "19I" 19I: ' COMPILEERROR: BC30035, "23L" 23L: ' Was COMPILEERROR: BC30801, "24", BC30451, "M" in Dev10 ' Roslyn: BC30801: Labels that are numbers must be followed by colons. 24M: ' again a BC30801: Labels that are numbers must be followed by colons. ' but because the M and Main from these labels are now skipped tokens of the colon ' we'll get a duplicate label as well (same behavior as Dev10) 24Main: ' COMPILEERROR: BC30035, "31S" 31S: ' BC31395: Type characters are not allowed in label identifiers. C$: ' BC36637: The '?' character cannot be used here. C?: ' BC30035: Syntax error. 12%: End Sub End Module </file> </compilation>) Dim errs = compilation.GetDiagnostics() Assert.NotEqual(0, errs.Length()) AssertTheseDiagnostics(compilation, <Expected> BC30035: Syntax error. 19I: ~~~ BC30035: Syntax error. 23L: ~~~ BC30801: Labels that are numbers must be followed by colons. 24M: ~~ BC30094: Label '24' is already defined in the current method. 24Main: ~~ BC30801: Labels that are numbers must be followed by colons. 24Main: ~~ BC30035: Syntax error. 31S: ~~~ BC31395: Type characters are not allowed in label identifiers. C$: ~~ BC30451: 'C' is not declared. It may be inaccessible due to its protection level. C?: ~ BC36637: The '?' character cannot be used here. C?: ~ BC30035: Syntax error. 12%: ~~~ </Expected>) End Sub <WorkItem(541619, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/541619")> <Fact()> Public Sub ExceptionVariableUsedInLambda() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation name="Compilation"> <file name="a.vb"> Imports System Module Program Sub Main(args As String()) Try Catch ex As Exception Dim x1 As Func(Of Integer, String) = Function(x) ex.Message End Try End Sub End Module </file> </compilation>) Dim errs = compilation.GetDiagnostics() Assert.Equal(0, errs.Length()) End Sub <WorkItem(543393, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543393")> <Fact()> Public Sub MemberOfIncompleteClassDecl() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation name="Compilation"> <file name="a.vb"> Module TestModule Sub Main() Dim val = TestMethod.NUMBER End Sub End Module Class TestMethod Public Const NUMBER </file> </compilation>) Dim treeA = CompilationUtils.GetTree(compilation, "a.vb") Dim rootA = treeA.GetCompilationUnitRoot() Dim bindingsA = compilation.GetSemanticModel(treeA) Assert.NotEmpty(bindingsA.GetDiagnostics()) End Sub <WorkItem(529095, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529095")> <Fact> Public Sub CannotConvertConstExprToType() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Module Program Sub Main(args As String()) Dim b As ULong = Integer.MaxValue + 1 End Sub End Module ]]></file> </compilation>) ' (3,26): error BC30439: Constant expression not representable in type 'Integer'. compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_ExpressionOverflow1, "Integer.MaxValue + 1").WithArguments("Integer")) End Sub Private Function GetTypeParameterSymbol(compilation As VisualBasicCompilation, semanticModel As SemanticModel, treeName As String, stringInDecl As String, ByRef syntax As TypeParameterSyntax) As ITypeParameterSymbol Dim tree As SyntaxTree = CompilationUtils.GetTree(compilation, treeName) Dim node = CompilationUtils.FindTokenFromText(tree, stringInDecl).Parent While Not (TypeOf node Is TypeParameterSyntax) node = node.Parent Assert.NotNull(node) End While syntax = DirectCast(node, TypeParameterSyntax) Return semanticModel.GetDeclaredSymbol(syntax) End Function <WorkItem(543603, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/543603")> <Fact()> Public Sub BC30282ERR_InvalidConstructorCall_AddressOfConstructor() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Friend Module RDNegConstructormod Class C1 Public Sub New(ByVal t As Byte) End Sub End Class Public Delegate Sub delInteger(ByVal a As Integer) Sub Main() Dim class1 As C1 = New C1(1) Dim dInteger As delInteger = AddressOf class1.New End Sub End Module ]]></file> </compilation>) ' (11): error BC30282: Constructor call is valid only as the first statement in an instance constructor. compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_InvalidConstructorCall, "class1.New")) End Sub <WorkItem(544648, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544648")> <Fact> Public Sub SpeculativelyBindExtensionMethod() Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation name="DetectingExtensionAttributeOnImport"> <file name="a.vb"> Imports System Imports System.Collections.Generic Imports System.Reflection Module Program Sub Main() Dim fields As FieldInfo() = GetType(Exception).GetFields() Console.WriteLine(fields.Any(TryCast(Function(field) field.IsStatic, Func(Of FieldInfo, Boolean)))) End Sub <System.Runtime.CompilerServices.Extension> Function Any(Of T)(s As IEnumerable(Of T), predicate As Func(Of T, Boolean)) As Boolean Return False End Function <System.Runtime.CompilerServices.Extension> Function Any(Of T)(s As ICollection(Of T), predicate As Func(Of T, Boolean)) As Boolean Return True End Function End Module </file> </compilation>, {Net40.References.SystemCore}) comp.VerifyDiagnostics() Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim originalSyntax = tree.GetCompilationUnitRoot().DescendantNodes.OfType(Of InvocationExpressionSyntax).Last() Assert.True(originalSyntax.ToString().StartsWith("fields", StringComparison.Ordinal)) Dim info1 = model.GetSymbolInfo(originalSyntax) Dim method1 = TryCast(info1.Symbol, MethodSymbol) Assert.NotNull(method1) Assert.Equal("Function System.Collections.Generic.ICollection(Of System.Reflection.FieldInfo).Any(predicate As System.Func(Of System.Reflection.FieldInfo, System.Boolean)) As System.Boolean", method1.ToTestDisplayString()) Assert.Equal("Function Program.Any(Of T)(s As System.Collections.Generic.ICollection(Of T), predicate As System.Func(Of T, System.Boolean)) As System.Boolean", method1.ReducedFrom.ToTestDisplayString()) Assert.Equal("System.Collections.Generic.ICollection(Of System.Reflection.FieldInfo)", method1.ReceiverType.ToTestDisplayString()) Assert.Equal("System.Reflection.FieldInfo", method1.GetTypeInferredDuringReduction(method1.ReducedFrom.TypeParameters(0)).ToTestDisplayString()) Assert.Throws(Of InvalidOperationException)(Sub() method1.ReducedFrom.GetTypeInferredDuringReduction(Nothing)) Assert.Throws(Of ArgumentNullException)(Sub() method1.GetTypeInferredDuringReduction(Nothing)) Assert.Throws(Of ArgumentException)(Sub() method1.GetTypeInferredDuringReduction( comp.SourceModule.GlobalNamespace.GetTypeMember("Program").GetMembers("Any"). Where(Function(m) m IsNot method1.ReducedFrom).Cast(Of MethodSymbol)().Single().TypeParameters(0))) Assert.Equal("Any", method1.Name) Dim reducedFrom1 = method1.CallsiteReducedFromMethod Assert.NotNull(reducedFrom1) Assert.Equal("Function Program.Any(Of System.Reflection.FieldInfo)(s As System.Collections.Generic.ICollection(Of System.Reflection.FieldInfo), predicate As System.Func(Of System.Reflection.FieldInfo, System.Boolean)) As System.Boolean", reducedFrom1.ToTestDisplayString()) Assert.Equal("Program", reducedFrom1.ReceiverType.ToTestDisplayString()) Assert.Equal(SpecialType.System_Collections_Generic_ICollection_T, CType(reducedFrom1.Parameters(0).Type.OriginalDefinition, TypeSymbol).SpecialType) Dim speculativeSyntax = SyntaxFactory.ParseExpression("fields.Any(Function(field) field.IsStatic)") ' cast removed Assert.Equal(SyntaxKind.InvocationExpression, speculativeSyntax.Kind) Dim info2 = model.GetSpeculativeSymbolInfo(originalSyntax.SpanStart, speculativeSyntax, SpeculativeBindingOption.BindAsExpression) Dim method2 = TryCast(info2.Symbol, MethodSymbol) Assert.NotNull(method2) Assert.Equal("Any", method2.Name) Dim reducedFrom2 = method2.CallsiteReducedFromMethod Assert.NotNull(reducedFrom2) Assert.Equal(SpecialType.System_Collections_Generic_ICollection_T, CType(reducedFrom2.Parameters(0).Type.OriginalDefinition, TypeSymbol).SpecialType) Assert.Equal(reducedFrom1, reducedFrom2) Assert.Equal(method1, method2) End Sub <WorkItem(546126, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546126")> <Fact> Public Sub SpeculativelyBindExtensionMethod2() Dim comp = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation name="DetectingExtensionAttributeOnImport"> <file name="a.vb"> Imports System Imports System.Collections.Generic Imports System.Linq Module Program Sub Main(args As String()) Dim l = CType({1, 2, 3}, IEnumerable(Of Integer)).ToList End Sub End Module </file> </compilation>, {Net40.References.SystemCore}) comp.AssertNoDiagnostics() Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim originalSyntax = tree.GetCompilationUnitRoot().DescendantNodes.OfType(Of MemberAccessExpressionSyntax).Single() Assert.True(originalSyntax.ToString().EndsWith(".ToList", StringComparison.Ordinal)) Dim info1 = model.GetSymbolInfo(originalSyntax) Dim method1 = TryCast(info1.Symbol, MethodSymbol) Assert.NotNull(method1) Assert.Equal("ToList", method1.Name) Dim reducedFrom1 = method1.CallsiteReducedFromMethod Assert.NotNull(reducedFrom1) Dim speculativeSyntax = SyntaxFactory.ParseExpression("{1, 2, 3}.ToList") ' cast removed Assert.Equal(SyntaxKind.SimpleMemberAccessExpression, speculativeSyntax.Kind) Dim info2 = model.GetSpeculativeSymbolInfo(originalSyntax.SpanStart, speculativeSyntax, SpeculativeBindingOption.BindAsExpression) Dim method2 = TryCast(info2.Symbol, MethodSymbol) Assert.NotNull(method2) Assert.Equal("ToList", method2.Name) Dim reducedFrom2 = method2.CallsiteReducedFromMethod Assert.NotNull(reducedFrom2) Assert.Equal(reducedFrom1, reducedFrom2) Assert.Equal(method1, method2) End Sub #End Region <Fact> Public Sub NamedTypeSymbol_CodeCoverage() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Imports System Imports System.Collections.Generic Imports System.Linq Class base <obsolete> Public Event e1() End Class Class cls1 Inherits base End Class Class C0 Inherits cls1 <obsolete> Public WithEvents we As cls1 End Class Class C1 Inherits C0 Public Sub moo() Handles we.e1 End Sub End Class Class cls3 Inherits C1 Public Shadows Event e1() Public Sub goo() Handles we.e1, Me.e1, MyBase.e1, MyClass.e1 End Sub End Class Class SharedCons Shared Sub New() End Sub End Class Module Program Sub Main() End Sub End Module ]]></file> </compilation>) Dim globalNS As NamespaceSymbol = compilation.GlobalNamespace Dim class_cls2 As NamedTypeSymbol = DirectCast(globalNS.GetMembers("cls3").Single, NamedTypeSymbol) Dim sharedSymb As NamedTypeSymbol = DirectCast(globalNS.GetMembers("SharedCons").Single(), NamedTypeSymbol) Assert.NotEqual(0, sharedSymb.SharedConstructors.Length) sharedSymb = DirectCast(globalNS.GetMembers("Program").Single, NamedTypeSymbol) Assert.Equal(0, sharedSymb.SharedConstructors.Length) Assert.Equal(0, class_cls2.SharedConstructors.Length) Assert.False(sharedSymb.IsScriptClass) Assert.False(sharedSymb.IsSubmissionClass) Assert.NotNull(RuntimeHelpers.GetObjectValue(sharedSymb.ToString)) Assert.Equal(sharedSymb.Language, "Visual Basic") Assert.Equal(globalNS.Language, "Visual Basic") End Sub <Fact> Public Sub TypeParameterSymbolMethod_IsReferenceOrValueType() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ Module Program Sub Main(args As String()) Dim x As New C1(Of String, Integer) x.K(Of Single)(1.1) Dim x3 as New Derived x3.MySub(Of s1)(New s1) End Sub End Module Class C1(Of TTT, UUU) Public Sub K(Of VVV)(a As VVV) End Sub End Class Class C1(Of TTT) End Class Class C2R(of AAA as Class) End Class Class C2S(of BBB as Structure) End Class Structure S1 Dim x as integer End Structure Class C3R(of CCC as RefTypConstraint) End Class Class RefTypConstraint End Class Class BaseGeneric(Of {EEE, S1}) Public Overridable Sub MySub(Of T As EEE)(param As T) End Sub End Class Class Derived Inherits BaseGeneric(Of S1) Public Overrides Sub MySub(Of FFF As S1)(param As FFF) End Sub End Class ]]></file> </compilation>) Dim treeA As SyntaxTree = CompilationUtils.GetTree(compilation, "a.vb") Dim bindingsA = compilation.GetSemanticModel(treeA) Dim syntax As TypeParameterSyntax = Nothing Dim tpSymbol1 = GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "TTT", syntax) Assert.NotEqual(tpSymbol1.TypeParameterKind, TypeParameterKind.Method) Assert.Null(tpSymbol1.DeclaringMethod) Assert.False(tpSymbol1.IsReferenceType) Assert.False(tpSymbol1.IsValueType) Assert.Equal("C1(Of TTT, UUU)", VisualBasic.SymbolDisplay.ToDisplayString(tpSymbol1.DeclaringType, Nothing)) tpSymbol1 = Me.GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "VVV", syntax) Assert.Null(tpSymbol1.DeclaringType) Assert.Equal(tpSymbol1.TypeParameterKind, TypeParameterKind.Method) Assert.Equal("Public Sub K(Of VVV)(a As VVV)", VisualBasic.SymbolDisplay.ToDisplayString(tpSymbol1.DeclaringMethod, Nothing)) Assert.False(tpSymbol1.IsReferenceType) Assert.False(tpSymbol1.IsValueType) tpSymbol1 = Me.GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "AAA", syntax) Assert.True(tpSymbol1.IsReferenceType) Assert.False(tpSymbol1.IsValueType) tpSymbol1 = Me.GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "BBB", syntax) Assert.False(tpSymbol1.IsReferenceType) Assert.True(tpSymbol1.IsValueType) tpSymbol1 = Me.GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "CCC", syntax) Assert.True(tpSymbol1.IsReferenceType) Assert.False(tpSymbol1.IsValueType) tpSymbol1 = Me.GetTypeParameterSymbol(compilation, bindingsA, "a.vb", "FFF", syntax) Assert.False(tpSymbol1.IsReferenceType) Assert.True(tpSymbol1.IsValueType) End Sub <WorkItem(546520, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546520")> <Fact()> Public Sub ContainingSymbolOfBinderMayNotFindMembers() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Module DelegateModule Namespace My Public Class A Public writeonly Property FGooX() As object Set(ByVal value As Type) End Set End Property Public Custom Event Click As Object AddHandler(ByVal value As EventHandler) EventHandlerList.Add(value) End AddHandler End Event end class </file> </compilation>) Dim tree = compilation.SyntaxTrees(0) Dim node = DirectCast(FindNodeFromText(tree, "Type"), IdentifierNameSyntax) Dim typeInfo = compilation.GetSemanticModel(tree).GetTypeInfo(node) Assert.NotNull(typeInfo.Type) Assert.Equal("Type", typeInfo.Type.Name) node = DirectCast(FindNodeFromText(tree, "EventHandler"), IdentifierNameSyntax) typeInfo = compilation.GetSemanticModel(tree).GetTypeInfo(node) Assert.NotNull(typeInfo.Type) Assert.Equal("EventHandler", typeInfo.Type.Name) End Sub <Fact> Public Sub GetDeclaredSymbolForInvalidAccessorsDoesNotThrown() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Namespace N ' invalid code. AddHandler() End Namespace </file> </compilation>) Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "AddHandler") Dim symbol = compilation.GetSemanticModel(tree).GetDeclaredSymbol(node) Assert.Null(symbol) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierInIfDirective() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = 0 #If CCCONST = 0 Then'BIND:"CCCONST" #End If ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal(0, symbolInfo.ConstantValue) Assert.True(symbolInfo.Symbol.Equals(symbolInfo.Symbol)) Assert.False(symbolInfo.Symbol.Equals(Nothing)) Dim symbolInfo2 = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.NotSame(symbolInfo.Symbol, symbolInfo2.Symbol) Assert.Equal(symbolInfo.Symbol, symbolInfo2.Symbol) Assert.Equal(symbolInfo.Symbol.GetHashCode(), symbolInfo2.Symbol.GetHashCode()) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierInElseIfDirective() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = 0 #If CCCONST = 0 Then #ElseIf CCCONST = 1 Then'BIND:"CCCONST" #End If ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal(0, symbolInfo.ConstantValue) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierInConstDirective() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "SomeValue" #Const ccConst2 = CCCONST + "Suffix"'BIND:"CCCONST" ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal("SomeValue", symbolInfo.ConstantValue) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierInBinaryExpression() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "SomeValue" #Const ccConst2 = CCCONST + "Suffix" ' Binary expression #If CCconST = CCCONST2 Then'BIND:"CCCONST2" #End If ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst2", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal("SomeValueSuffix", symbolInfo.ConstantValue) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierUsedBeforeDefinition() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "SomeValue" ' Undefined constant ccConst2 (it's defined later). #if CCCONST2 = ccCONSt + "Suffix" then'BIND:"CCCONST2" #end if #Const ccConst2 = CCCONST + "Suffix" ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("CCCONST2", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.False(symbolInfo.IsDefined, "must not have a constant value before definition") End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierWithMultipleDefinitions() ' Multiple definitions for ccConst, last definition wins. Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "OldValue" #Const ccConst = "NewValue" #If CCCONST = "NewValue" Then'BIND:"CCCONST" #End If ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal("NewValue", symbolInfo.ConstantValue) ' New definition later in the source file, old definition wins. compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "OldValue" #If CCCONST = "NewValue" Then'BIND:"CCCONST" #End If #Const ccConst = "NewValue" ]]></file> </compilation>) symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal("OldValue", symbolInfo.ConstantValue) ' New definition with different value type. compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const ccConst = "OldValue" #Const ccConst = 1 #If CCCONST = "NewValue" Then'BIND:"CCCONST" #End If ]]></file> </compilation>) symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Equal("ccConst", symbolInfo.Symbol.Name, StringComparer.Ordinal) Assert.True(symbolInfo.IsDefined, "must have a constant value") Assert.Equal(1, symbolInfo.ConstantValue) End Sub <Fact, WorkItem(531304, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531304")> Public Sub GetPreprocessingSymbolInfoForIdentifierNotInPreprocessingDirective() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ #Const A = "SomeValue" Class C Function Goo(A as Integer) As Integer Return A 'BIND:"A" End Function End Class ]]></file> </compilation>) Dim symbolInfo = CompilationUtils.GetPreprocessingSymbolInfo(compilation, "a.vb") Assert.Null(symbolInfo.Symbol) End Sub <WorkItem(531536, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531536")> <Fact()> Public Sub Bug18263() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ ReadOnly Property SharedFolderBrowseButton() As Button ReadOnly Property NE2000ComboBox() As ComboBox #Region "Enums for RadioButton groups" '''----------------------------------------------------------------------------- orientation270 = 3 Public Const Pixels As String = ";pixels;Win32DialogItemString;DeviceEmulatorUI.dll;1112;11215" 'pixels Public Const EnableBattery As String = ";&Battery:;Win32DialogItemString;DeviceEmulatorUI.dll;1114;1039" Public Const FlashMemoryFileTextBox As Integer = &H2B61 Public Const SkinFileTextBox As Integer = &H2BC3 Protected m_cachedFunckeyTextBox As TextBox ''' <history> searchP.ClassName = WindowClassNames.Dialog Catch ex As Exceptions.WindowNotFoundException ''' <value>An interface that groups all of the dialog's control properties together</value> Return Controls.SpecifyROMImageAddressCheckBox.Checked End Set ''' <summary> ''' [cbrochu] 5/11/2004 Created Return Controls.NE2000ComboBox.Text End Set ''' Routine to set/get the text in control FlashMemoryFile ''' <history> Public Overridable Property SelectedSkinOrVideoRadio() As SkinVideoSelection ''' <summary> ''' [cbrochu] 5/11/2004 Created Get Controls.EnableTooltipsCheckBox.Checked = Value 'BIND:"Controls" ]]></file> </compilation>) Dim semanticInfo = CompilationUtils.GetSemanticInfoSummary(Of IdentifierNameSyntax)(compilation, "a.vb") End Sub <WorkItem(531549, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531549")> <Fact()> Public Sub Bug531549() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Module Program Sub Main(args As String()) Dim y As Long? = x 'BIND1:"x" Dim x As Integer = 2 Dim z As Long? = x 'BIND2:"x" End Sub End Module ]]></file> </compilation>) Dim tree As SyntaxTree = (From t In compilation.SyntaxTrees Where t.FilePath = "a.vb").Single() Dim semanticModel = compilation.GetSemanticModel(tree) Dim node2 As IdentifierNameSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 2) Dim info2 = semanticModel.GetTypeInfo(node2) Assert.NotNull(info2) Assert.Equal("System.Int32", info2.Type.ToTestDisplayString()) Assert.Equal("System.Nullable(Of System.Int64)", info2.ConvertedType.ToTestDisplayString()) Dim conv2 = semanticModel.GetConversion(node2) Assert.Equal(ConversionKind.WideningNullable, conv2.Kind) Dim node1 As IdentifierNameSyntax = CompilationUtils.FindBindingText(Of IdentifierNameSyntax)(compilation, "a.vb", 1) Dim info1 = semanticModel.GetTypeInfo(node1) Assert.NotNull(info1) Assert.Equal("System.Int32", info1.Type.ToTestDisplayString()) Assert.Equal("System.Nullable(Of System.Int64)", info1.ConvertedType.ToTestDisplayString()) Dim conv1 = semanticModel.GetConversion(node1) Assert.Equal(ConversionKind.WideningNullable, conv1.Kind) End Sub <WorkItem(633340, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/633340")> <Fact> Public Sub MemberOfInaccessibleType() Dim text = <compilation> <file name="a.vb"> Public Class A Private Class Nested Public Class Another End Class End Class End Class Public Class B Inherits A Public a as Nested.Another End Class </file> </compilation> Dim compilation = CreateCompilationWithMscorlib40(text) Dim [global] = compilation.GlobalNamespace Dim classA = [global].GetMember(Of NamedTypeSymbol)("A") Dim classNested = classA.GetMember(Of NamedTypeSymbol)("Nested") Dim classAnother = classNested.GetMember(Of NamedTypeSymbol)("Another") Dim tree = compilation.SyntaxTrees.Single() Dim model = compilation.GetSemanticModel(tree) Dim asClauseSyntax = tree.GetRoot().DescendantNodes().OfType(Of SimpleAsClauseSyntax)().Single() Dim qualifiedSyntax = DirectCast(asClauseSyntax.Type, QualifiedNameSyntax) Dim leftSyntax = qualifiedSyntax.Left Dim rightSyntax = qualifiedSyntax.Right Dim leftInfo = model.GetSymbolInfo(leftSyntax) Assert.Equal(CandidateReason.Inaccessible, leftInfo.CandidateReason) Assert.Equal(classNested, leftInfo.CandidateSymbols.Single()) Dim rightInfo = model.GetSymbolInfo(rightSyntax) Assert.Equal(CandidateReason.Inaccessible, rightInfo.CandidateReason) Assert.Equal(classAnother, rightInfo.CandidateSymbols.Single()) compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_InaccessibleSymbol2, "Nested").WithArguments("A.Nested", "Private")) End Sub <WorkItem(633340, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/633340")> <Fact> Public Sub NotReferencableMemberOfInaccessibleType() Dim text = <compilation> <file name="a.vb"> Public Class A Private Class Nested Public Property P As Integer End Class End Class Public Class B Inherits A Function Test(nested as Nested) as Integer Return nested.get_P() End Function End Class </file> </compilation> Dim compilation = CreateCompilationWithMscorlib40(text) Dim [global] = compilation.GlobalNamespace Dim classA = [global].GetMember(Of NamedTypeSymbol)("A") Dim classNested = classA.GetMember(Of NamedTypeSymbol)("Nested") Dim propertyP = classNested.GetMember(Of PropertySymbol)("P") Dim tree = compilation.SyntaxTrees.Single() Dim model = compilation.GetSemanticModel(tree) Dim memberAccessSyntax = tree.GetRoot().DescendantNodes().OfType(Of InvocationExpressionSyntax)().Single() ' No different from a NotReferencable member of an accessible type. Dim info = model.GetSymbolInfo(memberAccessSyntax) Assert.Null(info.Symbol) Assert.Equal(CandidateReason.None, info.CandidateReason) Assert.Equal(0, info.CandidateSymbols.Length) compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_InaccessibleSymbol2, "Nested").WithArguments("A.Nested", "Private")) End Sub <WorkItem(633340, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/633340")> <Fact> Public Sub AccessibleMethodOfInaccessibleType() Dim text = <compilation> <file name="a.vb"> Public Class A Private Class Nested End Class End Class Public Class B Inherits A Sub Test() Nested.ReferenceEquals(Nothing, Nothing) ' Actually object.ReferenceEquals. End Sub End Class </file> </compilation> Dim compilation = CreateCompilationWithMscorlib40(text) Dim [global] = compilation.GlobalNamespace Dim classA = [global].GetMember(Of NamedTypeSymbol)("A") Dim classNested = classA.GetMember(Of NamedTypeSymbol)("Nested") Dim tree = compilation.SyntaxTrees.Single() Dim model = compilation.GetSemanticModel(tree) Dim callSyntax = tree.GetRoot().DescendantNodes().OfType(Of InvocationExpressionSyntax)().Single() Dim methodAccessSyntax = DirectCast(callSyntax.Expression, MemberAccessExpressionSyntax) Dim nestedTypeAccessSyntax = methodAccessSyntax.Expression Dim typeInfo = model.GetSymbolInfo(nestedTypeAccessSyntax) Assert.Equal(CandidateReason.Inaccessible, typeInfo.CandidateReason) Assert.Equal(classNested, typeInfo.CandidateSymbols.Single()) Dim methodInfo = model.GetSymbolInfo(callSyntax) Assert.Equal(compilation.GetSpecialTypeMember(SpecialMember.System_Object__ReferenceEquals), methodInfo.Symbol) compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_InaccessibleSymbol2, "Nested").WithArguments("A.Nested", "Private")) End Sub <WorkItem(761212, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/761212")> <Fact> Public Sub AccessiblePropertyOfInaccessibleType() Dim text = <compilation> <file name="a.vb"> Class A Friend Shared ReadOnly Property P(o As Object) As Object Get Return Nothing End Get End Property Private Class B Inherits A End Class End Class Class C Private F As Object = A.B.P(Nothing) End Class </file> </compilation> Dim compilation = CreateCompilationWithMscorlib40(text) Dim [global] = compilation.GlobalNamespace Dim classA = [global].GetMember(Of NamedTypeSymbol)("A") Dim classB = classA.GetMember(Of NamedTypeSymbol)("B") Dim tree = compilation.SyntaxTrees.Single() Dim model = compilation.GetSemanticModel(tree) Dim callSyntax = tree.GetRoot().DescendantNodes().OfType(Of InvocationExpressionSyntax)().Single() Dim methodAccessSyntax = DirectCast(callSyntax.Expression, MemberAccessExpressionSyntax) Dim nestedTypeAccessSyntax = methodAccessSyntax.Expression Dim typeInfo = model.GetSymbolInfo(nestedTypeAccessSyntax) Assert.Equal(CandidateReason.Inaccessible, typeInfo.CandidateReason) Assert.Equal(classB, typeInfo.CandidateSymbols.Single()) Dim propertyInfo = model.GetSymbolInfo(callSyntax) Assert.Equal(classA.GetMember(Of PropertySymbol)("P"), propertyInfo.Symbol) compilation.VerifyDiagnostics( Diagnostic(ERRID.ERR_InaccessibleSymbol2, "A.B").WithArguments("A.B", "Private")) End Sub <Fact, WorkItem(652039, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/652039")> Public Sub Bug652039() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation name="BindingEnumMembers"> <file name="a.vb"><![CDATA[ {Interface End Namespace End Class Interface IA End IA End Class Class B d Class Class A Implementsessage &= " -4- " End Sub En Sub Method4(Of T)() M Return "xxx" End Function Message &= " -3- " ub Function Method3() As String Message &= " -2- " End S As TMethod) Sub Method2() egate Sub ArgsTMethod(Of TMethod)(ByVal a1rgsTClass(ByVal a1 As TClass) Dels MyObj(Of TClass) Delegate Sub AArgsInt(ByVal a1 As Integer) Clas ArgsIA(ByVal a1 As IA) Delegate Sub a1 As A, ByVal a2 As B) Delegate Subal a1 As A) Delegate Sub ArgsAB(ByValate Sub Args() Delegate Sub ArgsA(ByV End Sub End Module Delegd1() Message &= " -1- " Try End Sub Sub Metho apEndTest() Endy ' Exit test routine apErrorTrap() Finall ' Handle unexpected errors 3- -4- ") Catch apCompare(Message, " -1- -2- -ng) d7_4(New B()) ethod(Of B) = AddressOf mo.Method4(Of Stri Dim d7_4 As MyObj(Of A).ArgsTMthod3 d7_3(New B()) (Of A).ArgsTMethod(Of B) = AddressOf mo.Meew B()) Dim d7_3 As MyObjdressOf mo.Method2 d7_2(Nd7_2 As MyObj(Of A).ArgsTMethod(Of B) = Ad d7_1(New B()) Dim ethod(Of B) = AddressOf Method1 Dim d7_1 As MyObj(Of A).ArgsTM> ()") Message = "" apInitScenario("7. generic T_Method B ---------------------------- }]]></file> </compilation>, {Net40.References.SystemCore, Net40.References.System, Net40.References.SystemData}, TestOptions.ReleaseDll.WithOptionExplicit(False).WithOptionInfer(True)) compilation.GetDiagnostics() Dim tree = compilation.SyntaxTrees(0) Dim node = FindNodeFromText(tree, "Nd7_2") Dim symbol = compilation.GetSemanticModel(tree).GetTypeInfo(DirectCast(node, ExpressionSyntax)) End Sub <Fact, WorkItem(665920, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/665920")> Public Sub ObjectCreation1() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System.Collections Namespace Test Class C Implements IEnumerable Property P1 As Integer Sub Add(x As Integer) End Sub Public Shared Sub Main() Dim x1 = New C() 'BIND1:"New C()" Dim x2 = New C() With {.P1 = 1} 'BIND2:"New C() With {.P1 = 1}" Dim x3 = New C() From {1, 2} 'BIND3:"New C() From {1, 2}" End Sub Public Shared Sub Main2() Dim x1 = New Test.C() 'BIND4:"New Test.C()" Dim x2 = New Test.C() With {.P1 = 1} 'BIND5:"New Test.C() With {.P1 = 1}" Dim x3 = New Test.C() From {1, 2} 'BIND6:"New Test.C() From {1, 2}" End Sub Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return Nothing End Function End Class End Namespace ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected></expected>) Dim model = GetSemanticModel(compilation, "a.vb") For i As Integer = 1 To 6 Dim creation As ObjectCreationExpressionSyntax = CompilationUtils.FindBindingText(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", i) Dim symbolInfo As SymbolInfo = model.GetSymbolInfo(creation.Type) Assert.Equal("Test.C", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) Dim memberGroup = model.GetMemberGroup(creation.Type) Assert.Equal(0, memberGroup.Length) Dim typeInfo As TypeInfo = model.GetTypeInfo(creation.Type) Assert.Equal("Test.C", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.C", typeInfo.ConvertedType.ToTestDisplayString()) Dim conv = model.GetConversion(creation.Type) Assert.True(conv.IsIdentity) symbolInfo = model.GetSymbolInfo(creation) Assert.Equal("Sub Test.C..ctor()", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) memberGroup = model.GetMemberGroup(creation) Assert.Equal(1, memberGroup.Length) Assert.Equal("Sub Test.C..ctor()", memberGroup(0).ToTestDisplayString()) typeInfo = model.GetTypeInfo(creation) Assert.Equal("Test.C", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.C", typeInfo.ConvertedType.ToTestDisplayString()) conv = model.GetConversion(creation) Assert.True(conv.IsIdentity) Next End Sub <Fact, WorkItem(665920, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/665920")> Public Sub ObjectCreation2() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System.Collections Namespace Test Public Class CoClassI Implements IEnumerable Property P1 As Integer Sub Add(x As Integer) End Sub Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return Nothing End Function End Class <System.Runtime.InteropServices.CoClass(GetType(CoClassI))> Public Interface I Inherits IEnumerable Property P1 As Integer Sub Add(x As Integer) End Interface Class C Public Shared Sub Main() Dim x1 = New I() 'BIND1:"New I()" Dim x2 = New I() With {.P1 = 1} 'BIND2:"New I() With {.P1 = 1}" Dim x3 = New I() From {1, 2} 'BIND3:"New I() From {1, 2}" End Sub Public Shared Sub Main2() Dim x1 = New Test.I() 'BIND4:"New Test.I()" Dim x2 = New Test.I() With {.P1 = 1} 'BIND5:"New Test.I() With {.P1 = 1}" Dim x3 = New Test.I() From {1, 2} 'BIND6:"New Test.I() From {1, 2}" End Sub End Class End Namespace ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected></expected>) Dim model = GetSemanticModel(compilation, "a.vb") For i As Integer = 1 To 6 Dim creation As ObjectCreationExpressionSyntax = CompilationUtils.FindBindingText(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", i) Dim symbolInfo As SymbolInfo = model.GetSymbolInfo(creation.Type) Assert.Equal("Test.I", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) Dim memberGroup = model.GetMemberGroup(creation.Type) Assert.Equal(0, memberGroup.Length) Dim typeInfo As TypeInfo = model.GetTypeInfo(creation.Type) Assert.Equal("Test.I", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.I", typeInfo.ConvertedType.ToTestDisplayString()) Dim conv = model.GetConversion(creation.Type) Assert.True(conv.IsIdentity) symbolInfo = model.GetSymbolInfo(creation) Assert.Equal("Sub Test.CoClassI..ctor()", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) memberGroup = model.GetMemberGroup(creation) Assert.Equal(1, memberGroup.Length) Assert.Equal("Sub Test.CoClassI..ctor()", memberGroup(0).ToTestDisplayString()) typeInfo = model.GetTypeInfo(creation) Assert.Equal("Test.I", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.I", typeInfo.ConvertedType.ToTestDisplayString()) Assert.True(conv.IsIdentity) Next End Sub <Fact, WorkItem(665920, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/665920")> Public Sub ObjectCreation3() Dim pia = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ imports System Imports System.Collections imports System.Runtime.InteropServices imports System.Runtime.CompilerServices <assembly: ImportedFromTypeLib("GeneralPIA.dll")> <assembly: Guid("f9c2d51d-4f44-45f0-9eda-c9d599b58257")> Namespace Test <Guid("f9c2d51d-4f44-45f0-9eda-c9d599b5827A")> Public Class CoClassI Implements IEnumerable Property P1 As Integer Sub Add(x As Integer) End Sub Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator Return Nothing End Function End Class <ComImport()> <Guid("f9c2d51d-4f44-45f0-9eda-c9d599b58279")> <System.Runtime.InteropServices.CoClass(GetType(CoClassI))> Public Interface I Inherits IEnumerable Property P1 As Integer Sub Add(x As Integer) End Interface End Namespace ]]></file> </compilation>, options:=TestOptions.ReleaseDll) AssertTheseDiagnostics(pia, <expected></expected>) Dim compilation = CreateCompilationWithMscorlib40AndReferences( <compilation> <file name="a.vb"><![CDATA[ Namespace Test Class C Public Shared Sub Main() Dim x1 = New I() 'BIND1:"New I()" Dim x2 = New I() With {.P1 = 1} 'BIND2:"New I() With {.P1 = 1}" Dim x3 = New I() From {1, 2} 'BIND3:"New I() From {1, 2}" End Sub Public Shared Sub Main2() Dim x1 = New Test.I() 'BIND4:"New Test.I()" Dim x2 = New Test.I() With {.P1 = 1} 'BIND5:"New Test.I() With {.P1 = 1}" Dim x3 = New Test.I() From {1, 2} 'BIND6:"New Test.I() From {1, 2}" End Sub End Class End Namespace ]]></file> </compilation>, {New VisualBasicCompilationReference(pia, embedInteropTypes:=True)}) AssertTheseDiagnostics(compilation, <expected></expected>) Dim model = GetSemanticModel(compilation, "a.vb") For i As Integer = 1 To 6 Dim creation As ObjectCreationExpressionSyntax = CompilationUtils.FindBindingText(Of ObjectCreationExpressionSyntax)(compilation, "a.vb", i) Dim symbolInfo As SymbolInfo = model.GetSymbolInfo(creation.Type) Assert.Equal("Test.I", symbolInfo.Symbol.ToTestDisplayString()) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) Dim memberGroup = model.GetMemberGroup(creation.Type) Assert.Equal(0, memberGroup.Length) Dim typeInfo As TypeInfo = model.GetTypeInfo(creation.Type) Assert.Equal("Test.I", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.I", typeInfo.ConvertedType.ToTestDisplayString()) Dim conv = model.GetConversion(creation.Type) Assert.True(conv.IsIdentity) symbolInfo = model.GetSymbolInfo(creation) Assert.Null(symbolInfo.Symbol) Assert.Equal(0, symbolInfo.CandidateSymbols.Length) Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason) memberGroup = model.GetMemberGroup(creation) Assert.Equal(0, memberGroup.Length) typeInfo = model.GetTypeInfo(creation) Assert.Equal("Test.I", typeInfo.Type.ToTestDisplayString()) Assert.Equal("Test.I", typeInfo.ConvertedType.ToTestDisplayString()) conv = model.GetConversion(creation) Assert.True(conv.IsIdentity) Next End Sub <WorkItem(530931, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/530931")> <Fact()> Public Sub SemanticModelLateBoundInvocation() Dim compilation = CreateCompilationWithMscorlib40AndVBRuntimeAndReferences( <compilation> <file name="a.vb"><![CDATA[ Option Strict Off Option Infer On Imports System Module M Sub Main() Try Dim x = 1 Goo(CObj(x)).GetHashCode() 'BIND:"Goo(CObj(x))" Catch Console.WriteLine("Catch") End Try End Sub Sub Goo(Of T, S)(x As Func(Of T)) End Sub End Module ]]></file> </compilation>, {SystemCoreRef}) CompileAndVerify(compilation) Dim semanticSummary = CompilationUtils.GetSemanticInfoSummary(Of InvocationExpressionSyntax)(compilation, "a.vb") Assert.Equal("System.Object", semanticSummary.Type.ToTestDisplayString()) Assert.Equal(CandidateReason.LateBound, semanticSummary.CandidateReason) Assert.NotNull(semanticSummary.Symbol) Assert.Equal(0, semanticSummary.CandidateSymbols.Length) Assert.Equal("Sub M.Goo(Of T, S)(x As System.Func(Of T))", semanticSummary.Symbol.ToTestDisplayString()) Assert.Equal(SymbolKind.Method, semanticSummary.Symbol.Kind) Assert.False(semanticSummary.ConstantValue.HasValue) End Sub <Fact, WorkItem(709331, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/709331")> Public Sub ClassifyConversionFromLambdaToExplicitDirectCastType() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Module Program Public Sub Main() Call DirectCast((Sub(y) Call New X().Goo(y)), Action(Of Object))("HI")'BIND:"Sub(y) Call New X().Goo(y)" End Sub End Module Public Class X Public Sub Goo(x As Object) Console.WriteLine(1) End Sub Public Sub Goo(x As String) Console.WriteLine(2) End Sub End Class ]]></file> </compilation>) Dim lambdaExpr = CompilationUtils.FindBindingText(Of LambdaExpressionSyntax)(compilation, "a.vb") Dim parenthesizedExpr = DirectCast(lambdaExpr.Parent, ParenthesizedExpressionSyntax) Dim directCastExpr = DirectCast(parenthesizedExpr.Parent, DirectCastExpressionSyntax) Dim model = GetSemanticModel(compilation, "a.vb") Dim directCastType = DirectCast(model.GetTypeInfo(directCastExpr.Type).Type, TypeSymbol) Assert.Equal("System.Action(Of System.Object)", directCastType.ToTestDisplayString()) Dim lambdaExprToDirectCastType As Conversion = model.ClassifyConversion(lambdaExpr, directCastType) Assert.Equal(ConversionKind.Widening Or ConversionKind.Lambda, lambdaExprToDirectCastType.Kind) End Sub <Fact, WorkItem(709331, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/709331")> Public Sub ClassifyConversionFromLambdaToExplicitTryCastType() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Module Program Public Sub Main() Call TryCast((Sub(y) Call New X().Goo(y)), Action(Of Object))("HI")'BIND:"Sub(y) Call New X().Goo(y)" End Sub End Module Public Class X Public Sub Goo(x As Object) Console.WriteLine(1) End Sub Public Sub Goo(x As String) Console.WriteLine(2) End Sub End Class ]]></file> </compilation>) Dim lambdaExpr = CompilationUtils.FindBindingText(Of LambdaExpressionSyntax)(compilation, "a.vb") Dim parenthesizedExpr = DirectCast(lambdaExpr.Parent, ParenthesizedExpressionSyntax) Dim tryCastExpr = DirectCast(parenthesizedExpr.Parent, TryCastExpressionSyntax) Dim model = GetSemanticModel(compilation, "a.vb") Dim tryCastType = DirectCast(model.GetTypeInfo(tryCastExpr.Type).Type, TypeSymbol) Assert.Equal("System.Action(Of System.Object)", tryCastType.ToTestDisplayString()) Dim lambdaExprToDirectCastType As Conversion = model.ClassifyConversion(lambdaExpr, tryCastType) Assert.Equal(ConversionKind.Widening Or ConversionKind.Lambda, lambdaExprToDirectCastType.Kind) End Sub <WorkItem(849371, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849371")> <WorkItem(854543, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854543")> <WorkItem(854548, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854548")> <Fact> ' If this starts failing when 854543 is fixed, the new skip reason is 854548. Public Sub SemanticModelLambdaErrorRecovery() Dim source = <compilation> <file name="a.vb"><![CDATA[ Imports System Class Program Shared Sub Main() M(Function() 1) ' Neither overload wins. End Sub Shared Sub M(p As Func(Of String)) End Sub Shared Sub M(p As Func(Of Char)) End Sub End Class ]]> </file> </compilation> If True Then Dim comp = CreateCompilationWithMscorlib40(source) Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim lambdaSyntax = tree.GetRoot().DescendantNodes().OfType(Of LambdaExpressionSyntax)().Single() Dim otherFuncType = comp.GetWellKnownType(WellKnownType.System_Func_T).Construct(comp.GetSpecialType(SpecialType.System_Int32)) Dim typeInfo = model.GetTypeInfo(lambdaSyntax) Assert.Null(typeInfo.Type) Assert.NotEqual(otherFuncType, typeInfo.ConvertedType) End If If True Then Dim comp = CreateCompilationWithMscorlib40(source) Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim lambdaSyntax = tree.GetRoot().DescendantNodes().OfType(Of LambdaExpressionSyntax)().Single() Dim otherFuncType = comp.GetWellKnownType(WellKnownType.System_Func_T).Construct(comp.GetSpecialType(SpecialType.System_Int32)) Dim conversion = model.ClassifyConversion(lambdaSyntax, otherFuncType) Dim typeInfo = model.GetTypeInfo(lambdaSyntax) Assert.Null(typeInfo.Type) Assert.NotEqual(otherFuncType, typeInfo.ConvertedType) ' Not affected by call to ClassifyConversion. End If End Sub <WorkItem(854543, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854543")> <Fact> Public Sub ClassifyConversionOnNothingLiteral() Dim source = <compilation> <file name="a.vb"><![CDATA[ Class Program Shared Sub Main() M(Nothing) ' Ambiguous. End Sub Shared Sub M(a As A) End Sub Shared Sub M(b As B) End Sub End Class Class A End Class Class B End Class Class C End Class ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40(source) comp.AssertTheseDiagnostics(<errors><![CDATA[ BC30521: Overload resolution failed because no accessible 'M' is most specific for these arguments: 'Public Shared Sub M(a As A)': Not most specific. 'Public Shared Sub M(b As B)': Not most specific. M(Nothing) ' Ambiguous. ~ ]]></errors>) Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim nullSyntax = tree.GetRoot().DescendantNodes().OfType(Of LiteralExpressionSyntax)().Single() Dim typeC = comp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C") Dim conversion = model.ClassifyConversion(nullSyntax, typeC) Assert.Equal(ConversionKind.WideningNothingLiteral, conversion.Kind) End Sub <WorkItem(854543, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854543")> <Fact> Public Sub ClassifyConversionOnLambda() Dim source = <compilation> <file name="a.vb"><![CDATA[ Imports System Class Program Shared Sub Main() M(Function() Nothing) End Sub Shared Sub M(f As Func(Of A)) End Sub End Class Class A End Class Class B End Class ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40(source) comp.AssertNoDiagnostics() Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim lambdaSyntax = tree.GetRoot().DescendantNodes().OfType(Of LambdaExpressionSyntax)().Single() Dim typeB = comp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("B") Dim typeFuncB = comp.GetWellKnownType(WellKnownType.System_Func_T).Construct(typeB) Dim conversion = model.ClassifyConversion(lambdaSyntax, typeFuncB) Assert.Equal(ConversionKind.Widening Or ConversionKind.Lambda, conversion.Kind) End Sub <WorkItem(854543, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854543")> <Fact> Public Sub ClassifyConversionOnAmbiguousLambda() Dim source = <compilation> <file name="a.vb"><![CDATA[ Imports System Class Program Shared Sub Main() M(Function() Nothing) ' Ambiguous. End Sub Shared Sub M(a As Func(Of A)) End Sub Shared Sub M(b As Func(Of B)) End Sub End Class Class A End Class Class B End Class Class C End Class ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40(source) comp.AssertTheseDiagnostics(<errors><![CDATA[ BC30521: Overload resolution failed because no accessible 'M' is most specific for these arguments: 'Public Shared Sub M(a As Func(Of A))': Not most specific. 'Public Shared Sub M(b As Func(Of B))': Not most specific. M(Function() Nothing) ' Ambiguous. ~ ]]></errors>) Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim lambdaSyntax = tree.GetRoot().DescendantNodes().OfType(Of LambdaExpressionSyntax)().Single() Dim typeC = comp.GlobalNamespace.GetMember(Of NamedTypeSymbol)("C") Dim typeFuncC = comp.GetWellKnownType(WellKnownType.System_Func_T).Construct(typeC) Dim conversion = model.ClassifyConversion(lambdaSyntax, typeFuncC) Assert.Equal(ConversionKind.Widening Or ConversionKind.Lambda, conversion.Kind) End Sub <WorkItem(854543, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/854543")> <Fact> Public Sub ClassifyConversionOnAmbiguousMethodGroup() Dim source = <compilation> <file name="a.vb"><![CDATA[ Imports System Class Base(Of T) Public Function N(t As T) As A Return Nothing End Function Public Function N(t As Integer) As B Return Nothing End Function End Class Class Derived : Inherits Base(Of Integer) Sub Test() M(N) ' Ambiguous. End Sub Shared Sub M(f As Func(Of Integer, A)) End Sub Shared Sub M(f As Func(Of Integer, B)) End Sub End Class Class A End Class Class B End Class Class C End Class ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40(source) comp.AssertTheseDiagnostics(<errors><![CDATA[ BC30516: Overload resolution failed because no accessible 'N' accepts this number of arguments. M(N) ' Ambiguous. ~ ]]></errors>) Dim tree = comp.SyntaxTrees.Single() Dim model = comp.GetSemanticModel(tree) Dim methodGroupSyntax = tree.GetRoot().DescendantNodes().OfType(Of SimpleArgumentSyntax)().Single().Expression Dim [global] = comp.GlobalNamespace Dim typeA = [global].GetMember(Of NamedTypeSymbol)("A") Dim typeB = [global].GetMember(Of NamedTypeSymbol)("B") Dim typeC = [global].GetMember(Of NamedTypeSymbol)("C") Dim typeInt = comp.GetSpecialType(SpecialType.System_Int32) Dim typeFunc = comp.GetWellKnownType(WellKnownType.System_Func_T2) Dim typeFuncA = typeFunc.Construct(typeInt, typeA) Dim typeFuncB = typeFunc.Construct(typeInt, typeB) Dim typeFuncC = typeFunc.Construct(typeInt, typeC) Dim conversionA = model.ClassifyConversion(methodGroupSyntax, typeFuncA) Assert.Equal(ConversionKind.DelegateRelaxationLevelNone, conversionA.Kind) Dim conversionB = model.ClassifyConversion(methodGroupSyntax, typeFuncB) Assert.Equal(ConversionKind.DelegateRelaxationLevelNone, conversionB.Kind) Dim conversionC = model.ClassifyConversion(methodGroupSyntax, typeFuncC) Assert.Equal(ConversionKind.DelegateRelaxationLevelNone, conversionC.Kind) End Sub <Fact, WorkItem(1068547, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068547")> Public Sub Bug1068547_01() Dim source = <compilation> <file name="a.vb"><![CDATA[ Module Program <System.Diagnostics.DebuggerDisplay(Me)> Sub Main(args As String()) End Sub End Module ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(source) Dim tree = comp.SyntaxTrees(0) Dim model = comp.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes().Where(Function(n) n.Kind() = SyntaxKind.MeExpression).Cast(Of MeExpressionSyntax)().Single() Dim symbolInfo = model.GetSymbolInfo(node) Assert.Null(symbolInfo.Symbol) Assert.Equal(CandidateReason.StaticInstanceMismatch, symbolInfo.CandidateReason) End Sub <Fact, WorkItem(1068547, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1068547")> Public Sub Bug1068547_02() Dim source = <compilation> <file name="a.vb"><![CDATA[ <System.Diagnostics.DebuggerDisplay(Me)> ]]> </file> </compilation> Dim comp = CreateCompilationWithMscorlib40AndVBRuntime(source) Dim tree = comp.SyntaxTrees(0) Dim model = comp.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes().Where(Function(n) n.Kind() = SyntaxKind.MeExpression).Cast(Of MeExpressionSyntax)().Single() Dim symbolInfo = model.GetSymbolInfo(node) Assert.Null(symbolInfo.Symbol) Assert.Equal(CandidateReason.NotReferencable, symbolInfo.CandidateReason) End Sub <WorkItem(1108036, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1108036")> <Fact()> Public Sub Bug1108036() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Class Color Public Shared Sub Cat() End Sub End Class Class Program Shared Sub Main() Color.Cat() End Sub ReadOnly Property Color(Optional x As Integer = 0) As Integer Get Return 0 End Get End Property ReadOnly Property Color(Optional x As String = "") As Color Get Return Nothing End Get End Property End Class </file> </compilation>) AssertTheseDiagnostics(compilation, <expected> BC30521: Overload resolution failed because no accessible 'Color' is most specific for these arguments: 'Public ReadOnly Property Color([x As Integer = 0]) As Integer': Not most specific. 'Public ReadOnly Property Color([x As String = ""]) As Color': Not most specific. Color.Cat() ~~~~~ </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes.OfType(Of MemberAccessExpressionSyntax)().Single().Expression Assert.Equal(node.ToString(), "Color") Dim symbolInfo = model.GetSymbolInfo(node) Assert.Null(symbolInfo.Symbol) Assert.Equal(CandidateReason.OverloadResolutionFailure, symbolInfo.CandidateReason) Dim sortedCandidates = symbolInfo.CandidateSymbols.AsEnumerable().OrderBy(Function(s) s.ToTestDisplayString()).ToArray() Assert.Equal("ReadOnly Property Program.Color([x As System.Int32 = 0]) As System.Int32", sortedCandidates(0).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(0).Kind) Assert.Equal("ReadOnly Property Program.Color([x As System.String = """"]) As Color", sortedCandidates(1).ToTestDisplayString()) Assert.Equal(SymbolKind.Property, sortedCandidates(1).Kind) End Sub <WorkItem(8401, "https://github.com/dotnet/roslyn/issues/8401")> <Fact()> Public Sub EventAccessorsWithOptionalParameters() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"> Class Program Shared Sub Main() End Sub Custom Event E1 As System.Action(Of Object) AddHandler(Optional value As System.Action(Of Object) = Nothing) End AddHandler RemoveHandler(Optional value As System.Action(Of Object) = Nothing) End RemoveHandler RaiseEvent(Optional value As Object = Nothing) End RaiseEvent End Event End Class </file> </compilation>) AssertTheseDiagnostics(compilation, <expected> BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. AddHandler(Optional value As System.Action(Of Object) = Nothing) ~~~~~~~~ BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. RemoveHandler(Optional value As System.Action(Of Object) = Nothing) ~~~~~~~~ BC31138: 'AddHandler', 'RemoveHandler' and 'RaiseEvent' method parameters cannot be declared 'Optional'. RaiseEvent(Optional value As Object = Nothing) ~~~~~~~~ </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim nodes = tree.GetRoot().DescendantNodes.OfType(Of LiteralExpressionSyntax)().ToArray() Assert.Equal(3, nodes.Length) For Each literal In nodes Assert.Equal("Nothing", literal.ToString()) Assert.Null(model.GetTypeInfo(literal).Type) Next End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_ElseIf() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Shared Sub F(c As Object) ElseIf From o In c Where True Then F(From o in 2 Where False) End If End Sub End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors> BC36005: 'ElseIf' must be preceded by a matching 'If' or 'ElseIf'. ElseIf From o In c Where True Then ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. ElseIf From o In c Where True Then ~ BC36593: Expression of type 'Integer' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. F(From o in 2 Where False) ~ BC30087: 'End If' must be preceded by a matching 'If'. End If ~~~~~~ </errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() ' ElseIf condition. Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) ' Block statement expression. expr = tokens.Single(Function(t) t.Kind = SyntaxKind.FalseKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_Case() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Imports System Class C Shared Sub F(c As Object) Case 1 To From o In c Where True, Is < From o In 2 Where False, P Case Else End Select End Sub Shared Property P As Object <Obsolete()> Get Return Nothing End Get Set End Set End Property End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors><![CDATA[ BC30072: 'Case' can only appear inside a 'Select Case' statement. Case 1 To From o In c Where True, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Case 1 To From o In c Where True, ~ BC36593: Expression of type 'Integer' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Is < From o In 2 Where False, ~ BC40020: 'Get' accessor of 'Public Shared Property P As Object' is obsolete. P ~ BC30071: 'Case Else' can only appear inside a 'Select Case' statement. Case Else ~~~~~~~~~ BC30088: 'End Select' must be preceded by a matching 'Select Case'. End Select ~~~~~~~~~~ ]]></errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() ' First Case clause. Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) ' Second Case clause. expr = tokens.Single(Function(t) t.Kind = SyntaxKind.FalseKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) ' Third Case clause. expr = tokens.First(Function(t) t.Kind = SyntaxKind.IdentifierToken AndAlso t.Text = "P").Parent Assert.Equal("Property C.P As System.Object", model.GetSymbolInfo(expr).Symbol.ToTestDisplayString()) Assert.Equal(SpecialType.System_Object, model.GetTypeInfo(expr).Type.SpecialType) End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_Select() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Shared Sub F(c As Object) Dim s = Sub() Select Case From o In c Where True : End Select End Sub End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors> BC36918: Single-line statement lambdas must include exactly one statement. Dim s = Sub() Select Case From o In c Where True : End Select ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Dim s = Sub() Select Case From o In c Where True : End Select ~ </errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_LoopUntil() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Shared Sub F(c As Object) Loop Until From o In c Where True End Sub End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors> BC30091: 'Loop' must be preceded by a matching 'Do'. Loop Until From o In c Where True ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Loop Until From o In c Where True ~ </errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_LoopWhile() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Shared Sub F(c As Object) Loop While From o In c Where True End Sub End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors> BC30091: 'Loop' must be preceded by a matching 'Do'. Loop While From o In c Where True ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Loop While From o In c Where True ~ </errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) End Sub <WorkItem(233671, "https://devdiv.visualstudio.com/defaultcollection/DevDiv/_workitems#_a=edit&id=233671")> <Fact()> Public Sub QueryClauseInBadStatement_Catch() Dim compilation = CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"><![CDATA[ Class C Shared Sub F(c As Object) Catch e As System.Exception When From o In c Where True F(From o in 2 Where False) End Try End Sub End Class ]]></file> </compilation>) compilation.AssertTheseDiagnostics( <errors> BC30380: 'Catch' cannot appear outside a 'Try' statement. Catch e As System.Exception When From o In c Where True ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ BC36593: Expression of type 'Object' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. Catch e As System.Exception When From o In c Where True ~ BC36593: Expression of type 'Integer' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider. F(From o in 2 Where False) ~ BC30383: 'End Try' must be preceded by a matching 'Try'. End Try ~~~~~~~ </errors>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim tokens = tree.GetCompilationUnitRoot().DescendantTokens() Dim expr = tokens.Single(Function(t) t.Kind = SyntaxKind.TrueKeyword).Parent Assert.Null(model.GetSymbolInfo(expr).Symbol) Assert.Equal(SpecialType.System_Boolean, model.GetTypeInfo(expr).Type.SpecialType) End Sub <Fact()> Public Sub GetSpecialType_ThrowsOnLessThanZero() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Class C1 End Class </file> </compilation>) Dim type = CType(SpecialType.None - 1, SpecialType) Dim exceptionThrown = False Try compilation.GetSpecialType(type) Catch ex As ArgumentOutOfRangeException exceptionThrown = True Assert.StartsWith(expectedStartString:=$"Unexpected SpecialType: '{SpecialType.None - 1}'.", actualString:=ex.Message) End Try Assert.True(exceptionThrown, $"{NameOf(GetSpecialType)} did not throw when it should have.") End Sub <Fact()> Public Sub GetSpecialType_ThrowsOnGreaterThanCount() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40( <compilation> <file name="a.vb"> Class C1 End Class </file> </compilation>) Dim type = CType(SpecialType.Count + 1, SpecialType) Dim exceptionThrown = False Try DirectCast(compilation, Compilation).GetSpecialType(type) Catch ex As ArgumentOutOfRangeException exceptionThrown = True Assert.StartsWith(expectedStartString:=$"Unexpected SpecialType: '{SpecialType.Count + 1}'.", actualString:=ex.Message) End Try Assert.True(exceptionThrown, $"{NameOf(GetSpecialType)} did not throw when it should have.") End Sub <WorkItem(548762, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=548762")> <Fact(), CompilerTrait(CompilerFeature.IOperation)> Public Sub DefaultPropertyTransformation_01() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ <System.Reflection.DefaultMember("Item")> Class C1 Default Public Property Item(x As String) As String Get Return "" End Get Set(value As String) End Set End Property End Class Class C2 Public Property ViewData As C1 End Class Class C3 Inherits C2 Sub Test() ViewData("Title") = "About" End Sub End Class ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected> </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes.OfType(Of IdentifierNameSyntax)().ElementAt(5) Assert.Equal("ViewData", node.ToString()) Assert.Equal("Property C2.ViewData As C1", model.GetSymbolInfo(node).Symbol.ToTestDisplayString()) compilation.VerifyOperationTree(node.Parent, expectedOperationTree:= <![CDATA[ IPropertyReferenceOperation: Property C1.Item(x As System.String) As System.String (OperationKind.PropertyReference, Type: System.String) (Syntax: 'ViewData("Title")') Instance Receiver: IPropertyReferenceOperation: Property C2.ViewData As C1 (OperationKind.PropertyReference, Type: C1) (Syntax: 'ViewData') Instance Receiver: IInstanceReferenceOperation (ReferenceKind: ContainingTypeInstance) (OperationKind.InstanceReference, Type: C3, IsImplicit) (Syntax: 'ViewData') Arguments(1): IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: null) (Syntax: '"Title"') ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: "Title") (Syntax: '"Title"') InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) ]]>.Value) End Sub <WorkItem(548762, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=548762")> <Fact(), CompilerTrait(CompilerFeature.IOperation)> Public Sub DefaultPropertyTransformation_02() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ <System.Reflection.DefaultMember("Item")> Class C1 Default Public Property Item(x As String) As String Get Return "" End Get Set(value As String) End Set End Property End Class Class C2 Public Shared Property ViewData As C1 End Class Class C3 Inherits C2 Sub Test() ViewData("Title") = "About" End Sub End Class ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected> </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes.OfType(Of IdentifierNameSyntax)().ElementAt(5) Assert.Equal("ViewData", node.ToString()) Assert.Equal("Property C2.ViewData As C1", model.GetSymbolInfo(node).Symbol.ToTestDisplayString()) compilation.VerifyOperationTree(node.Parent, expectedOperationTree:= <![CDATA[ IPropertyReferenceOperation: Property C1.Item(x As System.String) As System.String (OperationKind.PropertyReference, Type: System.String) (Syntax: 'ViewData("Title")') Instance Receiver: IPropertyReferenceOperation: Property C2.ViewData As C1 (Static) (OperationKind.PropertyReference, Type: C1) (Syntax: 'ViewData') Instance Receiver: null Arguments(1): IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: null) (Syntax: '"Title"') ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: "Title") (Syntax: '"Title"') InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) ]]>.Value) End Sub <WorkItem(548762, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=548762")> <Fact(), CompilerTrait(CompilerFeature.IOperation)> Public Sub DefaultPropertyTransformation_03() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ <System.Reflection.DefaultMember("Item")> Class C1 Default Public Property Item(x As String) As String Get Return "" End Get Set(value As String) End Set End Property End Class Class C2 Public Function ViewData() As C1 Return Nothing End Function End Class Class C3 Inherits C2 Sub Test() ViewData("Title") = "About" End Sub End Class ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected> </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes.OfType(Of IdentifierNameSyntax)().ElementAt(5) Assert.Equal("ViewData", node.ToString()) Assert.Equal("Function C2.ViewData() As C1", model.GetSymbolInfo(node).Symbol.ToTestDisplayString()) compilation.VerifyOperationTree(node.Parent, expectedOperationTree:= <![CDATA[ IPropertyReferenceOperation: Property C1.Item(x As System.String) As System.String (OperationKind.PropertyReference, Type: System.String) (Syntax: 'ViewData("Title")') Instance Receiver: IInvocationOperation ( Function C2.ViewData() As C1) (OperationKind.Invocation, Type: C1) (Syntax: 'ViewData') Instance Receiver: IInstanceReferenceOperation (ReferenceKind: ContainingTypeInstance) (OperationKind.InstanceReference, Type: C3, IsImplicit) (Syntax: 'ViewData') Arguments(0) Arguments(1): IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: null) (Syntax: '"Title"') ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: "Title") (Syntax: '"Title"') InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) ]]>.Value) End Sub <WorkItem(548762, "https://devdiv.visualstudio.com/DevDiv/_workitems?id=548762")> <Fact(), CompilerTrait(CompilerFeature.IOperation)> Public Sub DefaultPropertyTransformation_04() Dim compilation = CompilationUtils.CreateCompilationWithMscorlib40AndVBRuntime( <compilation> <file name="a.vb"><![CDATA[ <System.Reflection.DefaultMember("Item")> Class C1 Default Public Property Item(x As String) As String Get Return "" End Get Set(value As String) End Set End Property End Class Class C2 Public Shared Function ViewData() As C1 Return Nothing End Function End Class Class C3 Inherits C2 Sub Test() ViewData("Title") = "About" End Sub End Class ]]></file> </compilation>) AssertTheseDiagnostics(compilation, <expected> </expected>) Dim tree = compilation.SyntaxTrees(0) Dim model = compilation.GetSemanticModel(tree) Dim node = tree.GetRoot().DescendantNodes.OfType(Of IdentifierNameSyntax)().ElementAt(5) Assert.Equal("ViewData", node.ToString()) Assert.Equal("Function C2.ViewData() As C1", model.GetSymbolInfo(node).Symbol.ToTestDisplayString()) compilation.VerifyOperationTree(node.Parent, expectedOperationTree:= <![CDATA[ IPropertyReferenceOperation: Property C1.Item(x As System.String) As System.String (OperationKind.PropertyReference, Type: System.String) (Syntax: 'ViewData("Title")') Instance Receiver: IInvocationOperation (Function C2.ViewData() As C1) (OperationKind.Invocation, Type: C1) (Syntax: 'ViewData') Instance Receiver: null Arguments(0) Arguments(1): IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: null) (Syntax: '"Title"') ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: "Title") (Syntax: '"Title"') InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) ]]>.Value) End Sub End Class End Namespace