public ConstructorDefinitionTranslation(
            ConstructorInfo ctor,
            ITranslationSettings settings)
        {
            _accessibility         = GetAccessibility(ctor);
            _typeNameTranslation   = new TypeNameTranslation(ctor.DeclaringType, settings);
            _parametersTranslation = new ParameterSetDefinitionTranslation(ctor, settings);

            TranslationSize =
                _typeNameTranslation.TranslationSize +
                _parametersTranslation.TranslationSize;

            FormattingSize =
                settings.GetKeywordFormattingSize() + // <- for modifiers
                _typeNameTranslation.FormattingSize +
                _parametersTranslation.FormattingSize;
        }
        public ParameterSetDefinitionTranslation(
            MethodBase method,
            ITranslationSettings settings)
        {
            _settings       = settings;
            _parameters     = method.GetParameters();
            _parameterCount = _parameters.Length;

            if (_parameterCount == 0)
            {
                _parameterTranslations = Enumerable <ITranslatable> .EmptyArray;
                TranslationSize        = 2;
                return;
            }

            _parameterTranslations = new ITranslatable[_parameterCount];
            var translationSize       = 6;
            var formattingSize        = 0;
            var keywordFormattingSize = settings.GetKeywordFormattingSize();
            var finalParameterIndex   = _parameterCount - 1;

            for (var i = 0; ;)
            {
                var parameter     = _parameters[i];
                var parameterType = parameter.ParameterType;

                if (parameter.IsOut)
                {
                    parameterType   = parameterType.GetElementType();
                    formattingSize += keywordFormattingSize;
                }
                else if (parameterType.IsByRef)
                {
                    parameterType   = parameterType.GetElementType();
                    formattingSize += keywordFormattingSize;
                }
                else if (i == finalParameterIndex && parameter.IsParamsArray())
                {
                    formattingSize += keywordFormattingSize;
                }

                var typeNameTranslation = new TypeNameTranslation(parameterType, settings);

                translationSize += typeNameTranslation.TranslationSize;
                formattingSize  += typeNameTranslation.FormattingSize;

                _parameterTranslations[i] = typeNameTranslation;

                ++i;

                if (i == _parameterCount)
                {
                    break;
                }

                translationSize += 3;
            }

            TranslationSize = translationSize;
            FormattingSize  = formattingSize;
        }
Exemplo n.º 3
0
        private MethodDefinitionTranslation(
            MethodInfo method,
            ITranslationSettings settings)
        {
            _accessibility = GetAccessibility(method);
            _modifiers     = GetModifiers(method);

            _returnTypeTranslation =
                new TypeNameTranslation(method.ReturnType, settings);

            if (method.DeclaringType != null)
            {
                _declaringTypeNameTranslation =
                    new TypeNameTranslation(method.DeclaringType, settings);
            }

            _methodName = method.Name;

            if (method.IsGenericMethod)
            {
                TranslationSize += 2;

                var genericArguments = method.GetGenericArguments();
                _genericArgumentCount = genericArguments.Length;

                _genericArgumentTranslations = new ITranslatable[_genericArgumentCount];

                for (var i = 0; ;)
                {
                    var argumentTranslation = new TypeNameTranslation(genericArguments[i], settings);

                    TranslationSize += argumentTranslation.TranslationSize;
                    FormattingSize  += argumentTranslation.FormattingSize;
                    _genericArgumentTranslations[i] = argumentTranslation;

                    ++i;

                    if (i == _genericArgumentCount)
                    {
                        break;
                    }

                    TranslationSize += ", ".Length;
                }
            }
            else
            {
                _genericArgumentTranslations = Enumerable <ITranslatable> .EmptyArray;
            }

            _parametersTranslation = new ParameterSetDefinitionTranslation(method, settings);

            TranslationSize =
                _accessibility.Length +
                _modifiers.Length +
                _returnTypeTranslation.TranslationSize +
                _methodName.Length;

            var keywordFormattingSize = settings.GetKeywordFormattingSize();

            FormattingSize =
                keywordFormattingSize + // <- For modifiers
                _returnTypeTranslation.FormattingSize;

            if (_declaringTypeNameTranslation != null)
            {
                TranslationSize += _declaringTypeNameTranslation.TranslationSize + 1;
                FormattingSize  += _declaringTypeNameTranslation.FormattingSize;
            }
        }