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

Fix check to look at inherited types as well.

上级 235a19f4
......@@ -1363,7 +1363,7 @@ End Module
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryPredefinedCastWithGetType() As Task
Public Async Function TestDontRemoveNecessaryStringPredefinedCastWithGetType() As Task
Dim markup =
<File>
Module Program
......@@ -1378,7 +1378,37 @@ End Module
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)>
<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 =
<File>
Module Program
......@@ -1391,6 +1421,174 @@ End Module
Await TestMissingAsync(markup)
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)>
<WorkItem(32399, "https://github.com/dotnet/roslyn/issues/32399")>
Public Async Function TestDontRemoveNecessaryPredefinedCastWithToString() As Task
......
......@@ -540,8 +540,10 @@ private bool ReplacementBreaksSystemObjectMethodResolution(SyntaxNode currentOri
{
var previousOriginalType = this.OriginalSemanticModel.GetTypeInfo(previousOriginalNode).Type;
var previousReplacedType = this.SpeculativeSemanticModel.GetTypeInfo(previousReplacedNode).Type;
return !Equals(previousOriginalType, previousReplacedType);
if (previousReplacedType != null && previousOriginalType != null)
{
return !previousReplacedType.InheritsFromOrEquals(previousOriginalType);
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册