/// <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))); }
public static bool IsOfType([NotNull] this ArgumentSyntax argument, [NotNull] SemanticModel semanticModel, [NotNull] ITypeSymbol argumentType) { Requires.NotNull(argument, nameof(argument)); Requires.NotNull(semanticModel, nameof(semanticModel)); Requires.NotNull(argumentType, nameof(argumentType)); return(Equals(argument.GetParameterSymbol(semanticModel).Type, argumentType)); }
public static bool HasAttribute <T>([NotNull] this ArgumentSyntax argument, [NotNull] SemanticModel semanticModel) where T : Attribute { Requires.NotNull(argument, nameof(argument)); Requires.NotNull(semanticModel, nameof(semanticModel)); var parameterSymbol = argument.GetParameterSymbol(semanticModel); return(parameterSymbol.HasAttribute <T>(semanticModel)); }
public static bool IsOfType <T>([NotNull] this ArgumentSyntax argument, [NotNull] SemanticModel semanticModel) { Requires.NotNull(argument, nameof(argument)); Requires.NotNull(semanticModel, nameof(semanticModel)); var typeSymbol = semanticModel.GetTypeSymbol <T>(); Requires.That(typeSymbol != null, "Unable to determine type symbol of type '{0}'.", typeof(T).FullName); return(Equals(argument.GetParameterSymbol(semanticModel).Type, typeSymbol)); }