9
9
using Rubberduck . Refactorings . ImplementInterface ;
10
10
using Rubberduck . VBEditor ;
11
11
using Rubberduck . VBEditor . SafeComWrappers ;
12
- using Rubberduck . VBEditor . SafeComWrappers . Abstract ;
13
12
using Rubberduck . VBEditor . Utility ;
14
13
15
14
namespace Rubberduck . Refactorings . ExtractInterface
16
15
{
17
16
public class ExtractInterfaceRefactoring : IRefactoring
18
17
{
19
- private readonly RubberduckParserState _state ;
20
- private readonly IVBE _vbe ;
18
+ private readonly IDeclarationFinderProvider _declarationFinderProvider ;
19
+ private readonly IParseManager _parseManager ;
21
20
private readonly IMessageBox _messageBox ;
22
- private readonly IRefactoringPresenterFactory _factory ;
21
+ private readonly Func < ExtractInterfaceModel , IDisposalActionContainer < IExtractInterfacePresenter > > _presenterFactory ;
23
22
private readonly IRewritingManager _rewritingManager ;
23
+ private readonly ISelectionService _selectionService ;
24
24
private ExtractInterfaceModel _model ;
25
25
26
26
private readonly Logger _logger = LogManager . GetCurrentClassLogger ( ) ;
27
27
28
- public ExtractInterfaceRefactoring ( RubberduckParserState state , IVBE vbe , IMessageBox messageBox , IRefactoringPresenterFactory factory , IRewritingManager rewritingManager )
28
+ public ExtractInterfaceRefactoring ( IDeclarationFinderProvider declarationFinderProvider , IParseManager parseManager , IMessageBox messageBox , IRefactoringPresenterFactory factory , IRewritingManager rewritingManager , ISelectionService selectionService )
29
29
{
30
- _state = state ;
31
- _vbe = vbe ;
30
+ _declarationFinderProvider = declarationFinderProvider ;
31
+ _parseManager = parseManager ;
32
32
_rewritingManager = rewritingManager ;
33
33
_messageBox = messageBox ;
34
- _factory = factory ;
34
+ _selectionService = selectionService ;
35
+ _presenterFactory = ( ( model ) => DisposalActionContainer . Create ( factory . Create < IExtractInterfacePresenter , ExtractInterfaceModel > ( model ) , factory . Release ) ) ;
35
36
}
36
37
37
38
private ExtractInterfaceModel InitializeModel ( )
38
39
{
39
- var selection = _vbe . GetActiveSelection ( ) ;
40
-
41
- if ( selection == null )
40
+ var activeSelection = _selectionService . ActiveSelection ( ) ;
41
+ if ( ! activeSelection . HasValue )
42
42
{
43
43
return null ;
44
44
}
45
45
46
- return new ExtractInterfaceModel ( _state , selection . Value ) ;
46
+ return new ExtractInterfaceModel ( _declarationFinderProvider , activeSelection . Value ) ;
47
47
}
48
48
49
49
public void Refactor ( )
@@ -55,9 +55,9 @@ public void Refactor()
55
55
return ;
56
56
}
57
57
58
- using ( var container = DisposalActionContainer . Create ( _factory . Create < IExtractInterfacePresenter , ExtractInterfaceModel > ( _model ) , p => _factory . Release ( p ) ) )
58
+ using ( var presenterContainer = _presenterFactory ( _model ) )
59
59
{
60
- var presenter = container . Value ;
60
+ var presenter = presenterContainer . Value ;
61
61
if ( presenter == null )
62
62
{
63
63
return ;
@@ -69,57 +69,34 @@ public void Refactor()
69
69
return ;
70
70
}
71
71
72
- using ( var pane = _vbe . ActiveCodePane )
73
- {
74
- if ( pane . IsWrappingNullReference )
75
- {
76
- return ;
77
- }
78
-
79
- var oldSelection = pane . GetQualifiedSelection ( ) ;
80
-
81
- AddInterface ( ) ;
82
-
83
- if ( oldSelection . HasValue )
84
- {
85
- pane . Selection = oldSelection . Value . Selection ;
86
- }
87
- }
88
-
89
- _model . State . OnParseRequested ( this ) ;
72
+ AddInterface ( ) ;
90
73
}
91
74
}
92
75
93
76
public void Refactor ( QualifiedSelection target )
94
77
{
95
- using ( var pane = _vbe . ActiveCodePane )
78
+ if ( ! _selectionService . TrySetActiveSelection ( target ) )
96
79
{
97
- if ( pane . IsWrappingNullReference )
98
- {
99
- return ;
100
- }
101
- pane . Selection = target . Selection ;
80
+ return ;
102
81
}
82
+
103
83
Refactor ( ) ;
104
84
}
105
85
106
86
public void Refactor ( Declaration target )
107
87
{
108
- using ( var pane = _vbe . ActiveCodePane )
88
+ if ( target == null )
109
89
{
110
- if ( pane . IsWrappingNullReference )
111
- {
112
- return ;
113
- }
114
- pane . Selection = target . QualifiedSelection . Selection ;
90
+ return ;
115
91
}
116
- Refactor ( ) ;
92
+
93
+ Refactor ( target . QualifiedSelection ) ;
117
94
}
118
95
119
96
private void AddInterface ( )
120
97
{
121
98
//We need to suspend here since adding the interface and rewriting will both trigger a reparse.
122
- var suspendResult = _model . State . OnSuspendParser ( this , new [ ] { ParserState . Ready } , AddInterfaceInternal ) ;
99
+ var suspendResult = _parseManager . OnSuspendParser ( this , new [ ] { ParserState . Ready } , AddInterfaceInternal ) ;
123
100
if ( suspendResult != SuspensionResult . Completed )
124
101
{
125
102
_logger . Warn ( "Extract interface failed." ) ;
@@ -139,7 +116,7 @@ private void AddInterfaceInternal()
139
116
var rewriteSession = _rewritingManager . CheckOutCodePaneSession ( ) ;
140
117
var rewriter = rewriteSession . CheckOutModuleRewriter ( _model . TargetDeclaration . QualifiedModuleName ) ;
141
118
142
- var firstNonFieldMember = _model . State . DeclarationFinder . Members ( _model . TargetDeclaration )
119
+ var firstNonFieldMember = _declarationFinderProvider . DeclarationFinder . Members ( _model . TargetDeclaration )
143
120
. OrderBy ( o => o . Selection )
144
121
. First ( m => ExtractInterfaceModel . MemberTypes . Contains ( m . DeclarationType ) ) ;
145
122
rewriter . InsertBefore ( firstNonFieldMember . Context . Start . TokenIndex , $ "Implements { _model . InterfaceName } { Environment . NewLine } { Environment . NewLine } ") ;
@@ -173,7 +150,7 @@ private void AddInterfaceClass(Declaration implementingClass, string interfaceNa
173
150
174
151
private void AddInterfaceMembersToClass ( IModuleRewriter rewriter )
175
152
{
176
- var implementInterfaceRefactoring = new ImplementInterfaceRefactoring ( _vbe , _model . State , _messageBox , _rewritingManager ) ;
153
+ var implementInterfaceRefactoring = new ImplementInterfaceRefactoring ( _declarationFinderProvider , _messageBox , _rewritingManager , _selectionService ) ;
177
154
implementInterfaceRefactoring . Refactor ( _model . SelectedMembers . Select ( m => m . Member ) . ToList ( ) , rewriter , _model . InterfaceName ) ;
178
155
}
179
156
0 commit comments