File: EditAndContinue\ActiveStatementTests.vb
Web Access
Project: ..\..\..\src\EditorFeatures\VisualBasicTest\Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.UnitTests)
' 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 Microsoft.CodeAnalysis.EditAndContinue
Imports Microsoft.CodeAnalysis.Emit
Imports Microsoft.CodeAnalysis.EditAndContinue.Contracts
 
Namespace Microsoft.CodeAnalysis.VisualBasic.EditAndContinue.UnitTests
    <UseExportProvider>
    Public Class ActiveStatementTests
        Inherits EditingTestBase
 
        <Fact>
        Public Sub Update_Inner()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Shared Sub Main()
        While True
            <AS:1>Goo(2)</AS:1>
        End While
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Goo(2)"))
        End Sub
 
        <Fact>
        Public Sub Update_Inner_NewCommentAtEndOfActiveStatement()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>' comment
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Update_Inner_Reloadable()
            Dim src1 = ReloadableAttributeSrc & "
<CreateNewOnMetadataUpdate>
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = ReloadableAttributeSrc & "
<CreateNewOnMetadataUpdate>
Class C
    Shared Sub Main()
        While True
            <AS:1>Goo(2)</AS:1>
        End While
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Goo(2)"))
        End Sub
 
        <Fact>
        Public Sub Update_Leaf()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Shared Sub Main()
        While True
            <AS:1>Goo(1)</AS:1>
        End While
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a + 1)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Update_Leaf_NewCommentAtEndOfActiveStatement()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>'comment
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        ' <summary>
        ' CreateNewOnMetadataUpdate has no effect in presence of active statements (in break mode).
        ' </summary>
        <Fact>
        Public Sub Update_Leaf_Reloadable()
 
            Dim src1 = ReloadableAttributeSrc + "
<CreateNewOnMetadataUpdate>
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>System.Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim src2 = ReloadableAttributeSrc + "
<CreateNewOnMetadataUpdate>
Class C
    Shared Sub Main()
        While True
            <AS:1>Goo(1)</AS:1>
        End While
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a + 1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemantics(active,
                semanticEdits:=
                {
                    SemanticEdit(SemanticEditKind.Update, Function(c) c.GetMember("C.Main"), preserveLocalVariables:=True),
                    SemanticEdit(SemanticEditKind.Update, Function(c) c.GetMember("C.Goo"), preserveLocalVariables:=True)
                })
        End Sub
 
        <Fact>
        Public Sub Headers()
            Dim src1 = "
Class C
    Property P(a As Integer) As Integer
        <AS:7>Get</AS:7>
            <AS:0>Me.value = a</AS:0>
        <AS:8>End Get</AS:8>
        <AS:9>Set(value As Integer)</AS:9>
            <AS:1>Me.value = a</AS:1>
        <AS:10>End Set</AS:10>
    End Property
 
    Custom Event E As Action
        <AS:11>AddHandler(value As Action)</AS:11>
            <AS:2>Me.value = a</AS:2>
        <AS:12>End AddHandler</AS:12>
        <AS:13>RemoveHandler(value As Action)</AS:13>
            <AS:3>Me.value = a</AS:3>
        <AS:14>End RemoveHandler</AS:14>
        <AS:15>RaiseEvent()</AS:15>
            <AS:4>Me.value = a</AS:4>
        <AS:16>End RaiseEvent</AS:16>
    End Event
 
    <AS:17>Shared Operator &(a As C, b As C) As C</AS:17>
        <AS:5>Me.value = a</AS:5>
    <AS:18>End Operator</AS:18>
 
    <AS:19>Sub New(a As C, b As C)</AS:19>
        <AS:6>Me.value = a</AS:6>
    <AS:20>End Sub</AS:20>
 
    <AS:21>Sub F(a As C, b As C)</AS:21>
        <AS:22>Me.value = a</AS:22>
    <AS:23>End Sub</AS:23>
 
    <AS:24>Function G(a As C, b As C) As Integer</AS:24>
        <AS:25>Me.value = a</AS:25>
        Return 0
    <AS:26>End Function</AS:26>
End Class
"
 
            Dim src2 = "
Class C
    Property P(a As Integer) As Integer
        <AS:7>Get</AS:7>
            <AS:0>Me.value = a*1</AS:0>
        <AS:8>End Get</AS:8>
        <AS:9>Set(value As Integer)</AS:9>
            <AS:1>Me.value = a*2</AS:1>
        <AS:10>End Set</AS:10>
    End Property
 
    Custom Event E As Action
        <AS:11>AddHandler(value As Action)</AS:11>
            <AS:2>Me.value = a*3</AS:2>
        <AS:12>End AddHandler</AS:12>
        <AS:13>RemoveHandler(value As Action)</AS:13>
            <AS:3>Me.value = a*4</AS:3>
        <AS:14>End RemoveHandler</AS:14>
        <AS:15>RaiseEvent()</AS:15>
            <AS:4>Me.value = a*5</AS:4>
        <AS:16>End RaiseEvent</AS:16>
    End Event
 
    <AS:17>Shared Operator &(a As C, b As C) As C</AS:17>
        <AS:5>Me.value = a*6</AS:5>
    <AS:18>End Operator</AS:18>
 
    <AS:19>Sub New(a As C, b As C)</AS:19>
        <AS:6>Me.value = a*7</AS:6>
    <AS:20>End Sub</AS:20>
 
    <AS:21>Sub F(a As C, b As C)</AS:21>
        <AS:22>Me.value = a*8</AS:22>
    <AS:23>End Sub</AS:23>
 
    <AS:24>Function G(a As C, b As C) As Integer</AS:24>
        <AS:25>Me.value = a*8</AS:25>
    <AS:26>End Function</AS:26>
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*6"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*7"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*8"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*8"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*2"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*3"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*4"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Me.value = a*5"))
        End Sub
 
#Region "Delete"
        <Fact>
        Public Sub Delete_Leaf_Method()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
<AS:0>Class C</AS:0>
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
End Class
"
 
            ' TODO (bug 755959): better deleted active statement span 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, "Class C", DeletedSymbolDisplay(FeaturesResources.method, "Goo(a As Integer)")))
        End Sub
 
        <Fact>
        Public Sub Delete_All_SourceText()
            Dim src1 = "
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim src2 = ""
 
            Dim edits = GetTopEdits(src1, src2)
            edits.VerifySemanticDiagnostics(
                Diagnostic(RudeEditKind.Delete, Nothing, DeletedSymbolDisplay(FeaturesResources.class_, "C")))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Inner()
            Dim src1 = " 
Class C
    Shared Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Shared Sub Main()
        While True
        End While
    <AS:1>End Sub</AS:1>
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Shared Sub Main()", FeaturesResources.code))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Inner_MultipleParents()
            Dim src1 = "
Class C 
    Shared Sub Main()
        Do
            <AS:1>Goo(1)</AS:1>
        Loop
 
        If True
            <AS:2>Goo(2)</AS:2>
        Else
            <AS:3>Goo(3)</AS:3>
        End If
 
        Dim x As Integer = 1
        Select Case x
            Case 1, 2
                <AS:4>Goo(4)</AS:4>
 
            Case Else
                <AS:5>Goo(5)</AS:5>
        End Select
 
        While True
            <AS:6>Goo(4)</AS:6>
        End While
 
        Do Until True
            <AS:7>Goo(7)</AS:7>
        Loop
 
        If True Then <AS:8>Goo(8)</AS:8> Else <AS:9>Goo(9)</AS:9>
 
        For i = 0 To 10 : <AS:10>Goo(10)</AS:10> : Next
 
        For Each i in {1, 2} : <AS:11>Goo(11)</AS:11> : Next
 
        Using z = new C() : <AS:12>Goo(12)</AS:12> : End Using
 
        With expr 
            <AS:13>.Bar = Goo(13)</AS:13>
        End With
 
        <AS:14>label:</AS:14>
        Console.WriteLine(1)
 
        SyncLock Nothing : <AS:15>Goo(15)</AS:15> : End SyncLock
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C 
    Shared Sub Main()
        Do
        <AS:1>Loop</AS:1>
 
        <AS:2>If True</AS:2>
        <AS:3>Else</AS:3>
        End If
 
        Dim x As Integer = 1
        Select Case x
            <AS:4>Case 1, 2</AS:4>
            <AS:5>Case Else</AS:5>
        End Select
 
        While True
        <AS:6>End While</AS:6>
 
        Do Until True
        <AS:7>Loop</AS:7>
 
        <AS:8>If True Then</AS:8> <AS:9>Else</AS:9>
 
        For i = 0 To 10 : <AS:10>Next</AS:10>
 
        For Each i In {1, 2} : <AS:11>Next</AS:11>
 
        Using z = New C() : <AS:12>End Using</AS:12>
 
        With expr 
        <AS:13>End With</AS:13>
 
        <AS:14>Console.WriteLine(1)</AS:14>
 
        SyncLock Nothing : <AS:15>End SyncLock</AS:15> 
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Do", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "If True", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Else", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Case 1, 2", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Case Else", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "While True", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Do Until True", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "If True Then", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Else", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "For i = 0 To 10", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "For Each i In {1, 2}", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Using z = New C()", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "With expr", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Shared Sub Main()", FeaturesResources.code),
                Diagnostic(RudeEditKind.DeleteActiveStatement, "SyncLock Nothing", FeaturesResources.code))
        End Sub
 
        <Fact>
        Public Sub Delete_Inner_ElseIf1()
            Dim src1 = "
