Skip to content

Commit 1a1069d

Browse files
authored
Merge pull request #5864 from BZngr/5844_IntegrateReplaceRefRefactoringAction
2 parents a9a4f71 + 4824086 commit 1a1069d

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

Rubberduck.Refactorings/Rename/RenameCodeDefinedIdentifierRefactoringAction.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Rubberduck.Parsing.Rewriter;
77
using Rubberduck.Parsing.Symbols;
88
using Rubberduck.Parsing.VBA;
9+
using Rubberduck.Refactorings.ReplaceReferences;
910
using Rubberduck.VBEditor.ComManagement;
1011

1112
namespace Rubberduck.Refactorings.Rename
@@ -18,15 +19,18 @@ public class RenameCodeDefinedIdentifierRefactoringAction : CodeOnlyRefactoringA
1819
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1920
private readonly IProjectsProvider _projectsProvider;
2021
private readonly IDictionary<DeclarationType, Action<RenameModel, IRewriteSession>> _renameActions;
22+
private readonly ReplaceReferencesRefactoringAction _replaceReferencesRefactoringAction;
2123

2224
public RenameCodeDefinedIdentifierRefactoringAction(
2325
IDeclarationFinderProvider declarationFinderProvider,
26+
ReplaceReferencesRefactoringAction replaceReferencesRefactoringAction,
2427
IProjectsProvider projectsProvider,
2528
IRewritingManager rewritingManager)
2629
: base(rewritingManager)
2730
{
2831
_declarationFinderProvider = declarationFinderProvider;
2932
_projectsProvider = projectsProvider;
33+
_replaceReferencesRefactoringAction = replaceReferencesRefactoringAction;
3034

3135
_renameActions = new Dictionary<DeclarationType, Action<RenameModel, IRewriteSession>>
3236
{
@@ -172,21 +176,17 @@ private void RenameStandardElements(Declaration target, string newName, IRewrite
172176

173177
private void RenameReferences(Declaration target, string newName, IRewriteSession rewriteSession)
174178
{
175-
var modules = target.References
176-
.Where(reference =>
177-
reference.Context.GetText() != "Me"
178-
&& !reference.IsArrayAccess
179-
&& !reference.IsDefaultMemberAccess)
180-
.GroupBy(r => r.QualifiedModuleName);
179+
var replaceReferencesModel = new ReplaceReferencesModel()
180+
{
181+
ModuleQualifyExternalReferences = true
182+
};
181183

182-
foreach (var grouping in modules)
184+
foreach (var reference in target.References)
183185
{
184-
var rewriter = rewriteSession.CheckOutModuleRewriter(grouping.Key);
185-
foreach (var reference in grouping)
186-
{
187-
rewriter.Replace(reference.Context, newName);
188-
}
186+
replaceReferencesModel.AssignReferenceReplacementExpression(reference, newName);
189187
}
188+
189+
_replaceReferencesRefactoringAction.Refactor(replaceReferencesModel, rewriteSession);
190190
}
191191

192192
private void RenameDeclaration(Declaration target, string newName, IRewriteSession rewriteSession)

RubberduckTests/Refactoring/Rename/RenameTests.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Rubberduck.Refactorings.Exceptions.Rename;
2121
using Rubberduck.UI.Refactorings;
2222
using Rubberduck.VBEditor.Utility;
23+
using Rubberduck.Refactorings.ReplaceReferences;
2324

2425
namespace RubberduckTests.Refactoring.Rename
2526
{
@@ -2518,10 +2519,11 @@ MsgBox CStr(baz.bar)
25182519
RefactoringDialogResult.Execute);
25192520
}
25202521

2521-
[Test]
2522+
[TestCase("UserType", "Module1.NewUserType")]
2523+
[TestCase("Module1.UserType", "Module1.NewUserType")]
25222524
[Category("Refactorings")]
25232525
[Category("Rename")]
2524-
public void RenameRefactoring_RenamePublicUDT_ReferenceInDifferentModule()
2526+
public void RenameRefactoring_RenamePublicUDT_ReferenceInDifferentModule(string originalReference, string expectedReference)
25252527
{
25262528
var tdo = new RenameTestsDataObject(selectedIdentifier: "UserType", newName: "NewUserType");
25272529
var inputOutput = new RenameTestModuleDefinition("Module1", ComponentType.StandardModule)
@@ -2546,15 +2548,15 @@ End Type"
25462548
var otherModule = new RenameTestModuleDefinition("Module2", ComponentType.StandardModule)
25472549
{
25482550
Input =
2549-
@"Option Explicit
2551+
$@"Option Explicit
25502552
2551-
Private Sub DoSomething(baz As UserType)
2553+
Private Sub DoSomething(baz As {originalReference})
25522554
MsgBox CStr(baz.bar)
25532555
End Sub",
25542556
Expected =
2555-
@"Option Explicit
2557+
$@"Option Explicit
25562558
2557-
Private Sub DoSomething(baz As NewUserType)
2559+
Private Sub DoSomething(baz As {expectedReference})
25582560
MsgBox CStr(baz.bar)
25592561
End Sub"
25602562
};
@@ -3395,7 +3397,8 @@ protected override IRefactoring TestRefactoring(
33953397
{
33963398
var selectedDeclarationService = new SelectedDeclarationProvider(selectionService, state);
33973399
var componentRename = new RenameComponentOrProjectRefactoringAction(state, state?.ProjectsProvider, state, rewritingManager);
3398-
var otherRename = new RenameCodeDefinedIdentifierRefactoringAction(state, state?.ProjectsProvider, rewritingManager);
3400+
var replaceReferencesRefactoringAction = new ReplaceReferencesRefactoringAction(rewritingManager);
3401+
var otherRename = new RenameCodeDefinedIdentifierRefactoringAction(state, replaceReferencesRefactoringAction, state?.ProjectsProvider, rewritingManager);
33993402
var baseRefactoring = new RenameRefactoringAction(componentRename, otherRename);
34003403
return new RenameRefactoring(baseRefactoring, userInteraction, state, state?.ProjectsProvider, selectionService, selectedDeclarationService);
34013404
}

0 commit comments

Comments
 (0)