Fix VB IUsingStatement.Declaration to not have null syntax.

上级 ea7f125b
......@@ -3,6 +3,7 @@
Imports System.Collections.Immutable
Imports Microsoft.CodeAnalysis.Semantics
Imports Microsoft.CodeAnalysis.VisualBasic.Symbols
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic
......@@ -176,7 +177,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private ReadOnly _syntax As SyntaxNode
Public Sub New(boundCaseBlock As BoundCaseBlock)
' `CaseElseClauseSyntax` is bound to `BoundCaseStatement` with an empty list of case clauses,
' `CaseElseClauseSyntax` is bound to `BoundCaseStatement` with an empty list of case clauses,
' so we explicitly create an IOperation node for Case-Else clause to differentiate it from Case clause.
Dim caseStatement = boundCaseBlock.CaseStatement
If caseStatement.CaseClauses.IsEmpty AndAlso caseStatement.Syntax.Kind() = SyntaxKind.CaseElseStatement Then
......@@ -1460,7 +1461,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return s_variablesMappings.GetValue(
Me,
Function(BoundUsing)
Return New Variables(BoundUsing.ResourceList.As(Of IVariableDeclaration))
Dim usingStatementSyntax = Syntax.ChildNodes().OfType(Of UsingStatementSyntax).SingleOrDefault()
Return New Variables(BoundUsing.ResourceList.As(Of IVariableDeclaration), usingStatementSyntax)
End Function)
End Get
End Property
......@@ -1487,9 +1489,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Implements IVariableDeclarationStatement
Private ReadOnly _variables As ImmutableArray(Of IVariableDeclaration)
Private ReadOnly _syntax As SyntaxNode
Public Sub New(variables As ImmutableArray(Of IVariableDeclaration))
Public Sub New(variables As ImmutableArray(Of IVariableDeclaration), syntax As SyntaxNode)
_variables = variables
_syntax = syntax
End Sub
Public Sub Accept(visitor As OperationVisitor) Implements IOperation.Accept
......@@ -1514,7 +1518,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Public ReadOnly Property Syntax As SyntaxNode Implements IOperation.Syntax
Get
Return Nothing
Return _syntax
End Get
End Property
......
......@@ -16,24 +16,24 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
<file name="c.vb">
<![CDATA[
Public Class B2
Public Shared Operator +(x As B2, y As B2) As B2
Public Shared Operator +(x As B2, y As B2) As B2
System.Console.WriteLine("+")
Return x
End Operator
Public Shared Operator -(x As B2) As B2
Public Shared Operator -(x As B2) As B2
System.Console.WriteLine("-")
Return x
End Operator
Public Shared Operator -(x As B2) As B2
Public Shared Operator -(x As B2) As B2
System.Console.WriteLine("-")
Return x
End Operator
End Class
Module Module1
Sub Main()
Sub Main()
Dim x, y As New B2()
x = x + 10
x = x + y
......@@ -142,7 +142,7 @@ IExpressionStatement (OperationKind.ExpressionStatement, IsInvalid) (Syntax: 'x
<file name="c.vb">
<![CDATA[
Public Class B2
Public Shared Operator +(x As B2, y As B2) As B2
Public Shared Operator +(x As B2, y As B2) As B2
System.Console.WriteLine("+")
Return x
End Operator
......@@ -150,7 +150,7 @@ End Class
Module Module1
Sub Main()
Dim x, y As Integer
Dim x, y As Integer
Dim a, b As New B2()
x += y
a += b
......@@ -291,7 +291,7 @@ IForLoopStatement (LoopKind.For) (OperationKind.LoopStatement) (Syntax: 'For i =
<file name="c.vb">
<![CDATA[
Module Module1
Sub Main()
Sub Main()
Test1(Nothing)
Test2(New System.Guid(), Nothing)
Test1(AddressOf Main)
......@@ -352,5 +352,64 @@ 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
Inherits IDisposable
End Class
Sub S1()
Using D1 as New C1()
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CompilationUtils.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
Inherits IDisposable
End Class
Sub S1()
Using
End Using
End Sub
End Module
]]>
</file>
</compilation>
Dim comp = CompilationUtils.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
End Class
End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册