Exemplo n.º 1
0
        public EncapsulationIdentifiers(string field, IValidateVBAIdentifiers identifierValidator)
        {
            _targetIdentifier = field;

            DefaultPropertyName = field.CapitalizeFirstLetter();
            DefaultNewFieldName = (field.ToLowerCaseFirstLetter()).IncrementEncapsulationIdentifier();

            if (field.TryMatchHungarianNotationCriteria(out var nonHungarianName))
            {
                if (identifierValidator.IsValidVBAIdentifier(nonHungarianName, out _))
                {
                    DefaultPropertyName = nonHungarianName;
                    DefaultNewFieldName = field;
                }
            }
            else if (field.StartsWith("m_"))
            {
                var propertyName = field.Substring(2).CapitalizeFirstLetter();
                if (identifierValidator.IsValidVBAIdentifier(propertyName, out _))
                {
                    DefaultPropertyName = propertyName;
                    DefaultNewFieldName = field;
                }
            }

            _fieldAndProperty = new KeyValuePair <string, string>(DefaultNewFieldName, DefaultPropertyName);
        }
        public EncapsulateFieldCandidate(Declaration declaration, IValidateVBAIdentifiers identifierValidator)
        {
            _target       = declaration;
            NameValidator = identifierValidator;
            _rhsParameterIdentifierName = Resources.Refactorings.Refactorings.CodeBuilder_DefaultPropertyRHSParam;

            _fieldAndProperty  = new EncapsulationIdentifiers(declaration.IdentifierName, identifierValidator);
            IdentifierName     = declaration.IdentifierName;
            PropertyAsTypeName = declaration.AsTypeName;
            _qmn = declaration.QualifiedModuleName;

            CanBeReadWrite = true;

            _uniqueID = $"{_qmn.Name}.{declaration.IdentifierName}";
            _hashCode = _uniqueID.GetHashCode();

            ImplementLet = true;
            ImplementSet = false;
            if (_target.IsEnumField() && _target.AsTypeDeclaration.HasPrivateAccessibility())
            {
                //5.3.1 The declared type of a function declaration
                //may not be a private enum name.
                PropertyAsTypeName = Tokens.Long;
            }
            else if (_target.AsTypeName.Equals(Tokens.Variant) &&
                     !_target.IsArray)
            {
                ImplementSet = true;
            }
            else if (Declaration.IsObject)
            {
                ImplementLet = false;
                ImplementSet = true;
            }
        }
Exemplo n.º 3
0
        public ArrayCandidate(Declaration declaration, IValidateVBAIdentifiers validator)
            : base(declaration, validator)
        {
            ImplementLet       = false;
            ImplementSet       = false;
            PropertyAsTypeName = Tokens.Variant;
            CanBeReadWrite     = false;
            IsReadOnly         = true;

            _subscripts = string.Empty;
            if (declaration.Context.TryGetChildContext <VBAParser.SubscriptsContext>(out var ctxt))
            {
                _subscripts = ctxt.GetText();
            }
        }
        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);
        }
Exemplo n.º 5
0
 public UserDefinedTypeCandidate(Declaration declaration, IValidateVBAIdentifiers identifierValidator)
     : base(declaration, identifierValidator)
 {
 }