提交 208574a0 编写于 作者: A Anthony D. Green

Revert "Implement data flow analysis for interpolated expressions."

This reverts commit 2037411c.
上级 2037411c
...@@ -2528,19 +2528,6 @@ lUnsplitAndFinish: ...@@ -2528,19 +2528,6 @@ lUnsplitAndFinish:
Visit(node.Expression) Visit(node.Expression)
Return Nothing Return Nothing
End Function End Function
Public Overrides Function VisitInterpolatedStringExpression(node As BoundInterpolatedStringExpression) As BoundNode
For Each item In node.Contents
Visit(item)
Next
Return Nothing
End Function
Public Overrides Function VisitInterpolation(node As BoundInterpolation) As BoundNode
Visit(node.Expression)
Return Nothing
End Function
#End Region #End Region
End Class End Class
......
...@@ -1139,151 +1139,6 @@ BC30491: Expression does not produce a value. ...@@ -1139,151 +1139,6 @@ BC30491: Expression does not produce a value.
End Sub End Sub
<Fact>
Public Sub FlowAnalysis_Warning_InterpoledVariableUsedBeforeBeingAssigned()
Dim compilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(
<compilation>
<%= _formattableStringSource %>
<file name="a.vb">
Imports System
Imports System.Console
Module Program
Sub Main()
Dim v As Object
Write($"{v}")
End Sub
End Module
</file>
</compilation>)
AssertTheseCompileDiagnostics(compilation,
<expected>
BC42104: Variable 'v' is used before it has been assigned a value. A null reference exception could result at runtime.
Write($"{v}")
~
</expected>)
End Sub
<Fact>
Public Sub FlowAnalysis_InterpolatedLocalConstNotConsideredUnused()
Dim compilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(
<compilation>
<%= _formattableStringSource %>
<file name="a.vb">
Imports System
Imports System.Console
Module Program
Sub Main()
Const v As Object = Nothing
Write($"{v}")
End Sub
End Module
</file>
</compilation>)
AssertNoDiagnostics(compilation)
End Sub
<Fact>
Public Sub FlowAnalysis_AnalyzeDataFlowReportsCorrectResultsForVariablesUsedInInterpolations()
Dim compilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(
<compilation>
<%= _formattableStringSource %>
<file name="a.vb">
Imports System
Imports System.Console
Module Program
Sub Main()
Dim v As Object = Nothing
Write($"Expression {v} is not a value.")
WriteLine(v)
End Sub
End Module
</file>
</compilation>)
AssertNoDiagnostics(compilation)
Dim mainTree = Aggregate t In compilation.SyntaxTrees Where t.FilePath = "a.vb" Into [Single]()
Dim root = mainTree.GetRoot()
Dim sm = compilation.GetSemanticModel(mainTree)
Dim vSymbol = CType(sm.GetDeclaredSymbol(root.DescendantNodes().OfType(Of ModifiedIdentifierSyntax).Single()), ILocalSymbol)
Dim analysis = sm.AnalyzeDataFlow(root.DescendantNodes().OfType(Of ExpressionStatementSyntax).First())
Assert.True(analysis.Succeeded)
Assert.DoesNotContain(vSymbol, analysis.AlwaysAssigned)
Assert.DoesNotContain(vSymbol, analysis.Captured)
Assert.Contains(vSymbol, analysis.DataFlowsIn)
Assert.DoesNotContain(vSymbol, analysis.DataFlowsOut)
Assert.Contains(vSymbol, analysis.ReadInside)
Assert.Contains(vSymbol, analysis.ReadOutside)
Assert.DoesNotContain(vSymbol, analysis.UnsafeAddressTaken)
Assert.DoesNotContain(vSymbol, analysis.VariablesDeclared)
Assert.DoesNotContain(vSymbol, analysis.WrittenInside)
Assert.Contains(vSymbol, analysis.WrittenOutside)
End Sub
<Fact>
Public Sub FlowAnalysis_AnalyzeDataFlowReportsCorrectResultsForVariablesCapturedInInterpolations()
Dim compilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(
<compilation>
<%= _formattableStringSource %>
<file name="a.vb">
Imports System
Imports System.Console
Module Program
Sub Main()
Dim v As Object = Nothing
Write($"Expression {(Function() v)()} is not a value.")
WriteLine(v)
End Sub
End Module
</file>
</compilation>)
AssertNoDiagnostics(compilation)
Dim mainTree = Aggregate t In compilation.SyntaxTrees Where t.FilePath = "a.vb" Into [Single]()
Dim root = mainTree.GetRoot()
Dim sm = compilation.GetSemanticModel(mainTree)
Dim vSymbol = CType(sm.GetDeclaredSymbol(root.DescendantNodes().OfType(Of ModifiedIdentifierSyntax).Single()), ILocalSymbol)
Dim analysis = sm.AnalyzeDataFlow(root.DescendantNodes().OfType(Of ExpressionStatementSyntax).First())
Assert.True(analysis.Succeeded)
Assert.DoesNotContain(vSymbol, analysis.AlwaysAssigned)
Assert.Contains(vSymbol, analysis.Captured)
Assert.Contains(vSymbol, analysis.DataFlowsIn)
Assert.DoesNotContain(vSymbol, analysis.DataFlowsOut)
Assert.Contains(vSymbol, analysis.ReadInside)
Assert.Contains(vSymbol, analysis.ReadOutside)
Assert.DoesNotContain(vSymbol, analysis.UnsafeAddressTaken)
Assert.DoesNotContain(vSymbol, analysis.VariablesDeclared)
Assert.DoesNotContain(vSymbol, analysis.WrittenInside)
Assert.Contains(vSymbol, analysis.WrittenOutside)
End Sub
<Fact> <Fact>
Public Sub Lowering_MissingFormattableStringDoesntProduceErrorIfFactoryMethodReturnsTypeConvertableToIFormattable() Public Sub Lowering_MissingFormattableStringDoesntProduceErrorIfFactoryMethodReturnsTypeConvertableToIFormattable()
......
...@@ -112,20 +112,6 @@ NewLines("Module M \n Sub Main() \n Dim x = 0 \n Do While [|x * x < 100|] \n x + ...@@ -112,20 +112,6 @@ NewLines("Module M \n Sub Main() \n Dim x = 0 \n Do While [|x * x < 100|] \n x +
NewLines("Module M \n Sub Main() \n Dim x = 0 \n Do While {|Rename:NewMethod|}(x) \n x += 1 \n Loop \n End Sub \n Private Function NewMethod(x As Integer) As Boolean \n Return x * x < 100 \n End Function \n End Module")) NewLines("Module M \n Sub Main() \n Dim x = 0 \n Do While {|Rename:NewMethod|}(x) \n x += 1 \n Loop \n End Sub \n Private Function NewMethod(x As Integer) As Boolean \n Return x * x < 100 \n End Function \n End Module"))
End Sub End Sub
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)>
Public Sub TestInInterpolation1()
Test(
NewLines("Module M \n Sub Main() \n Dim v As New Object \n [|System.Console.WriteLine($""{v}"")|] \n System.Console.WriteLine(v) \n End Sub \n End Module"),
NewLines("Module M \n Sub Main() \n Dim v As New Object \n {|Rename:NewMethod|}(v) \n System.Console.WriteLine(v) \n End Sub \n Private Sub NewMethod(v As Object) \n System.Console.WriteLine($""{v}"") \n End Sub \n End Module"))
End Sub
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)>
Public Sub TestInInterpolation2()
Test(
NewLines("Module M \n Sub Main() \n Dim v As New Object \n System.Console.WriteLine([|$""{v}""|]) \n System.Console.WriteLine(v) \n End Sub \n End Module"),
NewLines("Module M \n Sub Main() \n Dim v As New Object \n System.Console.WriteLine({|Rename:NewMethod|}(v)) \n System.Console.WriteLine(v) \n End Sub \n Private Function NewMethod(v As Object) As Object \n Return $""{v}"" \n End Function \n End Module"))
End Sub
<WorkItem(545829)> <WorkItem(545829)>
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)> <Fact, Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)>
Public Sub TestMissingOnImplicitMemberAccess() Public Sub TestMissingOnImplicitMemberAccess()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册