Skip to content

Commit 76990d2

Browse files
committed
Fix regex rename
1 parent f053548 commit 76990d2

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

RetailCoder.VBE/Refactorings/Rename/RenamePresenter.cs

Lines changed: 36 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()
@@ -354,23 +383,23 @@ private string GetReplacementLine(string content, string target, string newName,
354383

355384
private string GetReplacementLine(CodeModule module, Declaration target, string newName)
356385
{
357-
var targetModule = _parseResult.ComponentParseResults.SingleOrDefault(m => m.QualifiedName == _view.Target.QualifiedName.QualifiedModuleName);
386+
var targetModule = _parseResult.ComponentParseResults.SingleOrDefault(m => m.QualifiedName == target.QualifiedName.QualifiedModuleName);
358387
if (targetModule == null)
359388
{
360389
return null;
361390
}
362391

363-
var content = module.Lines[_view.Target.Selection.StartLine, 1];
392+
var content = module.Lines[target.Selection.StartLine, 1];
364393

365394
if (target.DeclarationType == DeclarationType.Parameter)
366395
{
367-
var argContext = (VBAParser.ArgContext)_view.Target.Context;
396+
var argContext = (VBAParser.ArgContext)target.Context;
368397
var rewriter = targetModule.GetRewriter();
369398
rewriter.Replace(argContext.ambiguousIdentifier().Start.TokenIndex, _view.NewName);
370399

371400
// Target.Context is an ArgContext, its parent is an ArgsListContext;
372401
// the ArgsListContext's parent is the procedure context and it includes the body.
373-
var context = (ParserRuleContext)_view.Target.Context.Parent.Parent;
402+
var context = (ParserRuleContext)target.Context.Parent.Parent;
374403
var firstTokenIndex = context.Start.TokenIndex;
375404
var lastTokenIndex = -1; // will blow up if this code runs for any context other than below
376405

@@ -511,3 +540,4 @@ private bool IsSelectedDeclaration(QualifiedSelection selection, Declaration dec
511540
}
512541
}
513542
}
543+

0 commit comments

Comments
 (0)