Skip to content

Commit abc2b53

Browse files
committed
Stop renaming references to Me
Class module references to Me should not be renamed to not break the code. Fixes #2710
1 parent f398240 commit abc2b53

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

RetailCoder.VBE/Refactorings/Rename/RenameRefactoring.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,9 @@ private void RenameStandardElements(Declaration target, string newName)
476476

477477
private void RenameReferences(Declaration target, string newName)
478478
{
479-
var modules = target.References.GroupBy(r => r.QualifiedModuleName);
479+
var modules = target.References
480+
.Where(reference => reference.Context.GetText() != "Me")
481+
.GroupBy(r => r.QualifiedModuleName);
480482
foreach (var grouping in modules)
481483
{
482484
_modulesToRewrite.Add(grouping.Key);

RubberduckTests/Refactoring/RenameTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,6 +1962,48 @@ Dim va|l1 As Integer
19621962
Assert.IsFalse(renameViewModel.IsValidName);
19631963
}
19641964

1965+
1966+
[TestMethod]
1967+
[TestCategory("Refactorings")]
1968+
[TestCategory("Rename")]
1969+
public void RenameRefactoring_RenameClassModule_DoesNotChangeMeReferences()
1970+
{
1971+
const string newName = "RenamedClassModule";
1972+
1973+
//Input
1974+
const string inputCode =
1975+
@"Property Get Self() As IClassModule
1976+
Set Self = Me
1977+
End Property";
1978+
1979+
var selection = new Selection(3, 27, 3, 27);
1980+
1981+
IVBComponent component;
1982+
var vbe = MockVbeBuilder.BuildFromSingleModule(inputCode, "ClassModule1", ComponentType.ClassModule, out component, selection);
1983+
using (var state = MockParser.CreateAndParse(vbe.Object))
1984+
{
1985+
1986+
var qualifiedSelection = new QualifiedSelection(new QualifiedModuleName(component), selection);
1987+
1988+
var msgbox = new Mock<IMessageBox>();
1989+
msgbox.Setup(m => m.Show(It.IsAny<string>(), It.IsAny<string>(), MessageBoxButtons.YesNo, It.IsAny<MessageBoxIcon>()))
1990+
.Returns(DialogResult.Yes);
1991+
1992+
var vbeWrapper = vbe.Object;
1993+
var model = new RenameModel(vbeWrapper, state, qualifiedSelection) { NewName = newName };
1994+
model.Target = model.Declarations.FirstOrDefault(i => i.DeclarationType == DeclarationType.ClassModule && i.IdentifierName == "ClassModule1");
1995+
1996+
//SetupFactory
1997+
var factory = SetupFactory(model);
1998+
1999+
var refactoring = new RenameRefactoring(vbeWrapper, factory.Object, msgbox.Object, state);
2000+
refactoring.Refactor(model.Target);
2001+
2002+
Assert.AreSame(newName, component.CodeModule.Name);
2003+
Assert.AreEqual(inputCode, component.CodeModule.GetLines(0, component.CodeModule.CountOfLines));
2004+
}
2005+
2006+
}
19652007
#endregion
19662008

19672009
#region Test Execution

0 commit comments

Comments
 (0)