コード例 #1
0
        private IObjectStateUDT CreateStateUDTField()
        {
            var stateUDT = new ObjectStateUDT(_targetQMN) as IObjectStateUDT;

            EncapsulateFieldValidationsProvider.AssignNoConflictIdentifiers(stateUDT, _declarationFinderProvider);

            stateUDT.IsSelected = true;

            return(stateUDT);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
        }