Skip to content

Commit f637788

Browse files
committed
Stop reporting array accesses as separate references for FindAllReferences
1 parent 9805141 commit f637788

File tree

2 files changed

+58
-5
lines changed

2 files changed

+58
-5
lines changed

Rubberduck.Core/UI/Controls/FindAllReferencesService.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,14 @@ private SearchResultsViewModel CreateViewModel(ProjectDeclaration project, Proje
141141

142142
private SearchResultsViewModel CreateViewModel(Declaration declaration)
143143
{
144-
var results = declaration.References.Distinct().Select(reference =>
145-
new SearchResultItem(
146-
reference.ParentNonScoping,
147-
new NavigateCodeEventArgs(reference.QualifiedModuleName, reference.Selection),
148-
GetModuleLine(reference.QualifiedModuleName, reference.Selection.StartLine)));
144+
var results = declaration.References
145+
.Where(reference => !reference.IsArrayAccess)
146+
.Distinct()
147+
.Select(reference =>
148+
new SearchResultItem(
149+
reference.ParentNonScoping,
150+
new NavigateCodeEventArgs(reference.QualifiedModuleName, reference.Selection),
151+
GetModuleLine(reference.QualifiedModuleName, reference.Selection.StartLine)));
149152

150153
var accessor = declaration.DeclarationType.HasFlag(DeclarationType.PropertyGet) ? "(get)"
151154
: declaration.DeclarationType.HasFlag(DeclarationType.PropertyLet) ? "(let)"

RubberduckTests/Commands/FindAllReferencesTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,56 @@ Private Sub Bar()
7575
}
7676
}
7777

78+
[Category("Commands")]
79+
[Test]
80+
//See issue #5277 at https://github.com/rubberduck-vba/Rubberduck/issues/5277
81+
public void FindAllReferences_ArraySelected_ReturnsCorrectNumberIgnoringArrayAccesses()
82+
{
83+
const string inputCode =
84+
@"
85+
Private Sub Bar()
86+
Dim arr(0 To 1) As Variant
87+
arr(1) = arr(1)
88+
End Sub";
89+
90+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _, new Selection(4, 6, 4, 6));
91+
using (var state = MockParser.CreateAndParse(vbe.Object))
92+
{
93+
var vm = new SearchResultsWindowViewModel();
94+
var service = ArrangeFindAllReferencesService(state, vm);
95+
var command = ArrangeFindAllReferencesCommand(state, vbe, vm, service);
96+
97+
command.Execute(null);
98+
99+
Assert.AreEqual(2, vm.Tabs[0].SearchResults.Count);
100+
}
101+
}
102+
103+
[Category("Commands")]
104+
[Test]
105+
//See issue #5277 at https://github.com/rubberduck-vba/Rubberduck/issues/5277
106+
public void FindAllReferences_ReDimDeclaredArraySelected_ReturnsCorrectNumberIgnoringArrayAccesses()
107+
{
108+
const string inputCode =
109+
@"
110+
Private Sub Bar()
111+
ReDim arr(0 To 1)
112+
arr(1) = arr(1)
113+
End Sub";
114+
115+
var vbe = MockVbeBuilder.BuildFromSingleStandardModule(inputCode, out _, new Selection(4, 6, 4, 6));
116+
using (var state = MockParser.CreateAndParse(vbe.Object))
117+
{
118+
var vm = new SearchResultsWindowViewModel();
119+
var service = ArrangeFindAllReferencesService(state, vm);
120+
var command = ArrangeFindAllReferencesCommand(state, vbe, vm, service);
121+
122+
command.Execute(null);
123+
124+
Assert.AreEqual(3, vm.Tabs[0].SearchResults.Count);
125+
}
126+
}
127+
78128
[Category("Commands")]
79129
[Test]
80130
public void FindAllReferences_NoResults_DisplayMessageBox()

0 commit comments

Comments
 (0)