Class C 
    Shared Sub Main()
        If c1 Then
            Console.WriteLine(1)
        <AS:1>ElseIf c2 Then</AS:1>
            Console.WriteLine(2)
        ElseIf c3 Then
            Console.WriteLine(3)
        End If
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C 
    Shared Sub Main()
        If c1 Then
            Console.WriteLine(1)
        <AS:1>ElseIf c3 Then</AS:1>
            Console.WriteLine(3)
        End If
    End Sub
 
    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "If c1 Then", FeaturesResources.code))
        End Sub
 
        <Fact>
        Public Sub Delete_Inner_ElseIf2()
            Dim src1 = <![CDATA[
Class C 
    Shared Sub Main()
        If c1 Then
            Console.WriteLine(1)
        <AS:1>ElseIf c2 Then</AS:1>
            Console.WriteLine(2)
        End If
    End Sub

    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
]]>.Value
 
            Dim src2 = <![CDATA[
Class C 
    Shared Sub Main()
        If c1 Then
            Console.WriteLine(1)
        <AS:1>End If</AS:1>
    End Sub

    Shared Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
]]>.Value
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "If c1 Then", FeaturesResources.code))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
    <AS:0>End Sub</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Leaf_InTry()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        Try
            <AS:0>Console.WriteLine(a)</AS:0>
        Catch
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        <AS:0>Try</AS:0>
        Catch
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Leaf_InTry2()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        Try
            Try
                <AS:0>Console.WriteLine(a)</AS:0>
            Catch
            End Try
        Catch
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        <AS:0>Try</AS:0>
        Catch
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Inner_CommentActiveStatement()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        'Goo(1)
    <AS:1>End Sub</AS:1>
 
    Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Sub Main()", FeaturesResources.code))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub Delete_Leaf_CommentActiveStatement()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        <AS:0>Console.WriteLine(a)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo(1)</AS:1>
    End Sub
 
    Sub Goo(a As Integer)
        'Console.WriteLine(a)
    <AS:0>End Sub</AS:0>
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Delete_EntireNamespace()
            Dim src1 = "
Module Module1
    Sub Main()
        <AS:0>Console.WriteLine(0)</AS:0>
    End Sub
End Module
"
 
            Dim src2 = "<AS:0></AS:0>"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, Nothing, DeletedSymbolDisplay(VBFeaturesResources.module_, "Module1")))
        End Sub
#End Region
 
#Region "Constructors"
        <Fact>
        Public Sub Updated_Inner_Constructor()
            Dim src1 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f As Goo = New Goo(5)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    Sub New(a As Integer)
        <AS:0>Me.value = a</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f As Goo = New Goo(5*2)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    Sub New(a As Integer)
        <AS:0>Me.value = a</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                                        Diagnostic(RudeEditKind.ActiveStatementUpdate, "f As Goo = New Goo(5*2)"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/741249")>
        Public Sub Updated_Leaf_Constructor()
            Dim src1 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f As Goo = New Goo(5)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    Sub New(a As Integer)
        <AS:0>Me.value = a</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f As Goo = New Goo(5)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    Sub New(a As Integer)
        <AS:0>Me.value = a*2</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Updated_Leaf_Constructor_Parameter()
            Dim src1 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f = new Goo(5)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    <AS:0>Public Sub New(Optional a As Integer = 1)</AS:0>
        Me.value = a
    End Sub
End Class
"
            Dim src2 = "
Class Program
    Shared Sub Main()
        Dim <AS:1>f = new Goo(5)</AS:1>
    End Sub
End Class
 
Class Goo
    Dim value As Integer
 
    <AS:0>Public Sub New(Optional a As Integer = 2)</AS:0>
        Me.value = a
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InitializerUpdate, "Optional a As Integer = 2", FeaturesResources.parameter))
        End Sub
 
        <Fact>
        Public Sub Updated_Leaf_Constructor_Parameter_DefaultValue()
            Dim src1 = "
Class Goo
    Dim value As Integer
   
    Shared Sub Main()
        Dim <AS:1>f = new Goo(5)</AS:1>
    End Sub
 
    <AS:0>Sub New(Optional a As Integer = 5)</AS:0>
        Me.value = a
    End Sub
End Class
"
            Dim src2 = "
Class Goo
    Dim value As Integer
   
    Shared Sub Main()
        Dim <AS:1>f = new Goo(5)</AS:1>
    End Sub
 
    <AS:0>Sub New(Optional a As Integer = 42)</AS:0>
        Me.value = a
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InitializerUpdate, "Optional a As Integer = 42", FeaturesResources.parameter))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/742334")>
        Public Sub Updated_Leaf_ConstructorChaining1()
            Dim src1 = "
Class B 
    Inherits A
 
    Sub Main
       Dim <AS:1>b = new B(2, 3)</AS:1>
    End Sub
 
    Sub New(x As Integer, y As Integer)
        <AS:0>MyBase.New(x + y, x - y)</AS:0> 
    End Sub
End Class
"
 
            Dim src2 = "
Class B 
    Inherits A
 
    Sub Main
       Dim <AS:1>b = new B(2, 3)</AS:1>
    End Sub
 
    Sub New(x As Integer, y As Integer)
        <AS:0>MyBase.New(x + y, x - y + 5)</AS:0> 
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/742334")>
        Public Sub Updated_Leaf_ConstructorChaining2()
            Dim src1 = "
Class Test
    Sub Main()
       Dim <AS:2>b = new B(2, 3)</AS:2>
    End Sub
End Class
 
Class B
    Inherits A
 
    Sub New(x As Integer, y As Integer)
        <AS:1>MyBase.New(x + y, x - y)</AS:1>
    End Sub
End Class
 
Class A
    Sub New(x As Integer, y As Integer)
        <AS:0>Me.New(x, y, 0)</AS:0>
    End Sub
 
    Sub New(x As Integer, y As Integer, z As Integer) : End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
       Dim <AS:2>b = new B(2, 3)</AS:2>
    End Sub
End Class
 
Class B
    Inherits A
 
    Sub New(x As Integer, y As Integer)
        <AS:1>MyBase.New(x + y, x - y)</AS:1>
    End Sub
End Class
 
Class A
    Sub New(x As Integer, y As Integer)
        <AS:0>Me.New(5 + x, y, 0)</AS:0>
    End Sub
 
    Sub New(x As Integer, y As Integer, z As Integer) : End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstanceConstructorWithoutInitializer()
            Dim src1 = "
Class C
    Dim a As Integer = 5
 
    <AS:0>Public Sub New(a As Integer)</AS:0>
    End Sub
 
    Sub Main()
        Dim <AS:1>c = new C(3)</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Dim a As Integer = 42
 
    <AS:0>Public Sub New(a As Integer)</AS:0>
    End Sub
 
    Sub Main()
        Dim <AS:1>c = new C(3)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstanceConstructorWithInitializer_Internal_Update1()
            Dim src1 = "
Class C 
    Sub New(a As Integer)
        <AS:2>MyClass.New(True)</AS:2>
    End Sub
 
    Sub New(b As Boolean)
        <AS:1>MyBase.New(F())</AS:1>
    End Sub
 
    Shared Function F() As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim <AS:3>c As C = New C(3)</AS:3>
    End Sub
End Class
"
            Dim src2 = "
Class C 
    Sub New(a As Integer)
        <AS:2>MyClass.New(False)</AS:2>
    End Sub
 
    Sub New(b As Boolean)
        <AS:1>MyBase.New(F())</AS:1>
    End Sub
 
    Shared Function F() As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim <AS:3>c As C = New C(3)</AS:3>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "MyClass.New(False)"))
        End Sub
 
        <Fact>
        Public Sub InstanceConstructorWithInitializer_Leaf_Update1()
            Dim src1 = "
Class C
    Public Sub New() 
        <AS:0>MyBase.New(1)</AS:0>
    End Sub
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Public Sub New() 
        <AS:0>MyBase.New(2)</AS:0>
    End Sub
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755959")>
        Public Sub InstanceConstructorWithInitializer_Leaf_DeleteBaseCall()
            Dim src1 = "
Class C
    Sub New() 
        <AS:0>MyBase.New(2)</AS:0>
    End Sub
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub New()
    <AS:0>End Sub</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstanceConstructorWithInitializer_Leaf_InsertBaseCall()
            Dim src1 = "
