@@ -32,7 +32,10 @@ public RenamePresenter(VBE vbe, IRenameView view, Declarations declarations, Qua
32
32
public void Show ( )
33
33
{
34
34
AcquireTarget ( _selection ) ;
35
- _view . ShowDialog ( ) ;
35
+ if ( _view . Target != null )
36
+ {
37
+ _view . ShowDialog ( ) ;
38
+ }
36
39
}
37
40
38
41
private static readonly DeclarationType [ ] ModuleDeclarationTypes =
@@ -62,7 +65,7 @@ private void RenameModule()
62
65
var module = _vbe . FindCodeModules ( _view . Target . QualifiedName . QualifiedModuleName ) . Single ( ) ;
63
66
module . Name = _view . NewName ;
64
67
}
65
- catch ( COMException exception )
68
+ catch ( COMException )
66
69
{
67
70
MessageBox . Show ( RubberduckUI . RenameDialog_ModuleRenameError , RubberduckUI . RenameDialog_Caption ) ;
68
71
}
@@ -78,6 +81,34 @@ private void RenameDeclaration()
78
81
79
82
private void RenameUsages ( )
80
83
{
84
+ // todo: refactor
85
+
86
+ // rename interface member
87
+ if ( _declarations . FindInterfaceMembers ( ) . Contains ( _view . Target ) )
88
+ {
89
+ var implementations = _declarations . FindInterfaceImplementationMembers ( )
90
+ . Where ( m => m . IdentifierName == _view . Target . ComponentName + '_' + _view . Target . IdentifierName ) ;
91
+
92
+ foreach ( var member in implementations )
93
+ {
94
+ try
95
+ {
96
+ var newMemberName = _view . Target . ComponentName + '_' + _view . NewName ;
97
+ var module = member . Project . VBComponents . Item ( member . ComponentName ) . CodeModule ;
98
+
99
+ var content = module . get_Lines ( member . Selection . StartLine , 1 ) ;
100
+ var newContent = GetReplacementLine ( content , member . IdentifierName , newMemberName ) ;
101
+ module . ReplaceLine ( member . Selection . StartLine , newContent ) ;
102
+ }
103
+ catch ( COMException )
104
+ {
105
+ // gulp
106
+ }
107
+ }
108
+
109
+ return ;
110
+ }
111
+
81
112
var modules = _view . Target . References . GroupBy ( r => r . QualifiedModuleName ) ;
82
113
foreach ( var grouping in modules )
83
114
{
@@ -89,6 +120,7 @@ private void RenameUsages()
89
120
module . ReplaceLine ( line . Key , newContent ) ;
90
121
}
91
122
123
+ // renaming interface
92
124
if ( grouping . Any ( reference => reference . Context . Parent is VBAParser . ImplementsStmtContext ) )
93
125
{
94
126
var members = _declarations . FindMembers ( _view . Target ) ;
@@ -128,11 +160,30 @@ private string GetReplacementLine(string content, string target, string newName)
128
160
129
161
private void AcquireTarget ( QualifiedSelection selection )
130
162
{
131
- _view . Target = _declarations . Items
163
+ var target = _declarations . Items
132
164
. Where ( item => item . DeclarationType != DeclarationType . ModuleOption )
133
165
. FirstOrDefault ( item => IsSelectedDeclaration ( selection , item )
134
166
|| IsSelectedReference ( selection , item ) ) ;
135
167
168
+ var interfaceImplementation = _declarations . FindInterfaceImplementationMembers ( ) . SingleOrDefault ( m => m . Equals ( target ) ) ;
169
+ if ( target != null && interfaceImplementation != null )
170
+ {
171
+ var interfaceMember = _declarations . FindInterfaceMember ( interfaceImplementation ) ;
172
+ var message = string . Format ( RubberduckUI . RenamePresenter_TargetIsInterfaceMemberImplementation , target . IdentifierName , interfaceMember . ComponentName , interfaceMember . IdentifierName ) ;
173
+ var confirm = MessageBox . Show ( message , RubberduckUI . RenameDialog_TitleText , MessageBoxButtons . YesNo , MessageBoxIcon . Exclamation ) ;
174
+ if ( confirm == DialogResult . No )
175
+ {
176
+ _view . Target = null ;
177
+ return ;
178
+ }
179
+
180
+ _view . Target = interfaceMember ;
181
+ }
182
+ else
183
+ {
184
+ _view . Target = target ;
185
+ }
186
+
136
187
if ( _view . Target == null )
137
188
{
138
189
// rename the containing procedure:
0 commit comments