public ConvertToUDTMember(IEncapsulateFieldCandidate candidate, IObjectStateUDT objStateUDT) { _wrapped = candidate; PropertyIdentifier = _wrapped.PropertyIdentifier; ObjectStateUDT = objStateUDT; _uniqueID = BuildUniqueID(candidate, objStateUDT); _hashCode = _uniqueID.GetHashCode(); }
private bool ConflictsWithExistingUDTMembers(IObjectStateUDT objectStateUDT, string identifier) { if (objectStateUDT is null) { return(false); } return(objectStateUDT.ExistingMembers.Any(nm => nm.IdentifierName.IsEquivalentVBAIdentifierTo(identifier))); }
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; }
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); }
public ConvertFieldsToUDTMembers(IDeclarationFinderProvider declarationFinderProvider, EncapsulateFieldModel model, IIndenter indenter, ICodeBuilder codeBuilder) : base(declarationFinderProvider, model, indenter, codeBuilder) { _stateUDTField = model.ObjectStateUDTField; }
public EncapsulateFieldAsUDTMemberCandidate(IEncapsulateFieldCandidate candidate, IObjectStateUDT objStateUDT) { _wrapped = candidate; ObjectStateUDT = objStateUDT; _hashCode = $"{candidate.QualifiedModuleName.Name}.{candidate.IdentifierName}".GetHashCode(); }