|
13 | 13 | using Rubberduck.VBEditor;
|
14 | 14 | using Rubberduck.VBEditor.SafeComWrappers;
|
15 | 15 | using Rubberduck.VBEditor.Utility;
|
| 16 | +using Rubberduck.VBEditor.SafeComWrappers.Abstract; |
16 | 17 |
|
17 | 18 | namespace Rubberduck.Refactorings.ExtractInterface
|
18 | 19 | {
|
@@ -127,27 +128,52 @@ private void AddInterfaceClass(Declaration implementingClass, string interfaceNa
|
127 | 128 | interfaceComponent.Name = interfaceName;
|
128 | 129 |
|
129 | 130 | var optionPresent = interfaceModule.CountOfLines > 1;
|
| 131 | + var optionExplicit = $"{Tokens.Option} {Tokens.Explicit}{Environment.NewLine}"; |
130 | 132 | if (!optionPresent)
|
131 | 133 | {
|
132 |
| - interfaceModule.InsertLines(1, $"{Tokens.Option} {Tokens.Explicit}{Environment.NewLine}"); |
| 134 | + interfaceModule.InsertLines(1, optionExplicit); |
133 | 135 | }
|
| 136 | + |
134 | 137 | interfaceModule.InsertLines(3, interfaceBody);
|
| 138 | + |
| 139 | + var classIsExposed = Convert.ToBoolean(implementingClass.Attributes.ExposedAttribute.Values.First()); |
| 140 | + if (classIsExposed) |
| 141 | + { |
| 142 | + AddExposedAttribute(components, interfaceComponent); |
| 143 | + } |
135 | 144 | }
|
136 | 145 | }
|
137 | 146 | }
|
138 | 147 | }
|
139 | 148 |
|
140 |
| - private void AddInterfaceMembersToClass(ExtractInterfaceModel model, IModuleRewriter rewriter) |
| 149 | + private void AddExposedAttribute(IVBComponents components, IVBComponent interfaceComponent) |
141 | 150 | {
|
142 |
| - _implementInterfaceRefactoring.Refactor(model.SelectedMembers.Select(m => m.Member).ToList(), rewriter, model.InterfaceName); |
| 151 | + try |
| 152 | + { |
| 153 | + var tempExportDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + System.IO.Path.DirectorySeparatorChar + "Rubberduck" + System.IO.Path.DirectorySeparatorChar; |
| 154 | + var tempFile = interfaceComponent.ExportAsSourceFile(tempExportDirectory + interfaceComponent.Name); |
| 155 | + |
| 156 | + var text = System.IO.File.ReadAllText(tempFile); |
| 157 | + var sb = new System.Text.StringBuilder(text); |
| 158 | + sb.Replace("Attribute VB_Exposed = False", "Attribute VB_Exposed = True"); |
| 159 | + System.IO.File.WriteAllText(tempFile, sb.ToString()); |
143 | 160 |
|
144 |
| - var classIsExposed = Convert.ToBoolean(model.TargetDeclaration.Attributes.ExposedAttribute.Values.First()); |
145 |
| - if (classIsExposed) |
| 161 | + components.Remove(interfaceComponent); |
| 162 | + components.ImportSourceFile(tempFile); |
| 163 | + |
| 164 | + System.IO.File.Delete(tempFile); |
| 165 | + } |
| 166 | + catch (Exception) |
146 | 167 | {
|
147 |
| - model.TargetDeclaration.Attributes.AddExposedClassAttribute(); |
| 168 | + throw; |
148 | 169 | }
|
149 | 170 | }
|
150 | 171 |
|
| 172 | + private void AddInterfaceMembersToClass(ExtractInterfaceModel model, IModuleRewriter rewriter) |
| 173 | + { |
| 174 | + _implementInterfaceRefactoring.Refactor(model.SelectedMembers.Select(m => m.Member).ToList(), rewriter, model.InterfaceName); |
| 175 | + } |
| 176 | + |
151 | 177 | private string GetInterfaceModuleBody(ExtractInterfaceModel model)
|
152 | 178 | {
|
153 | 179 | return string.Join(Environment.NewLine, model.SelectedMembers.Select(m => m.Body));
|
|
0 commit comments