Class C
    <AS:0>Public Sub New</AS:0>
    End Sub
 
    Sub Main
        Dim <AS:1>c = new C()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    <AS:0>Public Sub New</AS:0>
        MyBase.New(2)
    End Sub
 
    Sub Main
        Dim <AS:1>c = new C()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
#End Region
 
#Region "Initializers"
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_Init()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_AsNew()
            Dim src1 = "
Class C
    Dim <AS:0>a As New Integer</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a As New Integer</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_SharedAsNew()
            Dim src1 = "
Class C
    Dim <AS:0>a</AS:0>, b, c As New Integer
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a</AS:0>, b, c As New Integer
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_PropertyInitializer()
            Dim src1 = "
Class C
    Property <AS:0>P As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_PropertyInitializerUntyped()
            Dim src1 = "
Class C
    Property <AS:0>P = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P = 1</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_PropertyAsNewInitializer()
            Dim src1 = "
Class C
    Property <AS:0>P As New C()</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P As New C()</AS:0>
 
    Sub Main
        Dim <AS:1>b = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_ArrayInitializer_Untyped()
            Dim src1 = "
Class C
    Dim <AS:0>A(10)</AS:0>
 
    Sub Main
        Dim <AS:1>A(10)</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>A(10)</AS:0>
 
    Sub Main
        Dim <AS:1>A(10)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/836523")>
        Public Sub Initializer_Unedited_ArrayInitializer_Typed()
            Dim src1 = "
Class C
    Dim <AS:0>A(10)</AS:0>, B(2) As Integer
 
    Sub Main
        Dim <AS:1>A(10)</AS:1>, B(2) As Integer
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>A(10)</AS:0>, B(2) As Integer
 
    Sub Main
        Dim <AS:1>A(10)</AS:1>, B(2) As Integer
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstancePropertyInitializer_Update()
            Dim src1 = "
Class C
    Property <AS:0>P As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P As Integer = 2</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstancePropertyAsNewInitializer_Update()
            Dim src1 = "
Class C
    Property <AS:0>P As New C(1)</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P As New C(2)</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub InstancePropertyInitializer_Delete()
            Dim src1 = "
Class C
    Property <AS:0>P As Integer = 1</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Property P As Integer</AS:0>
 
    Sub Main
        Dim <AS:1>c = New C()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_Update1()
            Dim src1 = "
Class C
    Dim <AS:0>a = 1</AS:0>, b = 2
 
    Sub Main
        Dim <AS:1>c = 1</AS:1>, d = 2
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a = 2</AS:0>, b = 2
 
    Sub Main
        Dim <AS:1>c = 2</AS:1>, d = 2
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c = 2"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_Update2()
            Dim src1 = "
Class C
    Dim a = 1, <AS:0>b = 2</AS:0>
 
    Sub Main
        Dim c = 1, <AS:1>d = 2</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a = 1, <AS:0>b = 3</AS:0>
 
    Sub Main
        Dim c = 1, <AS:1>d = 3</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "d = 3"))
        End Sub
 
        <Fact>
        Public Sub Initializer_SemanticError()
            Dim src1 = "
Class C
    Dim <AS:0>a</AS:0>, <AS:1>b</AS:1> = 2
 
    Sub Main
        Dim <AS:2>a</AS:2>, <AS:3>b</AS:3> = 2
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a, b = 20
 
    Sub Main
        Dim <AS:2>a</AS:2>, <AS:3>b</AS:3> = 20
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            ' Since the code is semantically incorrect it's acceptable to misreport active statements.
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub FieldInitializer_AsNewToInit()
            Dim src1 = "
Class C
    Dim <AS:0>a As New Integer</AS:0>
 
    Sub Main
        Dim <AS:1>b As New Integer</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a As Integer = 0</AS:0>
 
    Sub Main
        Dim <AS:1>b As Integer = 0</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "b As Integer = 0"))
        End Sub
 
        <Fact>
        Public Sub PropertyInitializer_AsNewToInit()
            Dim src1 = "
Class C
    Property <AS:0>P As New Integer()</AS:0>
End Class
"
 
            Dim src2 = "
Class C
    Property <AS:0>P As Integer = 0</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_InitToAsNew()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 0</AS:0>
 
    Sub Main
        Dim <AS:1>b As Integer = 0</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a As New Integer</AS:0>
 
    Sub Main
        Dim <AS:1>b As New Integer</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "b As New Integer"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_AsNewMulti_Update1()
            Dim src1 = "
Class C
    Dim <AS:1>a</AS:1>, b As New D(1)
    Dim c, <AS:2>d</AS:2> As New D(1)
    Dim <AS:3>e</AS:3>, <AS:4>f</AS:4> As New D(1)
 
    Sub Main
        Dim <AS:5>x</AS:5>, y As New D(1)
    <AS:0>End Sub</AS:0>
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:1>a</AS:1>, b As New D(2)
    Dim c, <AS:2>d</AS:2> As New D(2)
    Dim <AS:3>e</AS:3>, <AS:4>f</AS:4> As New D(2)
 
    Sub Main
        Dim <AS:5>x</AS:5>, y As New D(2)
    <AS:0>End Sub</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "a"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "d"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "e"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "f"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "x"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_AsNewMulti_Update3()
            Dim src1 = "
Class C
    Private <AS:0>a As New D(1)</AS:0>
    Private <AS:1>e As New D(1)</AS:1>
 
    Sub Main
        Dim <AS:2>c As New D(1)</AS:2>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Private <AS:0>a</AS:0>, b As New D(2)
    Private <AS:1>e</AS:1>, f As New D(2)
 
    Sub Main
        Dim <AS:2>c</AS:2>, d As New D(2)
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "e"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_AsNewMulti_Update4()
            Dim src1 = "
Class C
    Private <AS:0>a</AS:0>, b As New D(1)
    Private <AS:1>e</AS:1>, f As New D(1)
 
    Sub Main
        Dim <AS:2>c</AS:2>, d As New D(1)
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Private <AS:0>a As New D(2)</AS:0>
    Private <AS:1>e As New D(2)</AS:1>
 
    Sub Main
        Dim <AS:2>c As New D(2)</AS:2>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c As New D(2)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "e As New D(2)"),
                Diagnostic(RudeEditKind.Delete, "a As New D(2)", DeletedSymbolDisplay(FeaturesResources.field, "b")),
                Diagnostic(RudeEditKind.Delete, "e As New D(2)", DeletedSymbolDisplay(FeaturesResources.field, "f")))
        End Sub
 
        <Fact>
        Public Sub Initializer_AsNewMulti_WithLambda1()
            Dim src1 = "
Class C
    Private a As New D(Function() <AS:0>1</AS:0>)
End Class
"
 
            Dim src2 = "
Class C
    Private a As New D(Function() <AS:0>2</AS:0>)
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/815933")>
        Public Sub Initializer_AsNewMulti_WithLambda2()
            Dim src1 = "
Class C
    Private a As New D(1, <AS:0>Sub()</AS:0>
                                End Sub)
End Class
"
 
            Dim src2 = "
Class C
    Private a As New D(2, <AS:0>Sub()</AS:0>
                                End Sub)
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Initializer_AsNewMulti_WithLambda3()
            Dim src1 = "
Class C
    Private a, b As New D(Function() <AS:0>1</AS:0>)
End Class
"
 
            Dim src2 = "
Class C
    Private a, b As New D(Function() <AS:0>2</AS:0>)
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Initializer_Array_SemanticError()
            Dim src1 = "
Class C
    Dim <AS:0>a(1)</AS:0>, <AS:1>b(2)</AS:1> = 3
 
    Sub Main
        Dim <AS:2>c(1)</AS:2>, <AS:3>d(2)</AS:3> = 3</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a(10)</AS:0>, <AS:1>b(20)</AS:1> = 30
 
    Sub Main
        Dim <AS:2>c(10)</AS:2>, <AS:3>d(20)</AS:3> = 30
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            ' since the code is semantically incorrect we only care about not crashing
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c(10)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "d(20)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "b(20)"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849649")>
        Public Sub Initializer_Array_Update1()
            Dim src1 = "
Class C
    Dim <AS:0>a(1)</AS:0>, b(1) As Integer
 
    Sub Main
        Dim <AS:1>c(1)</AS:1>, d(1) As Integer
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>a(2)</AS:0>, b(1) As Integer
 
    Sub Main
        Dim <AS:1>c(2)</AS:1>, d(1) As Integer
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c(2)"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849649")>
        Public Sub Initializer_Array_Update2()
            Dim src1 = "
Class C
    Dim a(1), <AS:0>b(1)</AS:0> As Integer
 
    Sub Main
        Dim c(1), <AS:1>d(1)</AS:1> As Integer
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a(1), <AS:0>b(2)</AS:0> As Integer
 
    Sub Main
        Dim c(1), <AS:1>d(2)</AS:1> As Integer
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "d(2)"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849649")>
        Public Sub Initializer_Array_Update3()
            Dim src1 = "
