Example #1
0
		/// <summary>
		///     Normalizes the <paramref name="argument" />.
		/// </summary>
		public override SyntaxNode VisitArgument(ArgumentSyntax argument)
		{
			// Special case for array accesses, as Roslyn doesn't return a symbol for the argument
			if (argument.Parent.Parent is ElementAccessExpressionSyntax)
			{
				var arrayExpression = ((ElementAccessExpressionSyntax)argument.Parent.Parent).Expression;
				if (SemanticModel.GetTypeInfo(arrayExpression).Type.TypeKind == TypeKind.Array)
					return base.VisitArgument(argument);
			}

			var parameterSymbol = argument.GetParameterSymbol(SemanticModel);
			if (parameterSymbol.RefKind != RefKind.None)
				return base.VisitArgument(argument);

			var parameterType = DetermineType(parameterSymbol.Type);
			if (parameterType == ExpressionType.Other)
				return base.VisitArgument(argument);

			return argument.WithExpression(ReplaceImplicitConversion(parameterType, argument.Expression));
		}
		/// <summary>
		///   Normalizes the <paramref name="argument" />.
		/// </summary>
		public override SyntaxNode VisitArgument(ArgumentSyntax argument)
		{
			// Special case for array accesses, as Roslyn doesn't return a symbol for the argument
			if (argument.Parent.Parent is ElementAccessExpressionSyntax)
			{
				var arrayExpression = ((ElementAccessExpressionSyntax)argument.Parent.Parent).Expression;
				var kind = SemanticModel.GetTypeInfo(arrayExpression).Type.TypeKind;
				if (kind == TypeKind.Array || kind == TypeKind.Pointer)
					return base.VisitArgument(argument);
			}

			var parameterSymbol = argument.GetParameterSymbol(SemanticModel);
			if (parameterSymbol.RefKind != RefKind.None)
				return base.VisitArgument(argument);

			var arraySymbol = parameterSymbol.Type as IArrayTypeSymbol;
			var isParamsFormula = arraySymbol != null && parameterSymbol.IsParams && IsFormulaType(arraySymbol.ElementType);

			if (!isParamsFormula && !IsFormulaType(parameterSymbol.Type))
				return base.VisitArgument(argument);

			return argument.WithExpression(ReplaceImplicitConversion(argument.Expression));
		}