public ParameterSetTranslation WithoutParentheses() { _parenthesesMode = ParenthesesMode.Never; TranslationSize -= 2; return(this); }
private ParameterSetTranslation( IMethod method, IEnumerable <Expression> parameters, int count, ITranslationContext context) { _settings = context.Settings; _parenthesesMode = ParenthesesMode.Auto; if (count == 0) { _parameterTranslations = Enumerable <CodeBlockTranslation> .EmptyArray; TranslationSize = _openAndCloseParentheses.Length; return; } var methodProvided = method != null; if (methodProvided && method.IsExtensionMethod) { parameters = parameters.Skip(1); --count; } Count = count; ParameterInfo[] methodParameters; if (methodProvided) { methodParameters = method.GetParameters(); parameters = GetAllParameters(parameters, methodParameters); } else { methodParameters = null; } var hasSingleParameter = Count == 1; var singleParameterIsMultiLineLambda = false; var showParameterTypeNames = context.Settings.ShowLambdaParamTypes; var translationSize = 0; var formattingSize = 0; _parameterTranslations = parameters .Project((p, index) => { ITranslation translation; if (CanBeConvertedToMethodGroup(p, out var lambdaBodyMethodCall)) { translation = new MethodGroupTranslation( Lambda, lambdaBodyMethodCall.GetSubjectTranslation(context), lambdaBodyMethodCall.Method, context); goto CreateCodeBlock; } if (methodProvided) { var parameterIndex = index; if (Count != count) { // If a parameter is a params array then index will increase // past parameterCount, so adjust here: parameterIndex -= Count - count; } // ReSharper disable once PossibleNullReferenceException translation = GetParameterTranslation(p, methodParameters[parameterIndex], context); goto CreateCodeBlock; } translation = context.GetTranslationFor(p); if (showParameterTypeNames && (translation is IParameterTranslation parameterTranslation)) { parameterTranslation.WithTypeNames(context); WithParentheses(); } CreateCodeBlock: translationSize += translation.TranslationSize; formattingSize += translation.FormattingSize; // TODO: Only use code blocks where useful: var parameterCodeBlock = new CodeBlockTranslation(translation, context).WithoutTermination(); if (hasSingleParameter && parameterCodeBlock.IsMultiStatementLambda(context)) { singleParameterIsMultiLineLambda = true; parameterCodeBlock.WithSingleLamdaParameterFormatting(); } return(parameterCodeBlock); }) .ToArray(); _hasSingleMultiStatementLambdaParameter = singleParameterIsMultiLineLambda; TranslationSize = translationSize + (Count * ", ".Length) + 4; FormattingSize = formattingSize; }
public ParameterSetTranslation WithParentheses() { _parenthesesMode = ParenthesesMode.Always; return(this); }