Skip to content

Commit 87f223c

Browse files
committed
fixed rename refactoring to affect all accessors of a property
1 parent 2b1ec2a commit 87f223c

File tree

1 file changed

+35
-6
lines changed

1 file changed

+35
-6
lines changed

RetailCoder.VBE/Refactorings/Rename/RenamePresenter.cs

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,23 @@ private void OnOkButtonClicked(object sender, EventArgs e)
148148

149149
// must rename usages first; if target is a module or a project,
150150
// then renaming the declaration first would invalidate the parse results.
151-
RenameUsages(_view.Target);
151+
152+
if (_view.Target.DeclarationType.HasFlag(DeclarationType.Property))
153+
{
154+
// properties can have more than 1 member.
155+
var members = _declarations[_view.Target.IdentifierName]
156+
.Where(item => item.Project == _view.Target.Project
157+
&& item.ComponentName == _view.Target.ComponentName
158+
&& item.DeclarationType.HasFlag(DeclarationType.Property));
159+
foreach (var member in members)
160+
{
161+
RenameUsages(member);
162+
}
163+
}
164+
else
165+
{
166+
RenameUsages(_view.Target);
167+
}
152168

153169
if (ModuleDeclarationTypes.Contains(_view.Target.DeclarationType))
154170
{
@@ -228,10 +244,23 @@ private void RenameDeclaration()
228244
module.ReplaceLine(argList.Start.Line, newContent);
229245
module.DeleteLines(argList.Start.Line + 1, lineNum - 1);
230246
}
231-
else
247+
else if (!_view.Target.DeclarationType.HasFlag(DeclarationType.Property))
232248
{
233249
module.ReplaceLine(_view.Target.Selection.StartLine, newContent);
234250
}
251+
else
252+
{
253+
var members = _declarations[_view.Target.IdentifierName]
254+
.Where(item => item.Project == _view.Target.Project
255+
&& item.ComponentName == _view.Target.ComponentName
256+
&& item.DeclarationType.HasFlag(DeclarationType.Property));
257+
258+
foreach (var member in members)
259+
{
260+
newContent = GetReplacementLine(module, member, _view.NewName);
261+
module.ReplaceLine(member.Selection.StartLine, newContent);
262+
}
263+
}
235264
}
236265

237266
private void RenameControl()
@@ -344,23 +373,23 @@ private string GetReplacementLine(string content, string target, string newName)
344373

345374
private string GetReplacementLine(CodeModule module, Declaration target, string newName)
346375
{
347-
var targetModule = _parseResult.ComponentParseResults.SingleOrDefault(m => m.QualifiedName == _view.Target.QualifiedName.QualifiedModuleName);
376+
var targetModule = _parseResult.ComponentParseResults.SingleOrDefault(m => m.QualifiedName == target.QualifiedName.QualifiedModuleName);
348377
if (targetModule == null)
349378
{
350379
return null;
351380
}
352381

353-
var content = module.Lines[_view.Target.Selection.StartLine, 1];
382+
var content = module.Lines[target.Selection.StartLine, 1];
354383

355384
if (target.DeclarationType == DeclarationType.Parameter)
356385
{
357-
var argContext = (VBAParser.ArgContext)_view.Target.Context;
386+
var argContext = (VBAParser.ArgContext)target.Context;
358387
var rewriter = targetModule.GetRewriter();
359388
rewriter.Replace(argContext.ambiguousIdentifier().Start.TokenIndex, _view.NewName);
360389

361390
// Target.Context is an ArgContext, its parent is an ArgsListContext;
362391
// the ArgsListContext's parent is the procedure context and it includes the body.
363-
var context = (ParserRuleContext) _view.Target.Context.Parent.Parent;
392+
var context = (ParserRuleContext) target.Context.Parent.Parent;
364393
var firstTokenIndex = context.Start.TokenIndex;
365394
var lastTokenIndex = -1; // will blow up if this code runs for any context other than below
366395

0 commit comments

Comments
 (0)