44using System ;
55using System . Collections . Generic ;
66using System . Windows . Forms ;
7+ using Rubberduck . Parsing . Symbols ;
8+ using System . Linq ;
9+ using Rubberduck . Parsing . VBA ;
710
811namespace Rubberduck . UI . Refactorings . RemoveParameters
912{
1013 public class RemoveParametersViewModel : ViewModelBase
1114 {
15+ public RubberduckParserState State { get ; }
16+
1217 private List < Parameter > _parameters ;
1318 public List < Parameter > Parameters
1419 {
@@ -20,8 +25,113 @@ public List<Parameter> Parameters
2025 }
2126 }
2227
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 )
24133 {
134+ State = state ;
25135 OkButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => DialogOk ( ) ) ;
26136 CancelButtonCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , _ => DialogCancel ( ) ) ;
27137 RemoveParameterCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , param => RemoveParameter ( ( Parameter ) param ) ) ;
@@ -33,6 +143,7 @@ private void RemoveParameter(Parameter parameter)
33143 if ( parameter != null )
34144 {
35145 parameter . IsRemoved = true ;
146+ OnPropertyChanged ( nameof ( SignaturePreview ) ) ;
36147 }
37148 }
38149
@@ -41,6 +152,7 @@ private void RestoreParameter(Parameter parameter)
41152 if ( parameter != null )
42153 {
43154 parameter . IsRemoved = false ;
155+ OnPropertyChanged ( nameof ( SignaturePreview ) ) ;
44156 }
45157 }
46158
0 commit comments