Class C
    Private <AS:0>a(1,1)</AS:0>
    Private <AS:1>e(1,0)</AS:1>
    Private f(1,0)
 
    Sub Main
        Dim <AS:2>c(1,0)</AS:2>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Private <AS:0>a(1,0)</AS:0>
    Private <AS:1>e(1,2)</AS:1>
    Private f(1,2)
 
    Sub Main
        Dim <AS:2>c(1,2)</AS:2>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "e(1,2)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "c(1,2)"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849649")>
        Public Sub Initializer_Array_WithLambda1()
            Dim src1 = "
Class C
    Private a(Function() <AS:0>1</AS:0>, Function() <AS:1>1</AS:1>)
End Class
"
 
            Dim src2 = "
Class C
    Private a(Function() <AS:0>2</AS:0>, Function() <AS:1>3</AS:1>)
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "3"))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/849649")>
        Public Sub Initializer_Array_WithLambda2()
            Dim src1 = "
Class C
    Private a(1, F(<AS:0>Sub()</AS:0>
                         End Sub))
End Class
"
 
            Dim src2 = "
Class C
    Private a(2, F(<AS:0>Sub()</AS:0>
                         End Sub))
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Initializer_Collection1()
            Dim src1 = "
Class C
    Dim <AS:0>A() = {1, 2, 3}</AS:0>
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>A() = {1, 2, 3, 4}</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Initializer_Collection2()
            Dim src1 = "
Class C
    Sub F
        Dim <AS:0>A() = {1, 2, 3}</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub F
        Dim <AS:0>A() = {1, 2, 3, 4}</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_InsertConst1()
            Dim src1 = "
Class C
    Private <AS:0>a As Integer = 1</AS:0>
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Private Const a As Integer = 1</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ModifiersUpdate, "Private Const a As Integer = 1", FeaturesResources.const_field))
        End Sub
 
        <Fact>
        Public Sub LocalInitializer_InsertConst1()
            Dim src1 = "
Class C
    Sub Goo
        Private <AS:0>a As Integer = 1</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Goo
        Private Const a As Integer = 1
    <AS:0>End Sub</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_InsertConst2()
            Dim src1 = "
Class C
    Private <AS:0>a As Integer = 1</AS:0>, b As Integer = 2
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Private Const a As Integer = 1, b As Integer = 2</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ModifiersUpdate, "Private Const a As Integer = 1, b As Integer = 2", FeaturesResources.const_field),
                Diagnostic(RudeEditKind.ModifiersUpdate, "Private Const a As Integer = 1, b As Integer = 2", FeaturesResources.const_field))
        End Sub
 
        <Fact>
        Public Sub LocalInitializer_InsertConst2()
            Dim src1 = "
Class C
    Sub Goo
        Dim <AS:0>a As Integer = 1</AS:0>, b As Integer = 2
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Goo
        Const a As Integer = 1, b As Integer = 2
    <AS:0>End Sub</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete1()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
    Dim b As Integer = 2
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a As Integer
    Dim <AS:0>b As Integer = 2</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub LocalInitializer_Delete1()
            Dim src1 = "
Class C
    Sub F
        Dim <AS:0>a As Integer = 1</AS:0>
        Dim b As Integer = 2
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub F
        Dim a As Integer
        Dim <AS:0>b As Integer = 2</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete2()
            Dim src1 = "
Class C
    Dim b As Integer = 1
    Dim c As Integer
    Dim <AS:0>a = 1</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>b As Integer = 1</AS:0>
    Dim c As Integer
    Dim a
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete3()
            Dim src1 = "
Class C
    Dim b As Integer = 1
    Dim c As Integer
    Dim <AS:0>a = 1</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim <AS:0>b As Integer = 1</AS:0>
    Dim c As Integer
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, "Class C", DeletedSymbolDisplay(FeaturesResources.field, "a")))
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_AsNew_Single()
            Dim src1 = "
Class C
    Dim <AS:0>a</AS:0> As New D()
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Dim a As D</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_AsNew_Multi1()
            Dim src1 = "
Class C
    Dim a,<AS:0>b</AS:0>,c As New D()
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a,<AS:0>c</AS:0> As New D()
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, "a,      c        As New D()", DeletedSymbolDisplay(FeaturesResources.field, "b")))
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_AsNew_Multi2()
            Dim src1 = "
Class C
    Dim a,b,<AS:0>c</AS:0> As New D()
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a,<AS:0>b</AS:0> As New D()
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, "a,      b        As New D()", DeletedSymbolDisplay(FeaturesResources.field, "c")))
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_AsNew_WithLambda()
            Dim src1 = "
Class C
    Dim a As New D(<AS:0>Sub()</AS:0>
                   End Sub)
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Dim a As D</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_Array1()
            Dim src1 = "
Class C
    Dim a,b,<AS:0>c(1)</AS:0> As Integer
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Dim a,b As Integer</AS:0>
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.Delete, "a,b As Integer", DeletedSymbolDisplay(FeaturesResources.field, "c")))
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_Array2()
            Dim src1 = "
Class C
    Dim a,b(1),<AS:0>c(1)</AS:0> As Integer
 
    Sub New
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Dim a,<AS:0>b(1)</AS:0>,c As Integer
 
    Sub New
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.TypeUpdate, "c", FeaturesResources.field))
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_StaticInstanceMix1()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
    Shared b As Integer = 1
    Dim c As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    Dim a As Integer
    Shared b As Integer = 1
    Dim <AS:0>c As Integer = 1</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_StaticInstanceMix2()
            Dim src1 = "
Class C
    Shared c As Integer = 1
    Shared <AS:0>a As Integer = 1</AS:0>
    Dim b As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    Shared <AS:0>c As Integer = 1</AS:0>
    Shared a As Integer
    Dim b As Integer = 1
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_StaticInstanceMix3()
            Dim src1 = "
Class C
    Shared <AS:0>a As Integer = 1</AS:0>
    Dim b As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Shared a As Integer</AS:0>
    Dim b As Integer = 1
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub FieldInitializer_Delete_ArrayInit()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
    Shared b As Integer = 1
    Dim c(1) As Integer
End Class
"
 
            Dim src2 = "
Class C
    Dim a As Integer
    Shared b As Integer = 1
    Dim <AS:0>c(1)</AS:0> As Integer
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub PropertyInitializer_Delete_StaticInstanceMix()
            Dim src1 = "
Class C
    Shared Property <AS:0>a As Integer = 1</AS:0>
    Property  b As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    <AS:0>Shared Property a As Integer</AS:0>
    Property b As Integer = 1
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub PropertyFieldInitializer1()
            Dim src1 = "
Class C
    Property <AS:0>a As Integer = 1</AS:0>
    Dim b As Integer = 1
    Property c As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    Property a As Integer
    Dim <AS:0>b As Integer = 1</AS:0>
    Property c As Integer = 1
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub PropertyFieldInitializer2()
            Dim src1 = "
Class C
    Dim <AS:0>a As Integer = 1</AS:0>
    Property b As Integer = 1
    Property c As Integer = 1
End Class
"
 
            Dim src2 = "
Class C
    Dim a As Integer
    Property b As Integer
    Property <AS:0>c As Integer = 1</AS:0>
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
#End Region
 
#Region "SyncLock"
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755749")>
        Public Sub SyncLock_Insert_Leaf()
            Dim src1 = "
