Skip to content

Commit c776544

Browse files
authored
Merge pull request #4777 from MDoerner/RecoverSelectionAfterRewrite
Massive and much needed tech debt payment
2 parents f584588 + 091c3e6 commit c776544

File tree

83 files changed

+2890
-1406
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2890
-1406
lines changed

Rubberduck.CodeAnalysis/QuickFixes/EncapsulateFieldQuickFix.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,23 @@
77
using Rubberduck.Refactorings.EncapsulateField;
88
using Rubberduck.SmartIndenter;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10+
using Rubberduck.VBEditor.Utility;
1011

1112
namespace Rubberduck.Inspections.QuickFixes
1213
{
1314
public sealed class EncapsulateFieldQuickFix : QuickFixBase
1415
{
1516
private readonly RubberduckParserState _state;
16-
private readonly IVBE _vbe;
17+
private readonly ISelectionService _selectionService;
1718
private readonly IRewritingManager _rewritingManager;
1819
private readonly IIndenter _indenter;
1920
private readonly IRefactoringPresenterFactory _factory;
2021

21-
public EncapsulateFieldQuickFix(RubberduckParserState state, IVBE vbe, IIndenter indenter, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
22+
public EncapsulateFieldQuickFix(RubberduckParserState state, IIndenter indenter, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2223
: base(typeof(EncapsulatePublicFieldInspection))
2324
{
2425
_state = state;
25-
_vbe = vbe;
26+
_selectionService = selectionService;
2627
_rewritingManager = rewritingManager;
2728
_indenter = indenter;
2829
_factory = factory;
@@ -31,7 +32,7 @@ public EncapsulateFieldQuickFix(RubberduckParserState state, IVBE vbe, IIndenter
3132
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
3233
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
3334
{
34-
var refactoring = new EncapsulateFieldRefactoring(_state, _vbe, _indenter, _factory, _rewritingManager);
35+
var refactoring = new EncapsulateFieldRefactoring(_state, _indenter, _factory, _rewritingManager, _selectionService);
3536
refactoring.Refactor(result.Target);
3637
}
3738

Rubberduck.CodeAnalysis/QuickFixes/MoveFieldCloserToUsageQuickFix.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,21 @@
77
using Rubberduck.Refactorings.MoveCloserToUsage;
88
using Rubberduck.Resources.Inspections;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
10+
using Rubberduck.VBEditor.Utility;
1011

1112
namespace Rubberduck.Inspections.QuickFixes
1213
{
1314
public sealed class MoveFieldCloserToUsageQuickFix : QuickFixBase
1415
{
15-
private readonly IVBE _vbe;
16+
private readonly ISelectionService _selectionService;
1617
private readonly RubberduckParserState _state;
1718
private readonly IRewritingManager _rewritingManager;
1819
private readonly IMessageBox _messageBox;
1920

20-
public MoveFieldCloserToUsageQuickFix(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager)
21+
public MoveFieldCloserToUsageQuickFix(RubberduckParserState state, IMessageBox messageBox, IRewritingManager rewritingManager, ISelectionService selectionService)
2122
: base(typeof(MoveFieldCloserToUsageInspection))
2223
{
23-
_vbe = vbe;
24+
_selectionService = selectionService;
2425
_state = state;
2526
_rewritingManager = rewritingManager;
2627
_messageBox = messageBox;
@@ -29,7 +30,7 @@ public MoveFieldCloserToUsageQuickFix(IVBE vbe, RubberduckParserState state, IMe
2930
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
3031
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
3132
{
32-
var refactoring = new MoveCloserToUsageRefactoring(_vbe, _state, _messageBox, _rewritingManager);
33+
var refactoring = new MoveCloserToUsageRefactoring(_state, _messageBox, _rewritingManager, _selectionService);
3334
refactoring.Refactor(result.Target);
3435
}
3536

Rubberduck.CodeAnalysis/QuickFixes/RemoveUnusedParameterQuickFix.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,31 @@
66
using Rubberduck.Refactorings;
77
using Rubberduck.Refactorings.RemoveParameters;
88
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9+
using Rubberduck.VBEditor.Utility;
910

1011
namespace Rubberduck.Inspections.QuickFixes
1112
{
1213
public sealed class RemoveUnusedParameterQuickFix : QuickFixBase
1314
{
14-
private readonly IVBE _vbe;
15-
private readonly RubberduckParserState _state;
15+
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1616
private readonly IRefactoringPresenterFactory _factory;
1717
private readonly IRewritingManager _rewritingManager;
18+
private readonly ISelectionService _selectionService;
1819

19-
public RemoveUnusedParameterQuickFix(IVBE vbe, RubberduckParserState state, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
20+
public RemoveUnusedParameterQuickFix(IDeclarationFinderProvider declarationFinderProvider, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2021
: base(typeof(ParameterNotUsedInspection))
2122
{
22-
_vbe = vbe;
23-
_state = state;
23+
_declarationFinderProvider = declarationFinderProvider;
2424
_factory = factory;
2525
_rewritingManager = rewritingManager;
26+
_selectionService = selectionService;
2627
}
2728

2829
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
2930
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
3031
{
31-
var refactoring = new RemoveParametersRefactoring(_state, _vbe, _factory, _rewritingManager);
32-
refactoring.QuickFix(_state, result.QualifiedSelection);
32+
var refactoring = new RemoveParametersRefactoring(_declarationFinderProvider, _factory, _rewritingManager, _selectionService);
33+
refactoring.QuickFix(result.QualifiedSelection);
3334
}
3435

3536
public override string Description(IInspectionResult result) => Resources.Inspections.QuickFixes.RemoveUnusedParameterQuickFix;

Rubberduck.CodeAnalysis/QuickFixes/RenameDeclarationQuickFix.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@
1010
using Rubberduck.Refactorings.Rename;
1111
using Rubberduck.Resources;
1212
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
13+
using Rubberduck.VBEditor.Utility;
1314

1415
namespace Rubberduck.Inspections.QuickFixes
1516
{
1617
public sealed class RenameDeclarationQuickFix : QuickFixBase
1718
{
18-
private readonly IVBE _vbe;
19+
private readonly ISelectionService _selectionService;
1920
private readonly RubberduckParserState _state;
2021
private readonly IRewritingManager _rewritingManager;
2122
private readonly IMessageBox _messageBox;
2223
private readonly IRefactoringPresenterFactory _factory;
2324

24-
public RenameDeclarationQuickFix(IVBE vbe, RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
25+
public RenameDeclarationQuickFix(RubberduckParserState state, IMessageBox messageBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2526
: base(typeof(HungarianNotationInspection),
2627
typeof(UseMeaningfulNameInspection),
2728
typeof(DefaultProjectNameInspection),
2829
typeof(UnderscoreInPublicClassModuleMemberInspection),
2930
typeof(ExcelUdfNameIsValidCellReferenceInspection))
3031
{
31-
_vbe = vbe;
32+
_selectionService = selectionService;
3233
_state = state;
3334
_rewritingManager = rewritingManager;
3435
_messageBox = messageBox;
@@ -38,7 +39,7 @@ public RenameDeclarationQuickFix(IVBE vbe, RubberduckParserState state, IMessage
3839
//The rewriteSession is optional since it is not used in this particular quickfix because it is a refactoring quickfix.
3940
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession = null)
4041
{
41-
var refactoring = new RenameRefactoring(_vbe, _factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager);
42+
var refactoring = new RenameRefactoring(_factory, _messageBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
4243
refactoring.Refactor(result.Target);
4344
}
4445

Rubberduck.Core/Navigation/RegexSearchReplace/RegexSearchReplace.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,21 @@
88
using Rubberduck.VBEditor;
99
using Rubberduck.VBEditor.SafeComWrappers;
1010
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
11+
using Rubberduck.VBEditor.Utility;
1112

1213
namespace Rubberduck.Navigation.RegexSearchReplace
1314
{
1415
public class RegexSearchReplace : IRegexSearchReplace
1516
{
1617
private readonly IVBE _vbe;
1718
private readonly IParseCoordinator _parser;
19+
private readonly ISelectionService _selectionService;
1820

19-
public RegexSearchReplace(IVBE vbe, IParseCoordinator parser)
21+
public RegexSearchReplace(IVBE vbe, IParseCoordinator parser, ISelectionService selectionService)
2022
{
2123
_vbe = vbe;
2224
_parser = parser;
25+
_selectionService = selectionService;
2326
_search = new Dictionary<RegexSearchReplaceScope, Func<string, IEnumerable<RegexSearchResult>>>
2427
{
2528
{ RegexSearchReplaceScope.Selection, SearchSelection},
@@ -89,11 +92,7 @@ private IEnumerable<RegexSearchResult> GetResultsFromModule(ICodeModule module,
8992

9093
private void SetSelection(RegexSearchResult item)
9194
{
92-
var module = item.Module;
93-
using (var codePane = module.CodePane)
94-
{
95-
codePane.Selection = item.Selection;
96-
}
95+
_selectionService.TrySetActiveSelection(item.Module.QualifiedModuleName, item.Selection);
9796
}
9897

9998
private List<RegexSearchResult> SearchSelection(string searchPattern)

Rubberduck.Core/UI/CodeExplorer/Commands/RenameCommand.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
using Rubberduck.Parsing.VBA;
77
using Rubberduck.Refactorings;
88
using Rubberduck.Refactorings.Rename;
9-
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
9+
using Rubberduck.VBEditor.Utility;
1010

1111
namespace Rubberduck.UI.CodeExplorer.Commands
1212
{
@@ -19,15 +19,15 @@ public sealed class RenameCommand : CodeExplorerCommandBase
1919
typeof(CodeExplorerMemberViewModel)
2020
};
2121

22-
private readonly IVBE _vbe;
2322
private readonly RubberduckParserState _state;
2423
private readonly IRefactoringPresenterFactory _factory;
2524
private readonly IMessageBox _msgBox;
2625
private readonly IRewritingManager _rewritingManager;
26+
private readonly ISelectionService _selectionService;
2727

28-
public RenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager)
28+
public RenameCommand(RubberduckParserState state, IMessageBox msgBox, IRefactoringPresenterFactory factory, IRewritingManager rewritingManager, ISelectionService selectionService)
2929
{
30-
_vbe = vbe;
30+
_selectionService = selectionService;
3131
_state = state;
3232
_rewritingManager = rewritingManager;
3333
_msgBox = msgBox;
@@ -38,7 +38,7 @@ public RenameCommand(IVBE vbe, RubberduckParserState state, IMessageBox msgBox,
3838

3939
protected override bool EvaluateCanExecute(object parameter)
4040
{
41-
return base.EvaluateCanExecute(parameter) && _state.Status == ParserState.Ready;
41+
return _state.Status == ParserState.Ready && base.EvaluateCanExecute(parameter);
4242
}
4343

4444
protected override void OnExecute(object parameter)
@@ -50,7 +50,7 @@ protected override void OnExecute(object parameter)
5050
return;
5151
}
5252

53-
var refactoring = new RenameRefactoring(_vbe, _factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager);
53+
var refactoring = new RenameRefactoring(_factory, _msgBox, _state, _state.ProjectsProvider, _rewritingManager, _selectionService);
5454
refactoring.Refactor(node.Declaration);
5555
}
5656
}

Rubberduck.Core/UI/Command/FindSymbolCommand.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.UI.FindSymbol;
77
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
8+
using Rubberduck.VBEditor.Utility;
89

910
namespace Rubberduck.UI.Command
1011
{
@@ -19,13 +20,13 @@ public class FindSymbolCommand : CommandBase
1920
private readonly DeclarationIconCache _iconCache;
2021
private readonly NavigateCommand _navigateCommand;
2122

22-
public FindSymbolCommand(IVBE vbe, RubberduckParserState state, DeclarationIconCache iconCache) : base(LogManager.GetCurrentClassLogger())
23+
public FindSymbolCommand(IVBE vbe, RubberduckParserState state, ISelectionService selectionService, DeclarationIconCache iconCache) : base(LogManager.GetCurrentClassLogger())
2324
{
2425
_vbe = vbe;
2526
_state = state;
2627
_iconCache = iconCache;
2728

28-
_navigateCommand = new NavigateCommand(_state.ProjectsProvider);
29+
_navigateCommand = new NavigateCommand(selectionService);
2930
}
3031

3132
protected override void OnExecute(object parameter)
Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System.Runtime.InteropServices;
2-
using System.Windows.Input;
32
using NLog;
43
using Rubberduck.Interaction.Navigation;
5-
using Rubberduck.VBEditor.ComManagement;
4+
using Rubberduck.VBEditor;
5+
using Rubberduck.VBEditor.Utility;
66

77
namespace Rubberduck.UI.Command
88
{
@@ -13,12 +13,12 @@ namespace Rubberduck.UI.Command
1313
[ComVisible(false)]
1414
public class NavigateCommand : CommandBase, INavigateCommand
1515
{
16-
private readonly IProjectsProvider _projectsProvider;
16+
private readonly ISelectionService _selectionService;
1717

18-
public NavigateCommand(IProjectsProvider projectsProvider)
18+
public NavigateCommand(ISelectionService selectionService)
1919
: base(LogManager.GetCurrentClassLogger())
2020
{
21-
_projectsProvider = projectsProvider;
21+
_selectionService = selectionService;
2222
}
2323

2424
protected override void OnExecute(object parameter)
@@ -29,20 +29,7 @@ protected override void OnExecute(object parameter)
2929
return;
3030
}
3131

32-
try
33-
{
34-
var component = _projectsProvider.Component(param.QualifiedName);
35-
using (var codeModule = component.CodeModule)
36-
{
37-
using (var codePane = codeModule.CodePane)
38-
{
39-
codePane.Selection = param.Selection;
40-
}
41-
}
42-
}
43-
catch (COMException)
44-
{
45-
}
32+
_selectionService.TrySetActiveSelection(param.QualifiedName, param.Selection);
4633
}
4734
}
4835
}

0 commit comments

Comments
 (0)