Skip to content

Commit 241e1fb

Browse files
committed
Add members for finding selected projects and members to ISelectedDeclarationService
1 parent 70ed85a commit 241e1fb

File tree

3 files changed

+38
-12
lines changed

3 files changed

+38
-12
lines changed

Rubberduck.Core/UI/Command/RunSelectedTestMethodCommand.cs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,19 @@
33
using Rubberduck.Parsing.Symbols;
44
using Rubberduck.Parsing.VBA;
55
using Rubberduck.UnitTesting;
6-
using Rubberduck.VBEditor.Utility;
76

87
namespace Rubberduck.UI.Command
98
{
109
public class RunSelectedTestMethodCommand : CommandBase
1110
{
1211
private readonly ITestEngine _engine;
13-
private readonly ISelectionProvider _selectionProvider;
12+
private readonly ISelectedDeclarationProvider _selectedDeclarationProvider;
1413
private readonly IDeclarationFinderProvider _finderProvider;
1514

16-
public RunSelectedTestMethodCommand(ITestEngine engine, ISelectionProvider selectionProvider, IDeclarationFinderProvider finderProvider)
15+
public RunSelectedTestMethodCommand(ITestEngine engine, ISelectedDeclarationProvider selectedDeclarationProvider, IDeclarationFinderProvider finderProvider)
1716
{
1817
_engine = engine;
19-
_selectionProvider = selectionProvider;
18+
_selectedDeclarationProvider = selectedDeclarationProvider;
2019
_finderProvider = finderProvider;
2120

2221
AddToCanExecuteEvaluation(SpecialEvaluateCanExecute);
@@ -43,15 +42,17 @@ protected override void OnExecute(object parameter)
4342

4443
private Declaration FindDeclarationFromSelection()
4544
{
46-
var active = _selectionProvider?.ActiveSelection();
47-
if (!active.HasValue)
48-
{
49-
return null;
50-
}
45+
var selectedMember = _selectedDeclarationProvider.SelectedMember();
46+
return IsTestMethod(selectedMember)
47+
? selectedMember
48+
: null;
49+
}
5150

52-
return _finderProvider.DeclarationFinder.FindDeclarationsContainingSelection(active.Value)
53-
.SingleOrDefault(declaration => declaration.DeclarationType == DeclarationType.Procedure &&
54-
declaration.Annotations.Any(annotation => annotation is TestMethodAnnotation));
51+
private bool IsTestMethod(Declaration member)
52+
{
53+
return member.DeclarationType == DeclarationType.Procedure
54+
&& member.Annotations.Any(parseTreeAnnotation =>
55+
parseTreeAnnotation.Annotation is TestMethodAnnotation);
5556
}
5657
}
5758
}

Rubberduck.Parsing/VBA/ISelectedDeclarationProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public interface ISelectedDeclarationProvider
88
Declaration SelectedDeclaration();
99
Declaration SelectedDeclaration(QualifiedModuleName module);
1010
Declaration SelectedDeclaration(QualifiedSelection qualifiedSelection);
11+
ProjectDeclaration SelectedProject();
1112
ModuleDeclaration SelectedModule();
13+
ModuleBodyElementDeclaration SelectedMember();
1214
}
1315
}

Rubberduck.Parsing/VBA/SelectedDeclarationProvider.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ public Declaration SelectedDeclaration(QualifiedSelection qualifiedSelection)
4747
return _declarationFinderProvider.DeclarationFinder?.FindSelectedDeclaration(qualifiedSelection);
4848
}
4949

50+
public ProjectDeclaration SelectedProject()
51+
{
52+
var activeSelection = _selectionProvider.ActiveSelection();
53+
return activeSelection.HasValue
54+
? _declarationFinderProvider.DeclarationFinder?
55+
.UserDeclarations(DeclarationType.Project)
56+
.OfType<ProjectDeclaration>()
57+
.FirstOrDefault(project => project.ProjectId.Equals(activeSelection.Value.QualifiedName.ProjectId))
58+
: null;
59+
}
60+
5061
public ModuleDeclaration SelectedModule()
5162
{
5263
var activeSelection = _selectionProvider.ActiveSelection();
@@ -57,5 +68,17 @@ public ModuleDeclaration SelectedModule()
5768
.FirstOrDefault(module => module.QualifiedModuleName.Equals(activeSelection.Value.QualifiedName))
5869
: null;
5970
}
71+
72+
public ModuleBodyElementDeclaration SelectedMember()
73+
{
74+
var activeSelection = _selectionProvider.ActiveSelection();
75+
return activeSelection.HasValue
76+
? _declarationFinderProvider.DeclarationFinder?
77+
.UserDeclarations(DeclarationType.Member)
78+
.OfType<ModuleBodyElementDeclaration>()
79+
.FirstOrDefault(member => member.QualifiedModuleName.Equals(activeSelection.Value.QualifiedName)
80+
&& member.Context.GetSelection().Contains(activeSelection.Value.Selection))
81+
: null;
82+
}
6083
}
6184
}

0 commit comments

Comments
 (0)