Make BoundUsingStatement.Declarations follow documentation in VB, updated tests to match.

上级 ca69bc39
......@@ -1461,7 +1461,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return s_variablesMappings.GetValue(
Me,
Function(BoundUsing)
Dim usingStatementSyntax = Syntax.ChildNodes().OfType(Of UsingStatementSyntax).SingleOrDefault()
If (BoundUsing.ResourceList.IsDefault) Then
Return Nothing
End If
Dim usingStatementSyntax = DirectCast(Syntax.ChildNodes()(0), UsingStatementSyntax)
Return New Variables(BoundUsing.ResourceList.As(Of IVariableDeclaration), usingStatementSyntax)
End Function)
End Get
......
......@@ -128,6 +128,7 @@
<Compile Include="FlowAnalysis\RegionAnalysisTestsWithStaticLocals.vb" />
<Compile Include="FlowAnalysis\StructureAnalysisTests.vb" />
<Compile Include="FlowAnalysis\TryLockUsingStatementTests.vb" />
<Compile Include="IOperation\IOperationTests_IUsingStatement.vb" />
<Compile Include="IOperation\IOperationTests_IVariableDeclaration.vb" />
<Compile Include="Resource.Designer.vb">
<AutoGen>True</AutoGen>
......
......@@ -352,106 +352,5 @@ BC30581: 'AddressOf' expression cannot be converted to 'Integer' because 'Intege
IObjectCreationExpression (Constructor: Sub System.Guid..ctor()) (OperationKind.ObjectCreationExpression, Type: System.Guid) (Syntax: 'New System.Guid()')
IOperation: (OperationKind.None) (Syntax: 'AddressOf Main')")
End Sub
<Fact>
<WorkItem(19819, "https://github.com/dotnet/roslyn/issues/19819")>
Public Sub UsingDeclarationSyntaxNotNull()
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Using D1 as New C1()
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.NotNull(op.Declaration.Syntax)
Assert.Equal("Using D1 as New C1()", op.Declaration.Syntax.ToString())
End Sub
<Fact>
<WorkItem(19819, "https://github.com/dotnet/roslyn/issues/19819")>
Public Sub UsingDeclarationIncompleteUsingNotNullSyntax()
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Using
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.NotNull(op.Declaration.Syntax)
Assert.Equal("Using", op.Declaration.Syntax.ToString())
End Sub
<Fact>
Public Sub UsingDeclarationExistingVariableNonNullSyntax()
' TODO: This will need to be removed when https://github.com/dotnet/roslyn/issues/19887 is fixed.
' The docs for IUsingStatement.Declaration state that it should be returning null when the
' using statement does not declare any variables. However, it currently does not. When that is
' fixed, this test should be updated to correctly reflect that assertion.
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Dim x = New C1()
Using x
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.NotNull(op.Declaration.Syntax)
Assert.Equal("Using x", op.Declaration.Syntax.ToString())
End Sub
End Class
End Namespace
Imports Microsoft.CodeAnalysis.Semantics
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Roslyn.Test.Utilities
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
Partial Public Class IOperationTests
Inherits SemanticModelTestBase
<Fact>
<WorkItem(19819, "https://github.com/dotnet/roslyn/issues/19819")>
Public Sub UsingDeclarationSyntaxNotNull()
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Using D1 as New C1()
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
CompilationUtils.AssertNoDiagnostics(comp)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.NotNull(op.Declaration.Syntax)
Assert.Same(node.UsingStatement, op.Declaration.Syntax)
End Sub
<Fact>
<WorkItem(19887, "https://github.com/dotnet/roslyn/issues/19887")>
Public Sub UsingDeclarationIncompleteUsingNullDeclaration()
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Using
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
CompilationUtils.AssertTheseDiagnostics(comp,
<expected>
BC30201: Expression expected.
Using
~
</expected>)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.Null(op.Declaration)
End Sub
<Fact>
<WorkItem(19887, "https://github.com/dotnet/roslyn/issues/19887")>
Public Sub UsingDeclarationExistingVariableNullDeclaration()
Dim source = <compilation>
<file name="c.vb">
<![CDATA[
Imports System
Module Module1
Class C1
Implements IDisposable
Public Sub Dispose() Implements IDisposable.Dispose
Throw New NotImplementedException()
End Sub
End Class
Sub S1()
Dim x = New C1()
Using x
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CreateCompilationWithMscorlibAndVBRuntime(source, parseOptions:=TestOptions.RegularWithIOperationFeature)
CompilationUtils.AssertNoDiagnostics(comp)
Dim tree = comp.SyntaxTrees.Single()
Dim node = tree.GetRoot().DescendantNodes().OfType(Of UsingBlockSyntax).Single()
Dim op = DirectCast(comp.GetSemanticModel(tree).GetOperationInternal(node), IUsingStatement)
Assert.Null(op.Declaration)
End Sub
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册