|
2 | 2 | using System.Linq;
|
3 | 3 | using Microsoft.Vbe.Interop;
|
4 | 4 | using Rubberduck.Parsing.Symbols;
|
| 5 | +using Rubberduck.Parsing.VBA; |
| 6 | +using Rubberduck.Refactorings.ImplementInterface; |
| 7 | +using Rubberduck.UI; |
5 | 8 | using Rubberduck.VBEditor;
|
6 | 9 |
|
7 | 10 | namespace Rubberduck.Refactorings.ExtractInterface
|
8 | 11 | {
|
9 | 12 | public class ExtractInterfaceRefactoring : IRefactoring
|
10 | 13 | {
|
| 14 | + private readonly RubberduckParserState _state; |
11 | 15 | private readonly IRefactoringPresenterFactory<ExtractInterfacePresenter> _factory;
|
12 | 16 | private readonly IActiveCodePaneEditor _editor;
|
13 | 17 | private ExtractInterfaceModel _model;
|
14 | 18 |
|
15 |
| - public ExtractInterfaceRefactoring(IRefactoringPresenterFactory<ExtractInterfacePresenter> factory, |
| 19 | + public ExtractInterfaceRefactoring(RubberduckParserState state, IRefactoringPresenterFactory<ExtractInterfacePresenter> factory, |
16 | 20 | IActiveCodePaneEditor editor)
|
17 | 21 | {
|
| 22 | + _state = state; |
18 | 23 | _factory = factory;
|
19 | 24 | _editor = editor;
|
20 | 25 | }
|
@@ -55,120 +60,15 @@ private void AddInterface()
|
55 | 60 |
|
56 | 61 | var module = _model.TargetDeclaration.QualifiedSelection.QualifiedName.Component.CodeModule;
|
57 | 62 |
|
58 |
| - AddItems(module); |
59 |
| - module.InsertLines(module.CountOfDeclarationLines + 1, "Implements " + _model.InterfaceName); |
60 |
| - } |
61 |
| - |
62 |
| - private void AddItems(CodeModule module) |
63 |
| - { |
64 |
| - _model.Members.Reverse(); |
65 |
| - |
66 |
| - foreach (var member in _model.Members.Where(m => m.IsSelected)) |
67 |
| - { |
68 |
| - module.InsertLines(module.CountOfDeclarationLines + 1, GetInterfaceMember(member)); |
69 |
| - } |
70 |
| - } |
71 |
| - |
72 |
| - private string GetInterfaceMember(InterfaceMember member) |
73 |
| - { |
74 |
| - switch (member.MemberType) |
75 |
| - { |
76 |
| - case "Sub": |
77 |
| - return SubStmt(member); |
78 |
| - |
79 |
| - case "Function": |
80 |
| - return FunctionStmt(member); |
81 |
| - |
82 |
| - case "Property": |
83 |
| - switch (member.PropertyType) |
84 |
| - { |
85 |
| - case "Get": |
86 |
| - return PropertyGetStmt(member); |
87 |
| - |
88 |
| - case "Let": |
89 |
| - return PropertyLetStmt(member); |
90 |
| - |
91 |
| - case "Set": |
92 |
| - return PropertySetStmt(member); |
93 |
| - } |
94 |
| - break; |
95 |
| - } |
96 |
| - |
97 |
| - return string.Empty; |
98 |
| - } |
99 |
| - |
100 |
| - private string SubStmt(InterfaceMember member) |
101 |
| - { |
102 |
| - var memberSignature = "Public Sub " + _model.InterfaceName + "_" + member.Member.IdentifierName + "(" + |
103 |
| - string.Join(", ", member.MemberParams) + ")"; |
104 |
| - |
105 |
| - var memberBody = " " + member.Member.IdentifierName + " " + |
106 |
| - string.Join(", ", member.MemberParams.Select(p => p.ParamName)); |
107 |
| - |
108 |
| - var memberCloseStatement = "End Sub" + Environment.NewLine; |
109 |
| - |
110 |
| - return string.Join(Environment.NewLine, memberSignature, memberBody, memberCloseStatement); |
111 |
| - } |
112 |
| - |
113 |
| - private string FunctionStmt(InterfaceMember member) |
114 |
| - { |
115 |
| - var memberSignature = "Public Function " + _model.InterfaceName + "_" + member.Member.IdentifierName + "(" + |
116 |
| - string.Join(", ", member.MemberParams) + ")" + " As " + member.Type; |
117 |
| - |
118 |
| - var memberBody = " " + _model.InterfaceName + "_" + member.Member.IdentifierName + " = " + |
119 |
| - member.Member.IdentifierName + "(" + |
120 |
| - string.Join(", ", member.MemberParams.Select(p => p.ParamName)) + ")"; |
121 |
| - |
122 |
| - var memberCloseStatement = "End Function" + Environment.NewLine; |
123 |
| - |
124 |
| - return string.Join(Environment.NewLine, memberSignature, memberBody, memberCloseStatement); |
125 |
| - } |
126 |
| - |
127 |
| - private string PropertyGetStmt(InterfaceMember member) |
128 |
| - { |
129 |
| - var memberSignature = "Public Property Get " + _model.InterfaceName + "_" + member.Member.IdentifierName + |
130 |
| - " As " + member.Type; |
131 |
| - |
132 |
| - var memberBody = _model.PrimitiveTypes.Contains(member.Type) || |
133 |
| - member.Member.DeclarationType == DeclarationType.UserDefinedType |
134 |
| - ? " " |
135 |
| - : " Set "; |
136 |
| - |
137 |
| - memberBody += _model.InterfaceName + "_" + member.Member.IdentifierName + " = " + |
138 |
| - member.Member.IdentifierName; |
139 |
| - |
140 |
| - var memberCloseStatement = "End Property" + Environment.NewLine; |
141 |
| - |
142 |
| - return string.Join(Environment.NewLine, memberSignature, memberBody, memberCloseStatement); |
143 |
| - } |
144 |
| - |
145 |
| - private string PropertyLetStmt(InterfaceMember member) |
146 |
| - { |
147 |
| - var memberSignature = "Public Property Let " + _model.InterfaceName + "_" + member.Member.IdentifierName + |
148 |
| - "(" + string.Join(", ", member.MemberParams) + ")"; |
149 |
| - |
150 |
| - var memberBody = _model.PrimitiveTypes.Contains(member.MemberParams.Last().ParamType) || |
151 |
| - member.Member.DeclarationType == DeclarationType.UserDefinedType |
152 |
| - ? " " |
153 |
| - : " Set "; |
154 |
| - |
155 |
| - memberBody += member.Member.IdentifierName + " = " + member.MemberParams.Last().ParamName; |
156 |
| - |
157 |
| - var memberCloseStatement = "End Property" + Environment.NewLine; |
158 |
| - |
159 |
| - return string.Join(Environment.NewLine, memberSignature, memberBody, memberCloseStatement); |
160 |
| - } |
161 |
| - |
162 |
| - private string PropertySetStmt(InterfaceMember member) |
163 |
| - { |
164 |
| - var memberSignature = "Public Property Set " + _model.InterfaceName + "_" + member.Member.IdentifierName + |
165 |
| - "(" + string.Join(", ", member.MemberParams) + ")"; |
166 |
| - |
167 |
| - var memberBody = " Set " + member.Member.IdentifierName + " = " + member.MemberParams.Last().ParamName; |
| 63 | + var implementsLine = module.CountOfDeclarationLines + 1; |
| 64 | + module.InsertLines(implementsLine, "Implements " + _model.InterfaceName); |
168 | 65 |
|
169 |
| - var memberCloseStatement = "End Property" + Environment.NewLine; |
| 66 | + _state.RequestParse(ParserState.Ready); |
| 67 | + var qualifiedSelection = new QualifiedSelection(_model.TargetDeclaration.QualifiedSelection.QualifiedName, |
| 68 | + new Selection(implementsLine, 1, implementsLine, 1)); |
170 | 69 |
|
171 |
| - return string.Join(Environment.NewLine, memberSignature, memberBody, memberCloseStatement); |
| 70 | + var implementInterfaceRefactoring = new ImplementInterfaceRefactoring(_state, _editor, new MessageBox()); |
| 71 | + implementInterfaceRefactoring.Refactor(qualifiedSelection); |
172 | 72 | }
|
173 | 73 |
|
174 | 74 | private string GetInterface()
|
|
0 commit comments