internal static ExpressionSyntax GetDefaultValueMinimalSyntax(this IParameterSymbol parameterSymbol, SemanticModel semanticModel, int position, SymbolDisplayFormat format = null) { if (parameterSymbol == null) throw new ArgumentNullException(nameof(parameterSymbol)); if (!parameterSymbol.HasExplicitDefaultValue) throw new ArgumentException("Parameter must specify default value.", nameof(parameterSymbol)); object value = parameterSymbol.ExplicitDefaultValue; ITypeSymbol typeSymbol = parameterSymbol.Type; if (typeSymbol.IsEnum()) { if (value == null) return NullLiteralExpression(); IFieldSymbol fieldSymbol = typeSymbol.FindField(f => f.HasConstantValue && value.Equals(f.ConstantValue)); TypeSyntax type = typeSymbol.ToMinimalTypeSyntax(semanticModel, position, format); if (fieldSymbol != null) { return SimpleMemberAccessExpression(type, IdentifierName(fieldSymbol.Name)); } else { return CastExpression(type, LiteralExpression(value)); } } if (value == null && !typeSymbol.IsReferenceTypeOrNullableType()) { return DefaultExpression(typeSymbol.ToMinimalTypeSyntax(semanticModel, position, format)); } return LiteralExpression(value); }
internal static ExpressionSyntax GetDefaultValueSyntax(this IParameterSymbol parameterSymbol) { if (parameterSymbol == null) { throw new ArgumentNullException(nameof(parameterSymbol)); } if (parameterSymbol.HasExplicitDefaultValue) { object value = parameterSymbol.ExplicitDefaultValue; ITypeSymbol type = parameterSymbol.Type; if (type.IsEnum()) { if (value != null) { IFieldSymbol fieldSymbol = type.FindField(f => f.HasConstantValue && value.Equals(f.ConstantValue)); if (fieldSymbol != null) { return(SimpleMemberAccessExpression(type.ToTypeSyntax(), IdentifierName(fieldSymbol.Name))); } else { return(CastExpression(type.ToTypeSyntax().WithSimplifierAnnotation(), LiteralExpression(value))); } } } else { return(LiteralExpression(value)); } } return(null); }