Skip to content

Commit 52a04e9

Browse files
committed
Add instancing for Extract Interface
Declaration's aren't correctly reflecting the exposed attribute. Need to work out *why*, when PublicNotCreatable is chosen in the IDE, it isn't reflected in Declaration.Attributes.ExposedAttributes.Values
1 parent 534f7f7 commit 52a04e9

File tree

7 files changed

+248
-182
lines changed

7 files changed

+248
-182
lines changed

Rubberduck.Core/UI/Refactorings/ExtractInterface/ExtractInterfaceView.xaml

Lines changed: 189 additions & 179 deletions
Large diffs are not rendered by default.

Rubberduck.Core/UI/Refactorings/ExtractInterface/ExtractInterfaceViewModel.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using NLog;
66
using Rubberduck.Parsing.Grammar;
77
using Rubberduck.Parsing.Symbols;
8-
using Rubberduck.Parsing.VBA;
98
using Rubberduck.Refactorings.ExtractInterface;
109
using Rubberduck.UI.Command;
1110

@@ -62,6 +61,21 @@ public bool IsValidInterfaceName
6261
}
6362
}
6463

64+
public bool IsInterfacePublicNotCreateable
65+
{
66+
get
67+
{
68+
try
69+
{
70+
return Convert.ToBoolean(Model.TargetDeclaration.Attributes.ExposedAttribute.Values.First());
71+
}
72+
catch (FormatException)
73+
{
74+
return false;
75+
}
76+
}
77+
}
78+
6579
private void ToggleSelection(bool value)
6680
{
6781
foreach (var item in Members)

Rubberduck.Refactorings/ExtractInterface/ExtractInterfaceRefactoring.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ private void AddInterfaceClass(Declaration implementingClass, string interfaceNa
140140
private void AddInterfaceMembersToClass(ExtractInterfaceModel model, IModuleRewriter rewriter)
141141
{
142142
_implementInterfaceRefactoring.Refactor(model.SelectedMembers.Select(m => m.Member).ToList(), rewriter, model.InterfaceName);
143+
144+
var classIsExposed = Convert.ToBoolean(model.TargetDeclaration.Attributes.ExposedAttribute.Values.First());
145+
if (classIsExposed)
146+
{
147+
model.TargetDeclaration.Attributes.AddExposedClassAttribute();
148+
}
143149
}
144150

145151
private string GetInterfaceModuleBody(ExtractInterfaceModel model)

Rubberduck.Refactorings/InteractiveRefactoringBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ protected InteractiveRefactoringBase(
2626

2727
public override void Refactor(Declaration target)
2828
{
29-
Refactor(InitializeModel(target));
29+
var model = InitializeModel(target);
30+
Refactor(model);
3031
}
3132

3233
protected void Refactor(TModel initialModel)

Rubberduck.Resources/RubberduckUI.Designer.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rubberduck.Resources/RubberduckUI.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,4 +1754,13 @@ Import aborted.</value>
17541754
<data name="ComponentType_VBForm" xml:space="preserve">
17551755
<value>VB Form</value>
17561756
</data>
1757+
<data name="ExtractInterface_InstancingGroupBox" xml:space="preserve">
1758+
<value>Instancing</value>
1759+
</data>
1760+
<data name="ExtractInterface_PrivateRadioButton" xml:space="preserve">
1761+
<value>Private</value>
1762+
</data>
1763+
<data name="ExtractInterface_PublicNotCreatableRadioButton" xml:space="preserve">
1764+
<value>Public Not Creatable</value>
1765+
</data>
17571766
</root>

Rubberduck.VBEditor.VBA/SafeComWrappers/Office/CommandBarButton.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Runtime.InteropServices;
44
using System.Windows.Forms;
55
using Microsoft.CSharp.RuntimeBinder;
6-
using NLog;
76
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
87
using MSO = Microsoft.Office.Core;
98

0 commit comments

Comments
 (0)