提交 d5562d50 编写于 作者: D David Poeschl

Don't crash when renaming a method to Finalize

(and there's a destructor present)

Fixes https://github.com/dotnet/roslyn/issues/16567
上级 11eb6955
......@@ -3585,6 +3585,31 @@ partial class {|current:$$C|} { }
result.AssertLabeledSpansAre("current", type:=RelatedLocationType.NoConflict)
End Using
End Sub
<Fact>
<Trait(Traits.Feature, Traits.Features.Rename)>
<WorkItem(16567, "https://github.com/dotnet/roslyn/issues/16567")>
Public Sub RenameMethodToFinalizeWithDestructorPresent()
Using result = RenameEngineResult.Create(_outputHelper,
<Workspace>
<Project Language="C#" CommonReferences="true">
<Document>
class C
{
~{|Conflict:C|}() { }
void $$[|M|]()
{
int x = 7;
int y = ~x;
}
}
</Document>
</Project>
</Workspace>, renameTo:="Finalize")
result.AssertLabeledSpansAre("Conflict", type:=RelatedLocationType.UnresolvedConflict)
End Using
End Sub
End Class
End Namespace
......@@ -215,7 +215,8 @@ public override SyntaxToken VisitToken(SyntaxToken token)
isRenameLocation ||
token.ValueText == _replacementText ||
isOldText ||
_possibleNameConflicts.Contains(token.ValueText);
_possibleNameConflicts.Contains(token.ValueText) ||
IsPossiblyDestructorConflict(token, _replacementText);
if (tokenNeedsConflictCheck)
{
......@@ -230,6 +231,13 @@ public override SyntaxToken VisitToken(SyntaxToken token)
return newToken;
}
private bool IsPossiblyDestructorConflict(SyntaxToken token, string replacementText)
{
return _replacementText == "Finalize" &&
token.IsKind(SyntaxKind.IdentifierToken) &&
token.Parent.IsKind(SyntaxKind.DestructorDeclaration);
}
private SyntaxNode Complexify(SyntaxNode originalNode, SyntaxNode newNode)
{
_isProcessingComplexifiedSpans = true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册