Skip to content

Commit 9cf61d5

Browse files
committed
Completed interfaces refactoring changes
Significant modification of interfaces and class responsibilities. The refactoring is really two refactorings in one. Classes re-written re-organized to represent this more explicitly.
1 parent b4ab4a8 commit 9cf61d5

26 files changed

+742
-1224
lines changed

Rubberduck.Core/UI/Refactorings/EncapsulateField/EncapsulateFieldViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ private class MasterDetailSelectionManager
1717
private const string _neverATargetID = "_Never_a_TargetID_";
1818
private bool _detailFieldIsFlagged;
1919

20-
public MasterDetailSelectionManager(IEncapsulateFieldCandidate selected)
20+
public MasterDetailSelectionManager(IEncapsulatableField selected)
2121
: this(selected?.TargetID)
2222
{
2323
if (selected != null)

Rubberduck.Core/UI/Refactorings/EncapsulateField/ViewableEncapsulatedField.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public interface IEncapsulatedFieldViewData
1919

2020
public class ViewableEncapsulatedField : IEncapsulatedFieldViewData
2121
{
22-
private IEncapsulateFieldCandidate _efd;
22+
private IEncapsulatableField _efd;
2323
private readonly int _hashCode;
24-
public ViewableEncapsulatedField(IEncapsulateFieldCandidate efd)
24+
public ViewableEncapsulatedField(IEncapsulatableField efd)
2525
{
2626
_efd = efd;
2727
_hashCode = efd.TargetID.GetHashCode();
@@ -74,7 +74,6 @@ public bool TryValidateEncapsulationAttributes(out string errorMessage)
7474
public bool CanBeReadWrite => _efd.CanBeReadWrite;
7575

7676
public string PropertyName { get => _efd.PropertyIdentifier; set => _efd.PropertyIdentifier = value; }
77-
//public string PropertyIdentifier { get => _efd.PropertyIdentifier; set => _efd.PropertyIdentifier = value; }
7877

7978
public bool EncapsulateFlag { get => _efd.EncapsulateFlag; set => _efd.EncapsulateFlag = value; }
8079

Rubberduck.Refactorings/EncapsulateField/EncapsulateFIeldResources.cs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,20 @@ namespace Rubberduck.Refactorings.EncapsulateField
1111
//just before the 'WIP' annotation is removed
1212
public class EncapsulateFieldResources
1313
{
14-
public static string PreviewEndOfChangesMarker
14+
public static string PreviewMarker
1515
=> "'<===== Property and Declaration changes above this line =====>";
1616

1717
public static string DefaultPropertyParameter => "value";
1818

1919
public static string DefaultStateUDTFieldName => "this";
2020

21-
//TODO: Is it meaningful to change the Type prefix for different cultures?
22-
//If not, remove this declaration
23-
public static string StateUserDefinedTypeIdentifierPrefix => "T";
24-
25-
public static string GroupBoxHeaderSuffix = "Encapsulation Property Name:";
21+
public static string GroupBoxHeaderSuffix = "Property Name:";
2622

2723
public static string Caption
2824
=> RubberduckUI.EncapsulateField_Caption;
2925

3026
public static string InstructionText /* => RubberduckUI.EncapsulateField_InstructionText*/
31-
=> "Select one or more fields to encapsulate. Optionally edit property names or accept the default value(s)";
27+
=> "Select one or more fields to encapsulate. Accept the default values or edit property names";
3228

3329
public static string Preview
3430
=> RubberduckUI.EncapsulateField_Preview;
@@ -37,15 +33,7 @@ public static string TitleText
3733
=> RubberduckUI.EncapsulateField_TitleText;
3834

3935
public static string PrivateUDTPropertyText
40-
=> "Encapsulates Each UDT Member";
41-
42-
public static string Conflict => "Conflict";
43-
44-
public static string Property => "Property";
45-
46-
public static string Field => "Field";
47-
48-
public static string Parameter => "Parameter";
36+
=> "Creates a Property for Each UDT Member";
4937

5038
public static string NameConflictDetected => "Name Conflict Detected";
5139

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldElementFactory.cs renamed to Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldElementsBuilder.cs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
namespace Rubberduck.Refactorings.EncapsulateField
1313
{
14-
public class EncapsulateFieldElementFactory
14+
public class EncapsulateFieldElementsBuilder
1515
{
1616
private readonly IDeclarationFinderProvider _declarationFinderProvider;
1717
private QualifiedModuleName _targetQMN;
1818

19-
public EncapsulateFieldElementFactory(IDeclarationFinderProvider declarationFinderProvider, QualifiedModuleName targetQMN)//, IEncapsulateFieldValidator validator )
19+
public EncapsulateFieldElementsBuilder(IDeclarationFinderProvider declarationFinderProvider, QualifiedModuleName targetQMN)//, IEncapsulateFieldValidator validator )
2020
{
2121
_declarationFinderProvider = declarationFinderProvider;
2222
_targetQMN = targetQMN;
@@ -25,21 +25,21 @@ public EncapsulateFieldElementFactory(IDeclarationFinderProvider declarationFind
2525

2626
public IObjectStateUDT ObjectStateUDT { private set; get; }
2727

28-
public IEncapsulateFieldValidationsProvider ValidatorProvider { private set; get; }
28+
public IEncapsulateFieldValidationsProvider ValidationsProvider { private set; get; }
2929

30-
public IEnumerable<IEncapsulateFieldCandidate> Candidates { private set; get; }
30+
public IEnumerable<IEncapsulatableField> Candidates { private set; get; }
3131

3232
private void CreateRefactoringElements()
3333
{
3434
var fieldDeclarations = _declarationFinderProvider.DeclarationFinder
3535
.Members(_targetQMN)
3636
.Where(v => v.IsMemberVariable() && !v.IsWithEvents);
3737

38-
ValidatorProvider = new EncapsulateFieldValidationsProvider();
38+
ValidationsProvider = new EncapsulateFieldValidationsProvider();
3939

40-
var nameValidator = ValidatorProvider.NameOnlyValidator(Validators.Default);
40+
var nameValidator = ValidationsProvider.NameOnlyValidator(NameValidators.Default);
4141

42-
var candidates = new List<IEncapsulateFieldCandidate>();
42+
var candidates = new List<IEncapsulatableField>();
4343
foreach (var fieldDeclaration in fieldDeclarations)
4444
{
4545
Debug.Assert(!fieldDeclaration.DeclarationType.Equals(DeclarationType.UserDefinedTypeMember));
@@ -50,19 +50,16 @@ private void CreateRefactoringElements()
5050
candidates.Add(fieldEncapsulationCandidate);
5151
}
5252

53-
ValidatorProvider.RegisterCandidates(candidates);
53+
ValidationsProvider.RegisterCandidates(candidates);
5454

55-
var conflictsValidator = ValidatorProvider.ConflictDetector(EncapsulateFieldStrategy.UseBackingFields, _declarationFinderProvider);
55+
var conflictsValidator = ValidationsProvider.ConflictDetector(EncapsulateFieldStrategy.UseBackingFields, _declarationFinderProvider);
5656

5757
ObjectStateUDT = CreateStateUDTField(conflictsValidator);
5858
foreach (var candidate in candidates)
5959
{
6060
candidate.ConflictFinder = conflictsValidator;
6161
conflictsValidator.AssignNoConflictIdentifier(candidate, DeclarationType.Property);
6262
conflictsValidator.AssignNoConflictIdentifier(candidate, DeclarationType.Variable);
63-
64-
var converted = candidate as IConvertToUDTMember;
65-
converted.ObjectStateUDT = ObjectStateUDT;
6663
}
6764

6865
Candidates = candidates;
@@ -81,11 +78,11 @@ private IObjectStateUDT CreateStateUDTField(IEncapsulateFieldConflictFinder vali
8178
return stateUDT;
8279
}
8380

84-
private IEncapsulateFieldCandidate CreateCandidate(Declaration target, IValidateVBAIdentifiers validator)// Predicate<string> nameValidator)
81+
private IEncapsulatableField CreateCandidate(Declaration target, IValidateVBAIdentifiers validator)// Predicate<string> nameValidator)
8582
{
8683
if (target.IsUserDefinedTypeField())
8784
{
88-
var udtValidator = ValidatorProvider.NameOnlyValidator(Validators.UserDefinedType);
85+
var udtValidator = ValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedType);
8986
var udtField = new UserDefinedTypeCandidate(target, udtValidator) as IUserDefinedTypeCandidate;
9087

9188
(Declaration udtDeclaration, IEnumerable<Declaration> udtMembers) = GetUDTAndMembersForField(udtField);
@@ -96,10 +93,10 @@ private IEncapsulateFieldCandidate CreateCandidate(Declaration target, IValidate
9693

9794
foreach (var udtMemberDeclaration in udtMembers)
9895
{
99-
var udtMemberValidator = ValidatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMember);
96+
var udtMemberValidator = ValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMember);
10097
if (udtMemberDeclaration.IsArray)
10198
{
102-
udtMemberValidator = ValidatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMemberArray);
99+
udtMemberValidator = ValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMemberArray);
103100
}
104101
var candidateUDTMember = new UserDefinedTypeMemberCandidate(CreateCandidate(udtMemberDeclaration, udtMemberValidator), udtField) as IUserDefinedTypeMemberCandidate;
105102

Rubberduck.Refactorings/EncapsulateField/EncapsulateFieldModel.cs

Lines changed: 38 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@ public class EncapsulateFieldModel : IRefactoringModel
1212
{
1313
private readonly Func<EncapsulateFieldModel, string> _previewDelegate;
1414
private QualifiedModuleName _targetQMN;
15-
//private IValidateEncapsulateFieldNames _validator;
1615
private IDeclarationFinderProvider _declarationFinderProvider;
1716
private IEncapsulateFieldValidationsProvider _validatorProvider;
1817
private IObjectStateUDT _newObjectStateUDT;
1918

2019
private IDictionary<Declaration, (Declaration, IEnumerable<Declaration>)> _udtFieldToUdtDeclarationMap = new Dictionary<Declaration, (Declaration, IEnumerable<Declaration>)>();
2120

22-
public EncapsulateFieldModel(Declaration target, IEnumerable<IEncapsulateFieldCandidate> candidates, IObjectStateUDT stateUDTField, Func<EncapsulateFieldModel, string> previewDelegate, IDeclarationFinderProvider declarationFinderProvider, IEncapsulateFieldValidationsProvider validatorProvider) // IEncapsulateFieldValidator validator)
21+
public EncapsulateFieldModel(Declaration target, IEnumerable<IEncapsulatableField> candidates, IObjectStateUDT stateUDTField, Func<EncapsulateFieldModel, string> previewDelegate, IDeclarationFinderProvider declarationFinderProvider, IEncapsulateFieldValidationsProvider validatorProvider) // IEncapsulateFieldValidator validator)
2322
{
2423
_previewDelegate = previewDelegate;
2524
_targetQMN = target.QualifiedModuleName;
@@ -36,22 +35,49 @@ public EncapsulateFieldModel(Declaration target, IEnumerable<IEncapsulateFieldCa
3635
private EncapsulateFieldStrategy _encapsulationFieldStategy;
3736
public EncapsulateFieldStrategy EncapsulateFieldStrategy
3837
{
38+
get => _encapsulationFieldStategy;
3939
set
4040
{
4141
_encapsulationFieldStategy = value;
42-
AssignCandidateValidations(value);
42+
if (_encapsulationFieldStategy == EncapsulateFieldStrategy.UseBackingFields)
43+
{
44+
foreach (var candidate in EncapsulationCandidates)
45+
{
46+
candidate.ConflictFinder = _validatorProvider.ConflictDetector(_encapsulationFieldStategy, _declarationFinderProvider);// ConflictDetector;
47+
switch (candidate)
48+
{
49+
case IUserDefinedTypeCandidate udt:
50+
candidate.NameValidator = _validatorProvider.NameOnlyValidator(NameValidators.UserDefinedType);
51+
break;
52+
case IUserDefinedTypeMemberCandidate udtm:
53+
candidate.NameValidator = candidate.Declaration.IsArray
54+
? _validatorProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMemberArray)
55+
: _validatorProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMember);
56+
break;
57+
default:
58+
candidate.NameValidator = _validatorProvider.NameOnlyValidator(NameValidators.Default);
59+
break;
60+
}
61+
}
62+
}
63+
else
64+
{
65+
foreach (var candidate in EncapsulationCandidates)
66+
{
67+
candidate.ConflictFinder = _validatorProvider.ConflictDetector(_encapsulationFieldStategy, _declarationFinderProvider);// ConflictDetector;
68+
candidate.NameValidator = candidate.Declaration.IsArray
69+
? _validatorProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMemberArray)
70+
: _validatorProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMember);
71+
}
72+
}
4373
}
44-
get => _encapsulationFieldStategy;
4574
}
4675

47-
public IEncapsulateFieldValidationsProvider ValidatorProvider => _validatorProvider;
76+
public IEncapsulateFieldValidationsProvider ValidationsProvider => _validatorProvider;
4877

49-
public IEncapsulateFieldConflictFinder ConflictDetector
50-
=> _validatorProvider.ConflictDetector(EncapsulateFieldStrategy, _declarationFinderProvider);
78+
public List<IEncapsulatableField> EncapsulationCandidates { set; get; } = new List<IEncapsulatableField>();
5179

52-
public List<IEncapsulateFieldCandidate> EncapsulationCandidates { set; get; } = new List<IEncapsulateFieldCandidate>();
53-
54-
public IEnumerable<IEncapsulateFieldCandidate> SelectedFieldCandidates
80+
public IEnumerable<IEncapsulatableField> SelectedFieldCandidates
5581
=> EncapsulationCandidates.Where(v => v.EncapsulateFlag);
5682

5783
public IEnumerable<IUserDefinedTypeCandidate> UDTFieldCandidates
@@ -64,27 +90,12 @@ public IEnumerable<IUserDefinedTypeCandidate> SelectedUDTFieldCandidates
6490
.Where(v => v is IUserDefinedTypeCandidate)
6591
.Cast<IUserDefinedTypeCandidate>();
6692

67-
public IEncapsulateFieldCandidate this[string encapsulatedFieldTargetID]
93+
public IEncapsulatableField this[string encapsulatedFieldTargetID]
6894
=> EncapsulationCandidates.Where(c => c.TargetID.Equals(encapsulatedFieldTargetID)).Single();
6995

70-
public IEncapsulateFieldCandidate this[Declaration fieldDeclaration]
96+
public IEncapsulatableField this[Declaration fieldDeclaration]
7197
=> EncapsulationCandidates.Where(c => c.Declaration == fieldDeclaration).Single();
7298

73-
////TODO: Get rid of this property
74-
//private bool _convertFieldsToUDTMembers;
75-
//public bool ConvertFieldsToUDTMembers
76-
//{
77-
// set
78-
// {
79-
// _convertFieldsToUDTMembers = value;
80-
81-
// EncapsulateFieldStrategy = value
82-
// ? EncapsulateFieldStrategy.ConvertFieldsToUDTMembers
83-
// : EncapsulateFieldStrategy.UseBackingFields;
84-
// }
85-
// get => _convertFieldsToUDTMembers;
86-
//}
87-
8899
private IObjectStateUDT _activeObjectStateUDT;
89100
public IObjectStateUDT StateUDTField
90101
{
@@ -102,39 +113,6 @@ public IObjectStateUDT StateUDTField
102113
get => _activeObjectStateUDT ?? _newObjectStateUDT;
103114
}
104115

105-
public void AssignCandidateValidations(EncapsulateFieldStrategy strategy)
106-
{
107-
foreach (var candidate in EncapsulationCandidates)
108-
{
109-
candidate.ConvertFieldToUDTMember = strategy == EncapsulateFieldStrategy.ConvertFieldsToUDTMembers;
110-
111-
candidate.ConflictFinder = ConflictDetector;
112-
if (strategy == EncapsulateFieldStrategy.UseBackingFields)
113-
{
114-
if (candidate is IUserDefinedTypeCandidate)
115-
{
116-
candidate.NameValidator = _validatorProvider.NameOnlyValidator(Validators.UserDefinedType);
117-
}
118-
else if (candidate is IUserDefinedTypeMemberCandidate)
119-
{
120-
candidate.NameValidator = candidate.Declaration.IsArray
121-
? _validatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMemberArray)
122-
: _validatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMember);
123-
}
124-
else
125-
{
126-
candidate.NameValidator = _validatorProvider.NameOnlyValidator(Validators.Default);
127-
}
128-
}
129-
else
130-
{
131-
candidate.NameValidator = candidate.Declaration.IsArray
132-
? _validatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMemberArray)
133-
: _validatorProvider.NameOnlyValidator(Validators.UserDefinedTypeMember);
134-
}
135-
}
136-
}
137-
138116
public string PreviewRefactoring() => _previewDelegate(this);
139117

140118
private HashSet<IObjectStateUDT> _objStateCandidates;

0 commit comments

Comments
 (0)