private static bool HasParamArray(IWithParameters declaration) { if (declaration == null) return false; IParameterElementCollection parameters = declaration.Parameters; if (parameters == null || parameters.Count == 0) return false; return parameters[parameters.Count - 1].IsParamArray; }
private static bool IsExtensionMethod(IWithParameters declaration) { if (declaration == null || declaration.Parameters == null || declaration.Parameters.Count == 0) return false; IMethodElement methodElement = declaration as IMethodElement; if (methodElement == null) return false; return methodElement.IsExtensionMethod(); }
private void rpUseNamedParameters_CheckAvailability(object sender, CheckContentAvailabilityEventArgs ea) { LanguageElement methodCall = GetMethodCall(ea.Element); if (methodCall == null) { return; } IHasArguments hasArguments = methodCall as IHasArguments; if (hasArguments == null) { return; } IWithParameters declaration = GetValidDeclaration(methodCall); if (declaration == null) { return; } ExpressionCollection arguments = hasArguments.Arguments; if (arguments == null || arguments.Count <= 0) { return; } bool hasAttributeVarInitializer = false; foreach (Expression arg in arguments) { if (arg is AttributeVariableInitializer) { hasAttributeVarInitializer = true; break; } if (arg is AnonymousMethodExpression) { return; } } if (!hasAttributeVarInitializer) { ea.Available = true; } }
private static string GetGeneratedCode(LanguageElement originalCall) { if (!(originalCall is IHasArguments)) { return(null); } ExpressionCollection originalArguments = (originalCall as IHasArguments).Arguments; if (originalArguments == null) { return(null); } LanguageElement replacementCall = originalCall.Clone() as LanguageElement; (replacementCall as IHasArguments).Arguments.Clear(); IWithParameters declaration = GetValidDeclaration(originalCall); if (declaration == null || !(declaration.Parameters.Count == originalArguments.Count || (declaration.Parameters.Count == originalArguments.Count + 1 && HasParamArray(declaration)) || (declaration.Parameters.Count == originalArguments.Count + 1 && IsExtensionMethod(declaration)) )) { return(null); } int startParamIndex = 0; if (IsExtensionMethod(declaration)) { startParamIndex = 1; } for (int i = 0; i < originalArguments.Count; i++) { Expression originalArgument = originalArguments[i]; AttributeVariableInitializer namedArgument = originalArgument as AttributeVariableInitializer; if (namedArgument == null) { ElementReferenceExpression leftSide = new ElementReferenceExpression(declaration.Parameters[startParamIndex + i].Name); namedArgument = new AttributeVariableInitializer(); namedArgument.LeftSide = leftSide; namedArgument.RightSide = originalArgument.Clone() as Expression; } (replacementCall as IHasArguments).Arguments.Add(namedArgument); } return(CodeRush.CodeMod.GenerateCode(replacementCall, true)); }
private static bool HasParamArray(IWithParameters declaration) { if (declaration == null) { return(false); } IParameterElementCollection parameters = declaration.Parameters; if (parameters == null || parameters.Count == 0) { return(false); } return(parameters[parameters.Count - 1].IsParamArray); }
private static bool IsExtensionMethod(IWithParameters declaration) { if (declaration == null || declaration.Parameters == null || declaration.Parameters.Count == 0) { return(false); } IMethodElement methodElement = declaration as IMethodElement; if (methodElement == null) { return(false); } return(methodElement.IsExtensionMethod()); }