Skip to content

Commit

Permalink
Fix analyzer ReturnTaskInsteadOfNull (RCS1210).
Browse files Browse the repository at this point in the history
  • Loading branch information
josefpihrt committed Oct 20, 2017
1 parent be730bb commit e7d131b
Showing 1 changed file with 24 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -283,16 +283,36 @@ public static InvocationExpressionSyntax CreateNewExpression(
SemanticModel semanticModel,
CancellationToken cancellationToken)
{
var typeSymbol = semanticModel.GetTypeInfo(expression, cancellationToken).ConvertedType as INamedTypeSymbol;
var typeSymbol = (INamedTypeSymbol)semanticModel.GetTypeInfo(expression, cancellationToken).ConvertedType;

int position = expression.SpanStart;

TypeSyntax type = typeSymbol.ToMinimalTypeSyntax(semanticModel, position);
ITypeSymbol typeArgument = typeSymbol.TypeArguments[0];

TypeSyntax type = typeArgument.ToMinimalTypeSyntax(semanticModel, position);

ExpressionSyntax defaultValue = typeArgument.ToDefaultValueSyntax(type);

SimpleNameSyntax name;

if (defaultValue.IsKind(
SyntaxKind.TrueLiteralExpression,
SyntaxKind.FalseLiteralExpression,
SyntaxKind.CharacterLiteralExpression,
SyntaxKind.SimpleMemberAccessExpression,
SyntaxKind.DefaultExpression))
{
name = IdentifierName("FromResult");
}
else
{
name = GenericName("FromResult", type);
}

InvocationExpressionSyntax newNode = SimpleMemberInvocationExpression(
semanticModel.GetTypeByMetadataName(MetadataNames.System_Threading_Tasks_Task).ToMinimalTypeSyntax(semanticModel, position),
GenericName("FromResult", typeSymbol.TypeArguments[0].ToMinimalTypeSyntax(semanticModel, position)),
Argument(typeSymbol.ToDefaultValueSyntax(type)));
name,
Argument(defaultValue));

return newNode.WithTriviaFrom(expression);
}
Expand Down

0 comments on commit e7d131b

Please sign in to comment.