private void CreateRefactoringElements() { var fieldDeclarations = _declarationFinderProvider.DeclarationFinder .Members(_targetQMN) .Where(v => v.IsMemberVariable() && !v.IsWithEvents); var defaultNamesValidator = EncapsulateFieldValidationsProvider.NameOnlyValidator(NameValidators.Default); var candidates = new List <IEncapsulateFieldCandidate>(); foreach (var fieldDeclaration in fieldDeclarations) { Debug.Assert(!fieldDeclaration.DeclarationType.Equals(DeclarationType.UserDefinedTypeMember)); var fieldEncapsulationCandidate = CreateCandidate(fieldDeclaration, defaultNamesValidator); candidates.Add(fieldEncapsulationCandidate); } Candidates = candidates; ObjectStateUDTCandidates = BuildObjectStateUDTCandidates(candidates).ToList(); ObjectStateUDT = ObjectStateUDTCandidates.FirstOrDefault(os => os.AsTypeDeclaration.IdentifierName.StartsWith(_defaultObjectStateUDTTypeName, StringComparison.InvariantCultureIgnoreCase)); DefaultObjectStateUDT = CreateStateUDTField(); DefaultObjectStateUDT.IsSelected = true; if (ObjectStateUDT != null) { ObjectStateUDT.IsSelected = true; DefaultObjectStateUDT.IsSelected = false; } ObjectStateUDTCandidates = ObjectStateUDTCandidates.Concat(new IObjectStateUDT[] { DefaultObjectStateUDT }); ValidationsProvider = new EncapsulateFieldValidationsProvider(Candidates, ObjectStateUDTCandidates); var conflictsFinder = ValidationsProvider.ConflictDetector(EncapsulateFieldStrategy.UseBackingFields, _declarationFinderProvider); foreach (var candidate in candidates) { candidate.ConflictFinder = conflictsFinder; } }
private IEncapsulateFieldCandidate CreateCandidate(Declaration target, IValidateVBAIdentifiers validator) { if (target.IsUserDefinedType()) { var udtValidator = EncapsulateFieldValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedType); var udtField = new UserDefinedTypeCandidate(target, udtValidator) as IUserDefinedTypeCandidate; (Declaration udtDeclaration, IEnumerable <Declaration> udtMembers) = GetUDTAndMembersForField(udtField); udtField.TypeDeclarationIsPrivate = udtDeclaration.HasPrivateAccessibility(); udtField.NameValidator = udtValidator; foreach (var udtMemberDeclaration in udtMembers) { var udtMemberValidator = EncapsulateFieldValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMember); if (udtMemberDeclaration.IsArray) { udtMemberValidator = EncapsulateFieldValidationsProvider.NameOnlyValidator(NameValidators.UserDefinedTypeMemberArray); } var candidateUDTMember = new UserDefinedTypeMemberCandidate(CreateCandidate(udtMemberDeclaration, udtMemberValidator), udtField) as IUserDefinedTypeMemberCandidate; udtField.AddMember(candidateUDTMember); } var udtVariablesOfSameType = _declarationFinderProvider.DeclarationFinder.UserDeclarations(DeclarationType.Variable) .Where(v => v.AsTypeDeclaration == udtDeclaration); udtField.CanBeObjectStateUDT = udtField.TypeDeclarationIsPrivate && udtField.Declaration.HasPrivateAccessibility() && udtVariablesOfSameType.Count() == 1; return(udtField); } else if (target.IsArray) { return(new ArrayCandidate(target, validator)); } var candidate = new EncapsulateFieldCandidate(target, validator); return(candidate); }