@@ -13,68 +13,58 @@ namespace Rubberduck.Refactorings.EncapsulateField
13
13
public class EncapsulateFieldElementFactory
14
14
{
15
15
private readonly IDeclarationFinderProvider _declarationFinderProvider ;
16
- private readonly IEncapsulateFieldNamesValidator _validator ;
16
+ private readonly IEncapsulateFieldValidator _validator ;
17
+ private readonly IValidateEncapsulateFieldNames _namesValidator ;
17
18
private QualifiedModuleName _targetQMN ;
18
19
19
- public EncapsulateFieldElementFactory ( IDeclarationFinderProvider declarationFinderProvider , QualifiedModuleName targetQMN , IEncapsulateFieldNamesValidator validator )
20
+ public EncapsulateFieldElementFactory ( IDeclarationFinderProvider declarationFinderProvider , QualifiedModuleName targetQMN , IEncapsulateFieldValidator validator )
20
21
{
21
22
_declarationFinderProvider = declarationFinderProvider ;
22
23
_validator = validator ;
24
+ _namesValidator = validator as IValidateEncapsulateFieldNames ;
23
25
_targetQMN = targetQMN ;
24
26
}
25
27
26
28
public IObjectStateUDT CreateStateUDTField ( )
27
29
{
28
30
var stateUDT = new ObjectStateUDT ( _targetQMN ) as IObjectStateUDT ;
29
31
30
- stateUDT = SetNonConflictIdentifier ( stateUDT , c => { return _validator . IsConflictingStateUDTFieldIdentifier ( stateUDT ) ; } , ( s ) => { stateUDT . FieldIdentifier = s ; } , ( ) => stateUDT . FieldIdentifier , _validator ) ;
32
+ stateUDT = SetNonConflictIdentifier ( stateUDT , c => { return _validator . IsConflictingStateUDTFieldIdentifier ( stateUDT ) ; } , ( s ) => { stateUDT . FieldIdentifier = s ; } , ( ) => stateUDT . FieldIdentifier , _namesValidator ) ;
31
33
32
- stateUDT = SetNonConflictIdentifier ( stateUDT , c => { return _validator . IsConflictingStateUDTTypeIdentifier ( stateUDT ) ; } , ( s ) => { stateUDT . TypeIdentifier = s ; } , ( ) => stateUDT . TypeIdentifier , _validator ) ;
34
+ stateUDT = SetNonConflictIdentifier ( stateUDT , c => { return _validator . IsConflictingStateUDTTypeIdentifier ( stateUDT ) ; } , ( s ) => { stateUDT . TypeIdentifier = s ; } , ( ) => stateUDT . TypeIdentifier , _namesValidator ) ;
33
35
34
36
return stateUDT ;
35
37
}
36
38
37
- public IEncapsulateFieldCandidate CreateEncapsulationCandidate ( Declaration target )
39
+ private IEncapsulateFieldCandidate CreateCandidate ( Declaration target )
38
40
{
39
- Debug . Assert ( ! target . DeclarationType . Equals ( DeclarationType . UserDefinedTypeMember ) ) ;
40
-
41
- IEncapsulateFieldCandidate candidate = CreateCandidate ( target ) ;
42
-
43
- if ( candidate is IUserDefinedTypeCandidate udtVariable )
41
+ if ( target . IsUserDefinedTypeField ( ) )
44
42
{
45
- ( Declaration udtDeclaration , IEnumerable < Declaration > udtMembers ) = GetUDTAndMembersForField ( udtVariable ) ;
43
+ var udtField = new UserDefinedTypeCandidate ( target , _namesValidator ) as IUserDefinedTypeCandidate ;
44
+
45
+ ( Declaration udtDeclaration , IEnumerable < Declaration > udtMembers ) = GetUDTAndMembersForField ( udtField ) ;
46
46
47
- udtVariable . TypeDeclarationIsPrivate = udtDeclaration . HasPrivateAccessibility ( ) ;
47
+ udtField . TypeDeclarationIsPrivate = udtDeclaration . HasPrivateAccessibility ( ) ;
48
48
49
49
foreach ( var udtMemberDeclaration in udtMembers )
50
50
{
51
- var candidateUDTMember = new UserDefinedTypeMemberCandidate ( CreateCandidate ( udtMemberDeclaration ) , udtVariable , _validator ) as IUserDefinedTypeMemberCandidate ;
51
+ var candidateUDTMember = new UserDefinedTypeMemberCandidate ( CreateCandidate ( udtMemberDeclaration ) , udtField , _namesValidator ) as IUserDefinedTypeMemberCandidate ;
52
52
53
- udtVariable . AddMember ( candidateUDTMember ) ;
53
+ udtField . AddMember ( candidateUDTMember ) ;
54
54
}
55
55
56
56
var udtVariablesOfSameType = _declarationFinderProvider . DeclarationFinder . UserDeclarations ( DeclarationType . Variable )
57
57
. Where ( v => v . AsTypeDeclaration == udtDeclaration ) ;
58
58
59
- udtVariable . CanBeObjectStateUDT = udtVariable . TypeDeclarationIsPrivate && udtVariablesOfSameType . Count ( ) == 1 ;
60
- }
61
-
62
- _validator . RegisterFieldCandidate ( candidate ) ;
59
+ udtField . CanBeObjectStateUDT = udtField . TypeDeclarationIsPrivate && udtVariablesOfSameType . Count ( ) == 1 ;
63
60
64
- return candidate ;
65
- }
66
-
67
- private IEncapsulateFieldCandidate CreateCandidate ( Declaration target )
68
- {
69
- if ( target . IsUserDefinedTypeField ( ) )
70
- {
71
- return new UserDefinedTypeCandidate ( target , _validator ) ;
61
+ return udtField ;
72
62
}
73
63
else if ( target . IsArray )
74
64
{
75
- return new ArrayCandidate ( target , _validator ) ;
65
+ return new ArrayCandidate ( target , _namesValidator ) ;
76
66
}
77
- return new EncapsulateFieldCandidate ( target , _validator ) ;
67
+ return new EncapsulateFieldCandidate ( target , _namesValidator ) ;
78
68
}
79
69
80
70
public IEnumerable < IEncapsulateFieldCandidate > CreateEncapsulationCandidates ( )
@@ -84,17 +74,22 @@ public IEnumerable<IEncapsulateFieldCandidate> CreateEncapsulationCandidates()
84
74
. Where ( v => v . IsMemberVariable ( ) && ! v . IsWithEvents ) ;
85
75
86
76
var candidates = new List < IEncapsulateFieldCandidate > ( ) ;
87
- foreach ( var field in fieldDeclarations )
77
+ foreach ( var fieldDeclaration in fieldDeclarations )
88
78
{
89
- var fieldEncapsulationCandidate = CreateEncapsulationCandidate ( field ) ;
79
+ Debug . Assert ( ! fieldDeclaration . DeclarationType . Equals ( DeclarationType . UserDefinedTypeMember ) ) ;
80
+
81
+ var fieldEncapsulationCandidate = CreateCandidate ( fieldDeclaration ) ;
82
+
83
+ _validator . RegisterFieldCandidate ( fieldEncapsulationCandidate ) ;
84
+
90
85
91
86
candidates . Add ( fieldEncapsulationCandidate ) ;
92
87
}
93
88
94
89
return candidates ;
95
90
}
96
91
97
- private IObjectStateUDT SetNonConflictIdentifier ( IObjectStateUDT candidate , Predicate < IObjectStateUDT > conflictDetector , Action < string > setValue , Func < string > getIdentifier , IEncapsulateFieldNamesValidator validator )
92
+ private IObjectStateUDT SetNonConflictIdentifier ( IObjectStateUDT candidate , Predicate < IObjectStateUDT > conflictDetector , Action < string > setValue , Func < string > getIdentifier , IValidateEncapsulateFieldNames validator )
98
93
{
99
94
var isConflictingIdentifier = conflictDetector ( candidate ) ;
100
95
for ( var count = 1 ; count < 10 && isConflictingIdentifier ; count ++ )
0 commit comments