コード例 #1
0
    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;
    }
コード例 #2
0
    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();
    }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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());
        }