Example #1
0
 public ConvertToUDTMember(IEncapsulateFieldCandidate candidate, IObjectStateUDT objStateUDT)
 {
     _wrapped           = candidate;
     PropertyIdentifier = _wrapped.PropertyIdentifier;
     ObjectStateUDT     = objStateUDT;
     _uniqueID          = BuildUniqueID(candidate, objStateUDT);
     _hashCode          = _uniqueID.GetHashCode();
 }
Example #2
0
        private bool ConflictsWithExistingUDTMembers(IObjectStateUDT objectStateUDT, string identifier)
        {
            if (objectStateUDT is null)
            {
                return(false);
            }

            return(objectStateUDT.ExistingMembers.Any(nm => nm.IdentifierName.IsEquivalentVBAIdentifierTo(identifier)));
        }
Example #3
0
        public EncapsulateFieldUseBackingUDTMemberModel(IObjectStateUDT targetObjectStateUserDefinedTypeField,
                                                        IEnumerable <IEncapsulateFieldAsUDTMemberCandidate> encapsulateAsUDTMemberCandidates,
                                                        IEnumerable <IObjectStateUDT> objectStateUserDefinedTypeCandidates)
        {
            _encapsulateAsUDTMemberCandidates = encapsulateAsUDTMemberCandidates.ToList();
            EncapsulationCandidates           = _encapsulateAsUDTMemberCandidates.Cast <IEncapsulateFieldCandidate>().ToList();

            ObjectStateUDTField = targetObjectStateUserDefinedTypeField;

            ObjectStateUDTCandidates = objectStateUserDefinedTypeCandidates.ToList();

            QualifiedModuleName = encapsulateAsUDTMemberCandidates.First().QualifiedModuleName;
        }
Example #4
0
        public static IObjectStateUDT AssignNoConflictIdentifiers(IObjectStateUDT stateUDT, IDeclarationFinderProvider declarationFinderProvider)
        {
            var members = declarationFinderProvider.DeclarationFinder.Members(stateUDT.QualifiedModuleName);
            var guard   = 0;

            while (guard++ < 10 && members.Any(m => m.IdentifierName.IsEquivalentVBAIdentifierTo(stateUDT.FieldIdentifier)))
            {
                stateUDT.FieldIdentifier = stateUDT.FieldIdentifier.IncrementEncapsulationIdentifier();
            }

            members = declarationFinderProvider.DeclarationFinder.Members(stateUDT.QualifiedModuleName)
                      .Where(m => !_udtTypeIdentifierNonConflictTypes.Any(nct => m.DeclarationType.HasFlag(nct)));

            guard = 0;
            while (guard++ < 10 && members.Any(m => m.IdentifierName.IsEquivalentVBAIdentifierTo(stateUDT.TypeIdentifier)))
            {
                stateUDT.TypeIdentifier = stateUDT.TypeIdentifier.IncrementEncapsulationIdentifier();
            }
            return(stateUDT);
        }
        IObjectStateUDT DetermineObjectStateFieldTarget(IObjectStateUDT defaultObjectStateField, Declaration objectStateFieldTarget, IReadOnlyCollection <IObjectStateUDT> objectStateFieldCandidates)
        {
            var targetStateUDT = defaultObjectStateField;

            if (objectStateFieldTarget != null)
            {
                targetStateUDT = objectStateFieldCandidates.Single(osc => objectStateFieldTarget == osc.Declaration);
            }
            else
            {
                var preExistingDefaultUDTField =
                    objectStateFieldCandidates.Where(osc => osc.TypeIdentifier == defaultObjectStateField.TypeIdentifier &&
                                                     osc.IsExistingDeclaration);

                if (preExistingDefaultUDTField.Any() && preExistingDefaultUDTField.Count() == 1)
                {
                    targetStateUDT = preExistingDefaultUDTField.First();
                }
            }

            targetStateUDT.IsSelected = true;

            return(targetStateUDT);
        }
 public IEncapsulateFieldAsUDTMemberCandidate CreateUDTMemberCandidate(IEncapsulateFieldCandidate fieldCandidate, IObjectStateUDT defaultObjectStateField)
 => new EncapsulateFieldAsUDTMemberCandidate(fieldCandidate, defaultObjectStateField);
        private void InitializeModel(ReplaceReferencesModel model, IEncapsulateFieldCandidate field, IObjectStateUDT objectStateUDTField)
        {
            foreach (var idRef in field.Declaration.References)
            {
                var replacementExpression = field.PropertyIdentifier;

                if (idRef.QualifiedModuleName == field.QualifiedModuleName && field.Declaration.IsArray)
                {
                    replacementExpression = $"{objectStateUDTField.FieldIdentifier}.{field.BackingIdentifier}";
                }

                model.AssignReferenceReplacementExpression(idRef, replacementExpression);
            }
        }
        private void ReplaceEncapsulatedFieldReferences(IEnumerable <IEncapsulateFieldCandidate> nonPrivateUDTFields, IObjectStateUDT objectStateUDTField, IRewriteSession rewriteSession)
        {
            if (!nonPrivateUDTFields.Any())
            {
                return;
            }

            var replaceReferencesModel = new ReplaceReferencesModel()
            {
                ModuleQualifyExternalReferences = true,
            };

            foreach (var field in nonPrivateUDTFields)
            {
                InitializeModel(replaceReferencesModel, field, objectStateUDTField);
            }

            _replaceReferencesRefactoringAction.Refactor(replaceReferencesModel, rewriteSession);
        }
Example #9
0
 public ConvertFieldsToUDTMembers(IDeclarationFinderProvider declarationFinderProvider, EncapsulateFieldModel model, IIndenter indenter, ICodeBuilder codeBuilder)
     : base(declarationFinderProvider, model, indenter, codeBuilder)
 {
     _stateUDTField = model.ObjectStateUDTField;
 }
Example #10
0
 public EncapsulateFieldAsUDTMemberCandidate(IEncapsulateFieldCandidate candidate, IObjectStateUDT objStateUDT)
 {
     _wrapped       = candidate;
     ObjectStateUDT = objStateUDT;
     _hashCode      = $"{candidate.QualifiedModuleName.Name}.{candidate.IdentifierName}".GetHashCode();
 }