Class Test
    Sub Main()
        <AS:0>System.Console.Write(5)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock lockThis
            <AS:0>System.Console.Write(5)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock lockThis", VBFeaturesResources.SyncLock_block))
        End Sub
 
        <Fact>
        Public Sub SyncLock_Insert_Leaf4()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock a
            SyncLock b
                SyncLock c
                    <AS:0>System.Console.Write()</AS:0>
                End SyncLock
            End SyncLock
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock b
            SyncLock d
                SyncLock a
                    SyncLock e
                        <AS:0>System.Console.Write()</AS:0>
                    End SyncLock
                End SyncLock
            End SyncLock
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock d", VBFeaturesResources.SyncLock_block),
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "SyncLock e", VBFeaturesResources.SyncLock_block))
        End Sub
 
        <Fact>
        Public Sub SyncLock_Insert_Leaf5()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock a
            SyncLock c
                SyncLock b
                    SyncLock e
                        <AS:0>System.Console.Write()</AS:0>
                    End SyncLock
                End SyncLock
            End SyncLock
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock b
            SyncLock d
                SyncLock a
                    <AS:0>System.Console.Write()</AS:0>
                End SyncLock
            End SyncLock
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock d", VBFeaturesResources.SyncLock_statement))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/755752")>
        Public Sub SyncLock_Update_Leaf()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock lockThis
            <AS:0>System.Console.Write(5)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock ""test""
            <AS:0>System.Console.Write(5)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock ""test""", VBFeaturesResources.SyncLock_statement))
        End Sub
 
        <Fact>
        Public Sub SyncLock_Update_Leaf2()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock lockThis
            System.Console.Write(5)
        End SyncLock
        <AS:0>System.Console.Write(5)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock  ""test""
            System.Console.Write(5)
        End SyncLock
        <AS:0>System.Console.Write(5)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub SyncLock_Delete_Leaf()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock lockThis
            <AS:0>System.Console.Write(5)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        <AS:0>System.Console.Write(5)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub SyncLock_Update_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock F(Function(a) a)
            <AS:0>System.Console.WriteLine(1)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock F(Function(a) a + 1)
            <AS:0>System.Console.WriteLine(2)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub SyncLock_Update_Lambda2()
            Dim src1 = "
Class Test
    Sub Main()
        SyncLock F(Function(a) a)
            <AS:0>System.Console.WriteLine(1)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        SyncLock G(Function(a) a)
            <AS:0>System.Console.WriteLine(2)</AS:0>
        End SyncLock
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "SyncLock G(Function(a) a)", VBFeaturesResources.SyncLock_statement))
        End Sub
 
#End Region
 
#Region "ForEach"
 
        <Fact>
        Public Sub ForEach_Reorder_Leaf1()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                For Each c In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
 
            Dim src2 = "
Class Test
    Sub Main()
        For Each b In e1
            For Each c In e1
                For Each a In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Update_Leaf1()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                For Each c In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        For Each b In e1
            For Each c In e1
                For Each a In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Update_Leaf2()
            Dim src1 = "
Class Test
    Sub Main()
        <AS:0>System.Console.Write()</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class Test
    Sub Main()
        For Each b In e1
            For Each c In e1
                For Each a In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each b In e1", VBFeaturesResources.For_Each_block),
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each c In e1", VBFeaturesResources.For_Each_block),
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each a In e1", VBFeaturesResources.For_Each_block))
        End Sub
 
        <Fact>
        Public Sub ForEach_Delete_Leaf1()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                For Each c In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
 
            Dim src2 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                <AS:0>System.Console.Write()</AS:0>
            Next
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Delete_Leaf2()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                For Each c In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
 
            Dim src2 = "
Class Test
    Sub Main()
        For Each b In e1
            For Each c In e1
                <AS:0>System.Console.Write()</AS:0>
            Next
        Next
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Delete_Leaf3()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each b In e1
                For Each c In e1
                    <AS:0>System.Console.Write()</AS:0>
                Next
            Next
        Next
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        For Each a In e1
            For Each c In e1
                <AS:0>System.Console.Write()</AS:0>
            Next
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        Dim a = Sub()
            <AS:0>System.Console.Write()</AS:0>
        End Sub
 
        <AS:1>a()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        For Each b In e1
            For Each c In e1
                Dim a = Sub()
                    For Each z In e1
                        <AS:0>System.Console.Write()</AS:0>
                    Next
                End Sub
            Next
 
            <AS:1>a()</AS:1>
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each z In e1", VBFeaturesResources.For_Each_block),
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "For Each b In e1", VBFeaturesResources.For_Each_block))
        End Sub
 
        <Fact>
        Public Sub ForEach_Update_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        Next
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        For Each a In F(Function(a) a + 1)
            <AS:0>System.Console.Write(2)</AS:0>
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub ForEach_Update_Lambda2()
            Dim src1 = "
Class Test
    Sub Main()
        For Each a In F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        Next
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        For Each a In G(Function(a) a)
            <AS:0>System.Console.Write(2)</AS:0>
        Next
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "For Each a In G(Function(a) a)", VBFeaturesResources.For_Each_statement))
        End Sub
 
#End Region
 
#Region "Using"
 
        <Fact>
        Public Sub Using_Update_Leaf1()
            Dim src1 = "
Class Test
    Sub Main()
        Using a
            Using b
                <AS:0>System.Console.Write()</AS:0>
            End Using
        End Using
    End sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        Using a
            Using c
                Using b
                    <AS:0>System.Console.Write()</AS:0>
                End Using
            End Using
        End Using
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Using c", VBFeaturesResources.Using_block))
        End Sub
 
        <Fact>
        Public Sub Using_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        Using a
            Dim z = Function()
                Using b
                    <AS:0>Return 1</AS:0>
                End Using
            End Function
        End Using
 
        <AS:1>a()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        Using d
            Dim z = Function()
                Using c
                    Using b
                        <AS:0>Return 1</AS:0>
                    End Using
                End Using
            End Function
        End Using
 
        <AS:1>a()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Using c", VBFeaturesResources.Using_block))
        End Sub
 
        <Fact>
        Public Sub Using_Update_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        Using F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        End Using
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        Using F(Function(a) a + 1)
            <AS:0>System.Console.Write(2)</AS:0>
        End Using
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Using_Update_Lambda2()
            Dim src1 = "
Class Test
    Sub Main()
        Using F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        End Using
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        Using G(Function(a) a)
            <AS:0>System.Console.Write(2)</AS:0>
        End Using
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Using G(Function(a) a)", VBFeaturesResources.Using_statement))
        End Sub
 
#End Region
 
#Region "With"
 
        <Fact>
        Public Sub With_Update_Leaf1()
            Dim src1 = "
Class Test
    Sub Main()
        With a
            With b
                <AS:0>System.Console.Write()</AS:0>
            End With
        End With
    End sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        With a
            With c
                With b
                    <AS:0>System.Console.Write()</AS:0>
                End With
            End With
        End With
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "With c", VBFeaturesResources.With_block))
        End Sub
 
        <Fact>
        Public Sub With_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        With a
            Dim z = Function()
                With b
                    <AS:0>Return 1</AS:0>
                End With
            End Function
        End With
 
        <AS:1>a()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        With d
            Dim z = Function()
                With c
                    With b
                        <AS:0>Return 1</AS:0>
                    End With
                End With
            End Function
        End With
 
        <AS:1>a()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "With c", VBFeaturesResources.With_block))
        End Sub
 
        <Fact>
        Public Sub With_Update_Lambda1()
            Dim src1 = "
Class Test
    Sub Main()
        With F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        End With
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        With F(Function(a) a + 1)
            <AS:0>System.Console.Write(1)</AS:0>
        End With
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub With_Update_Lambda2()
            Dim src1 = "
Class Test
    Sub Main()
        With F(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        End With
    End Sub
End Class
"
            Dim src2 = "
Class Test
    Sub Main()
        With G(Function(a) a)
            <AS:0>System.Console.Write(1)</AS:0>
        End With
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "With G(Function(a) a)", VBFeaturesResources.With_statement))
        End Sub
 
#End Region
 
#Region "Try, Catch, Finally"
 
        <Fact>
        Public Sub Try_Add_Inner()
            Dim src1 = "
Class C
    Shared Sub Bar()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Shared Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Shared Sub Bar()
        Try
            <AS:1>Goo()</AS:1>
        Catch
        End Try
    End Sub
 
    Shared Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Try", VBFeaturesResources.Try_block))
        End Sub
 
        <Fact>
        Public Sub Try_Add_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
            <AS:0>Console.WriteLine(1)</AS:0>
        Catch
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Try_Delete_Inner()
            Dim src1 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Catch 
        End Try</ER:1.0>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Goo()", VBFeaturesResources.Try_block))
        End Sub
 
        <Fact>
        Public Sub Try_Delete_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>        
    End Sub
 
    Sub Goo()
        Try
            <AS:0>Console.WriteLine(1)</AS:0>
        Catch
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>        
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Try_Update_Inner()
            Dim src1 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Catch
        End Try</ER:1.0>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        Catch e As IOException
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Try", VBFeaturesResources.Try_block))
        End Sub
 
        <Fact>
        Public Sub Try_Update_Inner2()
            Dim src1 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Catch
        End Try</ER:1.0>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Catch
        End Try</ER:1.0>
        Console.WriteLine(2)
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub TryFinally_Update_Inner()
            Dim src1 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Finally
        End Try</ER:1.0>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try
            <AS:1>Goo()</AS:1>
        <ER:1.0>Finally
        End Try</ER:1.0>
        Console.WriteLine(2)
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Try_Update_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
            <AS:0>Console.WriteLine(1)</AS:0>
        Catch
        End Try
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
            <AS:0>Console.WriteLine(1)</AS:0>
        Catch e As IOException
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub TryFinally_DeleteStatement_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <AS:0>Console.WriteLine(0)</AS:0>
 
        Try
            <AS:1>Console.WriteLine(1)</AS:1>
        <ER:1.0>Finally
            Console.WriteLine(2)
        End Try</ER:1.0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        <AS:0>Console.WriteLine(0)</AS:0>
 
        <AS:1>Try</AS:1>
        Finally
            Console.WriteLine(2)
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Try", FeaturesResources.code))
        End Sub
 
        <Fact>
        Public Sub TryFinally_DeleteStatement_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <ER:0.0>Try
            Console.WriteLine(0)
        Finally
            <AS:0>Console.WriteLine(1)</AS:0>
        End Try</ER:0.0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try
            Console.WriteLine(0)
        <AS:0>Finally</AS:0>
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Finally", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub Try_DeleteStatement_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <AS:0>Console.WriteLine(0)</AS:0>
 
        Try
            <AS:1>Console.WriteLine(1)</AS:1>
        <ER:1.0>Finally
            Console.WriteLine(2)
        End Try</ER:1.0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        <AS:0>Console.WriteLine(0)</AS:0>
 
        <AS:1>Try</AS:1>
        Finally
            Console.WriteLine(2)
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Try", FeaturesResources.code))
        End Sub
 
        <Fact>
        Public Sub Try_DeleteStatement_Leaf()
            Dim src1 = "
Class C
    Sub Main()
 
        Try
            <AS:0>Console.WriteLine(1)</AS:0>
        Finally
            Console.WriteLine(2)
        End Try
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
 
        <AS:0>Try</AS:0>
        Finally
            Console.WriteLine(2)
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Catch_Add_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try
        Catch
            <AS:1>Goo()</AS:1>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Catch_Add_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        Catch 
            <AS:0>Console.WriteLine(1)</AS:0>
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Catch_Delete_Inner()
            Dim src1 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch 
            <AS:1>Goo()</AS:1></ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Goo()", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Catch_Delete_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>        
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0>Catch
            <AS:0>Console.WriteLine(1)</AS:0></ER:0.0>
        End Try
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Console.WriteLine(1)", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Catch_Update_Inner()
            Dim src1 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch
            <AS:1>Goo()</AS:1></ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch e As IOException
            <AS:1>Goo()</AS:1></ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Catch_Update_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0>Catch
            <AS:0>Console.WriteLine(1)</AS:0></ER:0.0>
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0>Catch e As IOException
            <AS:0>Console.WriteLine(1)</AS:0></ER:0.0>
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub CatchFilter_Update_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <AS:0>Goo()</AS:0>
    End Sub
 
    Sub Goo()
        Try
        <ER:1.0><AS:1>Catch e As IOException When Goo(1)</AS:1>
            Console.WriteLine(1)</ER:1.0>
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:0>Goo()</AS:0>
    End Sub
 
    Sub Goo()
        Try
        <ER:1.0><AS:1>Catch e As IOException When Goo(2)</AS:1>
            Console.WriteLine(1)</ER:1.0>
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Catch e As IOException When Goo(2)"),
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub CatchFilter_Update_Leaf1()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0><AS:0>Catch e As IOException When Goo(1)</AS:0>
            Console.WriteLine(1)</ER:0.0>
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0><AS:0>Catch e As IOException When Goo(2)</AS:0>
            Console.WriteLine(1)
        End Try</ER:0.0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub CatchFilter_Update_Leaf2()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0><AS:0>Catch e As IOException When Goo(1)</AS:0>
            Console.WriteLine(1)</ER:0.0>
        End Try
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        <ER:0.0><AS:0>Catch e As Exception When Goo(1)</AS:0>
            Console.WriteLine(1)
        End Try<ER:0.0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause))
        End Sub
 
        <Fact>
        Public Sub Finally_Add_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        Try
        Finally 
            <AS:1>Goo()</AS:1>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub Finally_Add_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        Try
        Finally 
            <AS:0>Console.WriteLine(1)</AS:0>
        End Try
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active, Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub Finally_Delete_Inner()
            Dim src1 = "
Class C
    Sub Main()
        <ER:1.0>Try
        Finally 
            <AS:1>Goo()</AS:1>
        End Try</ER:1.0>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Goo()", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub Finally_Delete_Leaf()
            Dim src1 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>        
    End Sub
 
    Sub Goo()
        <ER:0.0>Try
        Finally
            <AS:0>Console.WriteLine(1)</AS:0>
        End Try</ER:0.0>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        <AS:1>Goo()</AS:1>
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Console.WriteLine(1)", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub TryCatchFinally()
            Dim src1 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch e As IOException
            Try
                Try
                    Try
                        <AS:1>Goo()</AS:1>
                    Catch 
                    End Try
                Catch Exception
                End Try
            Finally
            End Try</ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch e As Exception
            Try
                Try
                Finally
                    Try
                        <AS:1>Goo()</AS:1>
                    Catch 
                    End Try
                End Try
            Catch e As Exception
            End Try</ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Catch", VBFeaturesResources.Catch_clause),
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Try", VBFeaturesResources.Try_block),
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Goo()", VBFeaturesResources.Try_block),
                Diagnostic(RudeEditKind.InsertAroundActiveStatement, "Finally", VBFeaturesResources.Finally_clause))
        End Sub
 
        <Fact>
        Public Sub TryCatchFinally_Regions()
            Dim src1 = "
Class C
    Sub Main()
        Try
        <ER:1.0>Catch e As IOException
            Try
                Try
                    Try
                        <AS:1>Goo()</AS:1>
                    Catch 
                    End Try
                Catch e As Exception
                End Try
            Finally
            End Try</ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Try            
        <ER:1.0>Catch e As IOException
            Try : Try : Try : <AS:1>Goo()</AS:1> : Catch : End Try : Catch e As Exception : End Try : Finally : End Try</ER:1.0>
        End Try
    End Sub
 
    Sub Goo()
        <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Try_Lambda1()
            Dim src1 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f As Func(Of Integer, Integer) = Nothing
        Try
            f = Function(x) <AS:1>1 + Goo(x)</AS:1>
        Catch
        End Try
 
        <AS:2>Console.Write(f(2))</AS:2>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f As Func(Of Integer, Integer) = Nothing
        f = Function(x) <AS:1>1 + Goo(x)</AS:1>
        <AS:2>Console.Write(f(2))</AS:2>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Try_Lambda2()
            Dim src1 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f = Function(x) 
                    Try
                        <AS:1>Return 1 + Goo(x)</AS:1>
                    <ER:1.0>Catch
                    End Try</ER:1.0>
                End Function
 
        <AS:2>Console.Write(f(2))</AS:2>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f = Function(x) 
                     <AS:1>Return 1 + Goo(x)</AS:1>
                End Function
 
        <AS:2>Console.Write(f(2))</AS:2>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteAroundActiveStatement, "Return 1 + Goo(x)", VBFeaturesResources.Try_block))
        End Sub
 
        <Fact>
        Public Sub Try_Query_Join1()
            Dim src1 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Try
            q = From x In xs
                Join y In ys On <AS:1>F()</AS:1> Equals G()
                Select 1
        Catch
        End Try
 
        <AS:2>q.ToArray()</AS:2>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        q = From x In xs
            Join y In ys On <AS:1>F()</AS:1> Equals G()
            Select 1
 
        <AS:2>q.ToArray()</AS:2>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ComplexQueryExpression, "Join", FeaturesResources.method))
        End Sub
 
        <Fact>
        Public Sub Try_Query_Join2()
            Dim src1 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f = Sub()
                    Try
                        Dim q = From x In xs
                                Join y In ys On <AS:1>F()</AS:1> Equals G()
                                Select 1
                    Catch
                    End Try
 
                    <AS:2>q.ToArray()</AS:2>
                End Sub
    End Sub
End Class
"
            Dim src2 = "
Class C
    Function Goo(x As Integer) As Integer
        <AS:0>Return 1</AS:0>
    End Function
 
    Sub Main()
        Dim f = Sub()
                    Dim q = From x In xs
                            Join y In ys On <AS:1>F()</AS:1> Equals G()
                            Select 1
 
                    <AS:2>q.ToArray()</AS:2>
                End Sub
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ComplexQueryExpression, "Join", FeaturesResources.method))
        End Sub
#End Region
 
#Region "Lambdas"
        <Fact>
        Public Sub Lambdas_SingleLineToMultiLine1()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a) <AS:0>1</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0>
                    Return 1
                End Function
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Lambdas_SingleLineToMultiLine2()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0> 1
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0>
                    Return 1
                End Function
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Lambdas_MultiLineToSingleLine1()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a)
                    <AS:0>Return 1</AS:0>
                End Function
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0> 1
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Lambdas_MultiLineToSingleLine2()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0>
                    Return 1
                End Function
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0> 1
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Lambdas_MultiLineToSingleLine3()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a)
                    Return 1
                <AS:0>End Function</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(a)</AS:0> 1
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub Lambdas_ActiveStatementRemoved1()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a)
            Return Function(b) <AS:0>b</AS:0>
        End Function
 
        Dim z = f(1)
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(b)</AS:0>  b
 
        Dim z = f
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Function(b)", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub Lambdas_ActiveStatementRemoved2()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a) Function(b) <AS:0>b</AS:0>
 
        Dim z = f(1)
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim f = <AS:0>Function(b)</AS:0> b
 
        Dim z = f
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Function(b)", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub Lambdas_ActiveStatementRemoved3()
            Dim src1 = "
Class C
    Sub Main()
        Dim f = Function(a)
            Dim z As Func(Of Integer, Integer)
 
            F(Function(b)
                <AS:0>Return b</AS:0>
            End Function, z)
 
            Return z
        End Function
 
        Dim z = f(1)
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        Dim f = Function(b)
            <AS:0>F(b)</AS:0>
 
            Return 1
        End Function
 
        Dim z = f
        <AS:1>z(2)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "F(b)", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub Lambdas_ActiveStatementRemoved4()
            Dim src1 = "
Class C
    Shared Sub Main()
        Dim f = Function(a)
            <AS:1>z(2)</AS:1>
 
            return Function (b)
                <AS:0>Return b</AS:0>
            End Function
        End Function
    End Sub
End Class"
            Dim src2 = "
Class C
    <AS:0,1>Shared Sub Main()</AS:0,1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", VBFeaturesResources.Lambda),
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "Shared Sub Main()", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub Queries_ActiveStatementRemoved_WhereClause()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a In b Where <AS:0>b.goo</AS:0> Select b.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select b.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Where_clause))
        End Sub
 
        <Fact, WorkItem("http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/841361")>
        Public Sub Queries_ActiveStatementRemoved_LetClause()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a In b Let x = <AS:0>a.goo</AS:0> Select x
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
 
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select x
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
 
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Let_clause))
        End Sub
 
        <Fact>
        Public Sub Queries_ActiveStatementRemoved_JoinClauseLeft()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a In b
                Join c In d On <AS:0>a.goo</AS:0> Equals c.bar
                Select a.bar
 
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select a.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Join_condition))
        End Sub
 
        <Fact>
        Public Sub Queries_ActiveStatementRemoved_OrderBy1()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a In b
                Order By <AS:0>a.x</AS:0>, a.y Descending, a.z Ascending
                Select a
 
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select a.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Ordering_clause))
        End Sub
 
        <Fact>
        Public Sub Queries_ActiveStatementRemoved_OrderBy2()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a in b
                Order By a.x, <AS:0>a.y</AS:0> Descending, a.z Ascending
                Select a
 
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select a.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Ordering_clause))
        End Sub
 
        <Fact>
        Public Sub Queries_ActiveStatementRemoved_OrderBy3()
            Dim src1 = "
Class C
    Sub Main()
        Dim s = From a in b
                Order By a.x, a.y Descending, <AS:0>a.z</AS:0> Ascending
                Select a
 
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main()
        Dim s = <AS:0>From</AS:0> a In b Select a.bar
        <AS:1>s.ToArray()</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementLambdaRemoved, "From", VBFeaturesResources.Ordering_clause))
        End Sub
 
        <Fact>
        Public Sub MisplacedActiveStatement1()
            Dim src1 = "
<AS:1>Class C</AS:1>
    Function F(a As Integer) As Integer
        <AS:0>Return a</AS:0> 
        <AS:2>Return a</AS:2> 
    End Function
End Class
"
            Dim src2 = "
Class C
    Function F(a As Integer) As Integer
        <AS:0>return a</AS:0> 
        <AS:2>return a</AS:2> 
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub MisplacedActiveStatement2()
            Dim src1 = "
Class C
    <AS:0><Attr></AS:0>
    Shared Sub Main()
    End Sub
End Class"
            Dim src2 = "
Class C
    <Attr>
    <AS:0>Shared Sub Main()</AS:0>
    End Sub
End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub MisplacedTrackingSpan1()
            Dim src1 = "
Class C
    <AS:0><Attr></AS:0>
    Shared Sub Main()
    End Sub
End Class"
            Dim src2 = "
Class C
    <TS:0><Attr></TS:0>
    <AS:0>Shared Sub Main()</AS:0>
    End Sub
End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub MisplacedTrackingSpan2()
            Dim src1 = "
Class C
    Dim f = <AS:0>1</AS:0>
End Class"
            Dim src2 = "
Class C
    <TS:0>Dim</TS:0> <AS:0>f = 1</AS:0>
End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub MisplacedTrackingSpan3()
            Dim src1 = "
Class C
    Dim <AS:0>f</AS:0>, g As New C()
End Class"
            Dim src2 = "
Class C
    <TS:0>Dim</TS:0> <AS:0>f</AS:0>, g As New C()
End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub MisplacedTrackingSpan4()
            Dim src1 = "
Class C
    <AS:0>Property</AS:0> f As New C()
End Class"
            Dim src2 = "
Class C
    <TS:0>Property</TS:0> <AS:0>f As New C()</AS:0>
End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/1359")>
        Public Sub Lambdas_LeafEdits_GeneralStatement()
            Dim src1 = "
Class C
    Sub Main() 
        <AS:1>F(Function(a) <AS:0>1</AS:0>)</AS:1>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main() 
        <AS:1>F(Function(a) <AS:0>2</AS:0>)</AS:1>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact, WorkItem("https://github.com/dotnet/roslyn/issues/1359")>
        Public Sub Lambdas_LeafEdits_NestedLambda()
            Dim src1 = "
Class C
    Sub Main() 
        <AS:2>F(Function(b) <AS:1>F(Function(a) <AS:0>1</AS:0>)</AS:1>)</AS:2>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Sub Main() 
        <AS:2>F(Function(b) <AS:1>G(Function(a) <AS:0>1</AS:0>)</AS:1>)</AS:2>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "G(Function(a)       1       )"))
        End Sub
 
#End Region
 
#Region "State Machines"
        <Fact>
        Public Sub MethodToIteratorMethod_WithActiveStatement()
            Dim src1 = "
Imports System
Imports System.Collections.Generic
Class C
    Function F() As IEnumerable(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Return {1, 1}
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Yield 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                 Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Iterator Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToIteratorMethod_WithActiveStatement_NoYield()
            Dim src1 = "
Imports System
Imports System.Collections.Generic
Class C
    Function F() As IEnumerable(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Iterator Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToIteratorMethod_WithActiveStatementInLambda()
            Dim src1 = "
Imports System
Imports System.Collections.Generic
Class C
    Function F() As IEnumerable(Of Integer)
        Dim a = Sub() <AS:0>Console.WriteLine(1)</AS:0>
        a()
        Return {1, 1}
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Dim a = Sub() <AS:0>Console.WriteLine(1)</AS:0>
        a()
        Yield 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(
                active,
                capabilities:=EditAndContinueCapabilities.NewTypeDefinition)
        End Sub
 
        <Fact>
        Public Sub MethodToIteratorMethod_WithoutActiveStatement()
            Dim src1 = "
Imports System
Imports System.Collections.Generic
Class C
    Function F() As IEnumerable(Of Integer)
        Console.WriteLine(1)
        Return {1, 1}
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Console.WriteLine(1)
        Yield 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(
                active,
                capabilities:=EditAndContinueCapabilities.NewTypeDefinition)
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatement1()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Function F() As Task(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Return Await Task.FromResult(1)
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatement2()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    <AS:0>Function F() As Task(Of Integer)</AS:0>
        Console.WriteLine(1)
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    <AS:0>Async Function F() As Task(Of Integer)</AS:0>
        Console.WriteLine(1)
        Return 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatement3()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Function F() As Task(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        <AS:0>Console.WriteLine(1)</AS:0>
        Return 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatementInLambda1()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Function F() As Task(Of Integer)
        Dim a = Sub() <AS:0>Console.WriteLine(1)</AS:0>
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        Dim a = Sub() <AS:0>Console.WriteLine(1)</AS:0>
        Return Await Task.FromResult(1)
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(
                active,
                capabilities:=EditAndContinueCapabilities.NewTypeDefinition)
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatementInLambda2()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Function F() As Task(Of Integer)
        Dim a = Sub() <AS:1>Console.WriteLine(1)</AS:1>
        <AS:0>a()</AS:0>
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        Dim a = Sub() <AS:1>Console.WriteLine(1)</AS:1>
        <AS:0>a()</AS:0>
        Return 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function F()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatementInLambda3()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim a = Sub() <AS:0>Console.WriteLine(1)</AS:0>
        Return
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Sub F()
        Dim a = Async Sub() <AS:0>Console.WriteLine(1)</AS:0>
        Return
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Sub()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithActiveStatementInLambda4()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim a = Function() <AS:0>Task.FromResult(1)</AS:0>
        Return
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Sub F()
        Dim a = Async Function() <AS:0>1</AS:0>
        Return
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function()"))
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithoutActiveStatement1()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Function F() As Task(Of Integer)
        Console.WriteLine(1)
        Return Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        Console.WriteLine(1)
        Return Await Task.FromResult(1)
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(
                active,
                capabilities:=EditAndContinueCapabilities.NewTypeDefinition)
        End Sub
 
        <Fact>
        Public Sub MethodToAsyncMethod_WithoutActiveStatement2()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Console.WriteLine(1)
        Return
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Sub F()
        Console.WriteLine(1)
        Return
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub LambdaToAsyncLambda_WithActiveStatement_NoAwait()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Sub() <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Async Sub() <AS:0>Console.WriteLine(1)</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Sub()"))
        End Sub
 
        <Fact>
        Public Sub LambdaToAsyncLambda_WithActiveStatement_NoAwait_Nested1()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Function(a) <AS:0>Task.FromResult(Function(b) 1)</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Async Function(a) <AS:0>Function(b) 1</AS:0>
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            ' Rude edit since the AS is within the outer function.
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Async Function(a)"))
        End Sub
 
        <Fact>
        Public Sub LambdaToAsyncLambda_WithActiveStatement_NoAwait_Nested2()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Function(a) Task.FromResult(<AS:0>Function(b)</AS:0> a + b)
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Sub F()
        Dim f = Async Function(a) <AS:0>Function(b)</AS:0> a + b
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            ' No rude edit since the AS is within the nested function.
            edits.VerifySemanticDiagnostics(active)
        End Sub
 
        <Fact>
        Public Sub LambdaToIteratorLambda_WithActiveStatement_NoYield()
            Dim src1 = "
Class C
    Function G() As IEnumerable(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = Function() <AS:0>G()</AS:0>
    End Sub
End Class
"
            Dim src2 = "
Class C
    Function G() As IEnumerable(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = <AS:0>Iterator Function() As IEnumerable(Of Integer)</AS:0>
                  G()
                End Function
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdatingStateMachineMethodAroundActiveStatement, "Iterator Function() As IEnumerable(Of Integer)"))
        End Sub
 
        <Fact>
        Public Sub AsyncLambdaToLambda_WithoutActiveStatement_NoAwait()
            Dim src1 = "
Class C
    Shared Function G() As Task(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = Async Function() As Task(Of Integer)
                End Function
    End Sub
End Class
"
            Dim src2 = "
Class C
    Shared Function G() As Task(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = Function() As Task(Of Integer)
                  Return G()
                End Function
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ChangingFromAsynchronousToSynchronous, "Function() As Task(Of Integer)", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub IteratorLambdaToLambda_WithoutActiveStatement_NoYield()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Shared Function G() As IEnumerable(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = Iterator Function() As IEnumerable(Of Integer)
                End Function
    End Sub
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Shared Function G() As IEnumerable(Of Integer)
        Return Nothing
    End Function
 
    Sub F()
        Dim f = Function() As IEnumerable(Of Integer)
                  Return G()
                End Function
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.ModifiersUpdate, "Function() As IEnumerable(Of Integer)", VBFeaturesResources.Lambda))
        End Sub
 
        <Fact>
        Public Sub AsyncMethodEdit_Semantics()
            Dim src1 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        Console.WriteLine(1)
        Await Task.FromResult(1)
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Threading.Tasks
Class C
    Async Function F() As Task(Of Integer)
        Console.WriteLine(2)
        Await Task.FromResult(1)
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
 
            edits.VerifySemanticDiagnostics()
        End Sub
 
        <Fact>
        Public Sub IteratorMethodEdit_Semantics()
            Dim src1 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Console.WriteLine(1)
        Yield 1
    End Function
End Class
"
            Dim src2 = "
Imports System
Imports System.Collections.Generic
Class C
    Iterator Function F() As IEnumerable(Of Integer)
        Console.WriteLine(2)
        Yield 1
    End Function
End Class
"
            Dim edits = GetTopEdits(src1, src2)
 
            edits.VerifySemanticDiagnostics()
        End Sub
#End Region
 
#Region "On Error"
        <Fact>
        Public Sub MethodUpdate_OnError1()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "label : <AS:0>Console.Write(1)</AS:0> : On Error GoTo label : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "label : <AS:0>Console.Write(2)</AS:0> : On Error GoTo label : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo label", VBFeaturesResources.On_Error_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_OnError2()
            Dim src1 = "Class C" & vbLf & "<AS:0>Sub M()</AS:0>" & vbLf & "Console.Write(1) : On Error GoTo 0 : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "<AS:0>Sub M()</AS:0>" & vbLf & "Console.Write(2) : On Error GoTo 0 : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo 0", VBFeaturesResources.On_Error_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_OnError3()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : <AS:0>On Error GoTo -1</AS:0> : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : <AS:0>On Error GoTo -1</AS:0> : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error GoTo -1", VBFeaturesResources.On_Error_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_OnError4()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : On Error Resume Next : <AS:0>End Sub</AS:0> : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : On Error Resume Next : <AS:0>End Sub</AS:0> : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "On Error Resume Next", VBFeaturesResources.On_Error_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_Resume1()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : <AS:0>Resume</AS:0> : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : <AS:0>Resume</AS:0> : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume", VBFeaturesResources.Resume_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_Resume2()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(1) : <AS:0>Resume Next</AS:0> : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "Console.Write(2) : <AS:0>Resume Next</AS:0> : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume Next", VBFeaturesResources.Resume_statement))
        End Sub
 
        <Fact>
        Public Sub MethodUpdate_Resume3()
            Dim src1 = "Class C" & vbLf & "Sub M()" & vbLf & "<AS:0>label :</AS:0> Console.Write(1) : Resume label : End Sub : End Class"
            Dim src2 = "Class C" & vbLf & "Sub M()" & vbLf & "<AS:0>label :</AS:0> Console.Write(2) : Resume label : End Sub : End Class"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2)
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.UpdateAroundActiveStatement, "Resume label", VBFeaturesResources.Resume_statement))
        End Sub
#End Region
 
        <Fact>
        Public Sub PartiallyExecutedActiveStatement()
            Dim src1 As String = "
Class C
    Sub F()
        <AS:0>Console.WriteLine(1)</AS:0> 
        <AS:1>Console.WriteLine(2)</AS:1> 
        <AS:2>Console.WriteLine(3)</AS:2> 
        <AS:3>Console.WriteLine(4)</AS:3> 
        <AS:4>Console.WriteLine(5)</AS:4> 
    End Sub
End Class
"
            Dim src2 As String = "
Class C
    Sub F()
        <AS:0>Console.WriteLine(10)</AS:0> 
        <AS:1>Console.WriteLine(20)</AS:1> 
        <AS:2>Console.WriteLine(30)</AS:2> 
        <AS:3>Console.WriteLine(40)</AS:3> 
        <AS:4>Console.WriteLine(50)</AS:4> 
    End Sub
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2,
            {
                ActiveStatementFlags.PartiallyExecuted Or ActiveStatementFlags.LeafFrame,
                ActiveStatementFlags.PartiallyExecuted Or ActiveStatementFlags.NonLeafFrame,
                ActiveStatementFlags.LeafFrame,
                ActiveStatementFlags.NonLeafFrame,
                ActiveStatementFlags.NonLeafFrame Or ActiveStatementFlags.LeafFrame
            })
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.PartiallyExecutedActiveStatementUpdate, "Console.WriteLine(10)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Console.WriteLine(20)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Console.WriteLine(40)"),
                Diagnostic(RudeEditKind.ActiveStatementUpdate, "Console.WriteLine(50)"))
        End Sub
 
        <Fact>
        Public Sub PartiallyExecutedActiveStatement_Delete1()
            Dim src1 As String = "
Class C
    Sub F()
        <AS:0>Console.WriteLine(1)</AS:0> 
    End Sub
End Class
"
            Dim src2 As String = "
Class C
    Sub F()
    <AS:0>End Sub</AS:0> 
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2, {ActiveStatementFlags.PartiallyExecuted Or ActiveStatementFlags.LeafFrame})
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.PartiallyExecutedActiveStatementDelete, "Sub F()", FeaturesResources.code))
        End Sub
 
        <Fact>
        Public Sub PartiallyExecutedActiveStatement_Delete2()
            Dim src1 As String = "
Class C
    Sub F()
        <AS:0>Console.WriteLine(1)</AS:0> 
    End Sub
End Class
"
            Dim src2 As String = "
Class C
    Sub F()
    <AS:0>End Sub</AS:0> 
End Class
"
            Dim edits = GetTopEdits(src1, src2)
            Dim active = GetActiveStatements(src1, src2, {ActiveStatementFlags.NonLeafFrame Or ActiveStatementFlags.LeafFrame})
 
            edits.VerifySemanticDiagnostics(active,
                Diagnostic(RudeEditKind.DeleteActiveStatement, "Sub F()", FeaturesResources.code))
        End Sub
    End Class
End Namespace