public bool ShouldUseTap(MemberAccessExpressionSyntax memberAccessExpression) { if (memberAccessExpression.IsWrappedInAwaitExpression() || memberAccessExpression.IsWrappedInLock()) { return false; } var identifierName = memberAccessExpression.Name as IdentifierNameSyntax; if (identifierName?.Identifier.ValueText != nameof(Task<int>.Result)) { return false; } var lambdaExpression = memberAccessExpression.FirstAncestorOrSelf<LambdaExpressionSyntax>(); if (lambdaExpression == null) { var methodDeclaration = memberAccessExpression.FirstAncestorOrSelf<MethodDeclarationSyntax>(); if (methodDeclaration == null || methodDeclaration.HasOutOrRefParameters()) { return false; } } var symbol = FindSymbol(memberAccessExpression.Expression); if (symbol == null) { return false; } var taskSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName); var taskOfTSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName + "`1"); return symbol.IsGenericType ? symbol.ConstructedFrom.Equals(taskOfTSymbol) : symbol.Equals(taskSymbol); }
public bool ShouldUseTap(MemberAccessExpressionSyntax memberAccessExpression) { if (memberAccessExpression.IsWrappedInAwaitExpression() || memberAccessExpression.IsWrappedInLock()) { return(false); } var identifierName = memberAccessExpression.Name as IdentifierNameSyntax; if (identifierName?.Identifier.ValueText != nameof(Task <int> .Result)) { return(false); } var lambdaExpression = memberAccessExpression.FirstAncestorOrSelf <LambdaExpressionSyntax>(); if (lambdaExpression == null) { var methodDeclaration = memberAccessExpression.FirstAncestorOrSelf <MethodDeclarationSyntax>(); if (methodDeclaration == null || methodDeclaration.HasOutOrRefParameters()) { return(false); } } var symbol = FindSymbol(memberAccessExpression.Expression); if (symbol == null) { return(false); } var taskSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName); var taskOfTSymbol = semanticModel.Compilation.GetTypeByMetadataName(typeof(Task).FullName + "`1"); return(symbol.IsGenericType ? symbol.ConstructedFrom.Equals(taskOfTSymbol) : symbol.Equals(taskSymbol)); }