提交 06aa0c3d 编写于 作者: D David Barbet

Fix check to look at inherited types as well.

上级 235a19f4
...@@ -1363,7 +1363,7 @@ End Module ...@@ -1363,7 +1363,7 @@ End Module
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)> <Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")> <WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryPredefinedCastWithGetType() As Task Public Async Function TestDontRemoveNecessaryStringPredefinedCastWithGetType() As Task
Dim markup = Dim markup =
<File> <File>
Module Program Module Program
...@@ -1378,7 +1378,37 @@ End Module ...@@ -1378,7 +1378,37 @@ End Module
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)> <Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")> <WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryCTypeCastWithGetType() As Task Public Async Function TestDontRemoveNecessaryWideningPredefinedCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CLng(a).GetType()|]
End Sub
End Module
</File>
Await TestMissingAsync(markup)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryNarrowingPredefinedCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CByte(a).GetType()|]
End Sub
End Module
</File>
Await TestMissingAsync(markup)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryStringCTypeCastWithGetType() As Task
Dim markup = Dim markup =
<File> <File>
Module Program Module Program
...@@ -1391,6 +1421,174 @@ End Module ...@@ -1391,6 +1421,174 @@ End Module
Await TestMissingAsync(markup) Await TestMissingAsync(markup)
End Function End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryWideningCTypeCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CType(a, Long).GetType()|]
End Sub
End Module
</File>
Await TestMissingAsync(markup)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryNarrowingCTypeCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CType(a, Byte).GetType()|]
End Sub
End Module
</File>
Await TestMissingAsync(markup)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryUserDefinedCTypeCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CType(a, WeirdInt).GetType()|]
End Sub
Public Class WeirdInt
Private val As Integer
Public Sub New(ByVal b As Integer)
Me.val = b
End Sub
Public Shared Widening Operator CType(ByVal d As WeirdInt) As Integer
Return d.val
End Operator
Public Shared Narrowing Operator CType(ByVal i As Integer) As WeirdInt
Return New WeirdInt(i)
End Operator
End Class
End Module
</File>
Await TestMissingAsync(markup)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestRemoveUnnecessaryCTypeCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|CType(a, Object).GetType()|]
End Sub
End Module
</File>
Dim expected =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = a.GetType()
End Sub
End Module
</File>
Await TestAsync(markup, expected)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestRemoveUnnecessaryInheritedCTypeCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a As BaseClass
a = New DerivedClass()
Dim b = [|CType(a, BaseClass).GetType()|]
End Sub
Public Class BaseClass
End Class
Public Class DerivedClass : Inherits BaseClass
End Class
End Module
</File>
Dim expected =
<File>
Module Program
Sub Main()
Dim a As BaseClass
a = New DerivedClass()
Dim b = a.GetType()
End Sub
Public Class BaseClass
End Class
Public Class DerivedClass : Inherits BaseClass
End Class
End Module
</File>
Await TestAsync(markup, expected)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestRemoveUnnecessaryDirectCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|DirectCast(a, Object).GetType()|]
End Sub
End Module
</File>
Dim expected =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = a.GetType()
End Sub
End Module
</File>
Await TestAsync(markup, expected)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestRemoveUnnecessaryTryCastWithGetType() As Task
Dim markup =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = [|TryCast(a, Object).GetType()|]
End Sub
End Module
</File>
Dim expected =
<File>
Module Program
Sub Main()
Dim a = 2
Dim b = a.GetType()
End Sub
End Module
</File>
Await TestAsync(markup, expected)
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)> <Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")> <WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryPredefinedCastWithToString() As Task Public Async Function TestDontRemoveNecessaryPredefinedCastWithToString() As Task
......
...@@ -540,8 +540,10 @@ private bool ReplacementBreaksSystemObjectMethodResolution(SyntaxNode currentOri ...@@ -540,8 +540,10 @@ private bool ReplacementBreaksSystemObjectMethodResolution(SyntaxNode currentOri
{ {
var previousOriginalType = this.OriginalSemanticModel.GetTypeInfo(previousOriginalNode).Type; var previousOriginalType = this.OriginalSemanticModel.GetTypeInfo(previousOriginalNode).Type;
var previousReplacedType = this.SpeculativeSemanticModel.GetTypeInfo(previousReplacedNode).Type; var previousReplacedType = this.SpeculativeSemanticModel.GetTypeInfo(previousReplacedNode).Type;
if (previousReplacedType != null && previousOriginalType != null)
return !Equals(previousOriginalType, previousReplacedType); {
return !previousReplacedType.InheritsFromOrEquals(previousOriginalType);
}
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册