diff --git a/src/EditorFeatures/CSharpTest/Diagnostics/RemoveUnnecessaryCast/RemoveUnnecessaryCastTests.cs b/src/EditorFeatures/CSharpTest/Diagnostics/RemoveUnnecessaryCast/RemoveUnnecessaryCastTests.cs index 16dc70616022e009b15b0658fe3d9642d53133bc..1416a6708acd5fa0097c8a2e7d8ccd97cf7d89db 100644 --- a/src/EditorFeatures/CSharpTest/Diagnostics/RemoveUnnecessaryCast/RemoveUnnecessaryCastTests.cs +++ b/src/EditorFeatures/CSharpTest/Diagnostics/RemoveUnnecessaryCast/RemoveUnnecessaryCastTests.cs @@ -4605,6 +4605,69 @@ public void Test() var a = new Apple(); ([|(Fruit)a|]).Properties[""Color""] = ""Red""; } +}"); + } + + [WorkItem(31963, "https://github.com/dotnet/roslyn/issues/31963")] + [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)] + public async Task DontOfferToRemoveCastInConstructorWhenItNeeded() + { + await TestMissingInRegularAndScriptAsync(@" +class IntegerWrapper +{ + public IntegerWrapper(int value) + { + } +} +enum Goo +{ + First, + Second +} +class Tester +{ + public void Test() + { + var a = new IntegerWrapper([|(int)Goo.First|]); + } +}"); + } + + [WorkItem(31963, "https://github.com/dotnet/roslyn/issues/31963")] + [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)] + public async Task DontOfferToRemoveCastInBaseConstructorInitializerWhenItNeeded() + { + await TestMissingInRegularAndScriptAsync( +@" +class B +{ + B(int a) + { + } +} +class C : B +{ + C(double a) : base([|(int)a|]) + { + } +}"); + } + + [WorkItem(31963, "https://github.com/dotnet/roslyn/issues/31963")] + [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnnecessaryCast)] + public async Task DontOfferToRemoveCastInConstructorInitializerWhenItNeeded() + { + await TestMissingInRegularAndScriptAsync( +@" +class B +{ + B(int a) + { + } + + B(double a) : this([|(int)a|]) + { + } }"); } } diff --git a/src/Workspaces/CSharp/Portable/Utilities/SpeculationAnalyzer.cs b/src/Workspaces/CSharp/Portable/Utilities/SpeculationAnalyzer.cs index 0d8e88be2cefacbc9719119a3d0789b249d8e481..11b7d0946874abc15d6a3736ebd06e78c32a1e7a 100644 --- a/src/Workspaces/CSharp/Portable/Utilities/SpeculationAnalyzer.cs +++ b/src/Workspaces/CSharp/Portable/Utilities/SpeculationAnalyzer.cs @@ -510,10 +510,12 @@ private bool ReplacementBreaksCollectionInitializerAddMethod(ExpressionSyntax or protected override bool ExpressionMightReferenceMember(SyntaxNode node) { - return node.IsKind(SyntaxKind.InvocationExpression) || - node.IsKind(SyntaxKind.ElementAccessExpression) || - node.IsKind(SyntaxKind.SimpleMemberAccessExpression) || - node.IsKind(SyntaxKind.ImplicitElementAccess); + return node.IsKind( + SyntaxKind.InvocationExpression, + SyntaxKind.ElementAccessExpression, + SyntaxKind.SimpleMemberAccessExpression, + SyntaxKind.ImplicitElementAccess, + SyntaxKind.ObjectCreationExpression); } protected override ImmutableArray GetArguments(ExpressionSyntax expression)