4
4
using System ;
5
5
using System . Collections . Generic ;
6
6
using System . Windows . Forms ;
7
+ using Rubberduck . Parsing . Symbols ;
8
+ using System . Linq ;
9
+ using Rubberduck . Parsing . VBA ;
7
10
8
11
namespace Rubberduck . UI . Refactorings . RemoveParameters
9
12
{
10
13
public class RemoveParametersViewModel : ViewModelBase
11
14
{
15
+ public RubberduckParserState State { get ; }
16
+
12
17
private List < Parameter > _parameters ;
13
18
public List < Parameter > Parameters
14
19
{
@@ -20,8 +25,113 @@ public List<Parameter> Parameters
20
25
}
21
26
}
22
27
23
- public RemoveParametersViewModel ( )
28
+ public string SignaturePreview
29
+ {
30
+ get
31
+ {
32
+ // if there is only one parameter, we remove it without displaying the UI; this gets called anyway as part of the initialization process
33
+ if ( Parameters == null )
34
+ {
35
+ return string . Empty ;
36
+ }
37
+
38
+ var member = Parameters [ 0 ] . Declaration . ParentDeclaration ;
39
+
40
+ if ( member . DeclarationType . HasFlag ( DeclarationType . Property ) )
41
+ {
42
+ var declarations = State . AllUserDeclarations ;
43
+
44
+ var getter = declarations . FirstOrDefault ( item => item . Scope == member . Scope &&
45
+ item . IdentifierName == member . IdentifierName &&
46
+ item . DeclarationType == DeclarationType . PropertyGet ) ;
47
+
48
+ var letter = declarations . FirstOrDefault ( item => item . Scope == member . Scope &&
49
+ item . IdentifierName == member . IdentifierName &&
50
+ item . DeclarationType == DeclarationType . PropertyLet ) ;
51
+
52
+ var setter = declarations . FirstOrDefault ( item => item . Scope == member . Scope &&
53
+ item . IdentifierName == member . IdentifierName &&
54
+ item . DeclarationType == DeclarationType . PropertySet ) ;
55
+
56
+ var signature = string . Empty ;
57
+ if ( getter != null ) { signature += GetSignature ( ( PropertyGetDeclaration ) getter ) ; }
58
+ if ( letter != null )
59
+ {
60
+ if ( ! string . IsNullOrEmpty ( signature ) ) { signature += Environment . NewLine ; }
61
+ signature += GetSignature ( ( PropertyLetDeclaration ) letter ) ;
62
+ }
63
+ if ( setter != null )
64
+ {
65
+ if ( ! string . IsNullOrEmpty ( signature ) ) { signature += Environment . NewLine ; }
66
+ signature += GetSignature ( ( PropertySetDeclaration ) setter ) ;
67
+ }
68
+
69
+ return signature ;
70
+ }
71
+
72
+ return GetSignature ( ( dynamic ) member ) ;
73
+ }
74
+ }
75
+
76
+ private string GetSignature ( SubroutineDeclaration member )
77
+ {
78
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
79
+ signature += " Sub " + member . IdentifierName + "(" ;
80
+
81
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) ;
82
+ return signature + string . Join ( ", " , selectedParams ) + ")" ;
83
+ }
84
+
85
+ private string GetSignature ( FunctionDeclaration member )
86
+ {
87
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
88
+ signature += " Function " + member . IdentifierName + "(" ;
89
+
90
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) ;
91
+ return signature + string . Join ( ", " , selectedParams ) + ") As " + member . AsTypeName ;
92
+ }
93
+
94
+ private string GetSignature ( EventDeclaration member )
95
+ {
96
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
97
+ signature += " Event " + member . IdentifierName + "(" ;
98
+
99
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) ;
100
+ return signature + string . Join ( ", " , selectedParams ) + ")" ;
101
+ }
102
+
103
+ private string GetSignature ( PropertyGetDeclaration member )
104
+ {
105
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
106
+ signature += " Property Get " + member . IdentifierName + "(" ;
107
+
108
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) ;
109
+ return signature + string . Join ( ", " , selectedParams ) + ") As " + member . AsTypeName ;
110
+ }
111
+
112
+ private string GetSignature ( PropertyLetDeclaration member )
113
+ {
114
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
115
+ signature += " Property Let " + member . IdentifierName + "(" ;
116
+
117
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) . ToList ( ) ;
118
+ selectedParams . Add ( new Parameter ( member . Parameters . Last ( ) , - 1 ) . Name ) ;
119
+ return signature + string . Join ( ", " , selectedParams ) + ")" ;
120
+ }
121
+
122
+ private string GetSignature ( PropertySetDeclaration member )
123
+ {
124
+ var signature = member . Accessibility == Accessibility . Implicit ? string . Empty : member . Accessibility . ToString ( ) ;
125
+ signature += " Property Set " + member . IdentifierName + "(" ;
126
+
127
+ var selectedParams = Parameters . Where ( p => ! p . IsRemoved ) . Select ( s => s . Name ) . ToList ( ) ;
128
+ selectedParams . Add ( new Parameter ( member . Parameters . Last ( ) , - 1 ) . Name ) ;
129
+ return signature + string . Join ( ", " , selectedParams ) + ")" ;
130
+ }
131
+
132
+ public RemoveParametersViewModel ( RubberduckParserState state )
24
133
{
134
+ State = state ;
25
135
OkButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => DialogOk ( ) ) ;
26
136
CancelButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => DialogCancel ( ) ) ;
27
137
RemoveParameterCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , param => RemoveParameter ( ( Parameter ) param ) ) ;
@@ -33,6 +143,7 @@ private void RemoveParameter(Parameter parameter)
33
143
if ( parameter != null )
34
144
{
35
145
parameter . IsRemoved = true ;
146
+ OnPropertyChanged ( nameof ( SignaturePreview ) ) ;
36
147
}
37
148
}
38
149
@@ -41,6 +152,7 @@ private void RestoreParameter(Parameter parameter)
41
152
if ( parameter != null )
42
153
{
43
154
parameter . IsRemoved = false ;
155
+ OnPropertyChanged ( nameof ( SignaturePreview ) ) ;
44
156
}
45
157
}
46
158
0 commit comments