protected override void Run(IInvocationExpression invocationExpression, ElementProblemAnalyzerData data, IHighlightingConsumer consumer) { if (!invocationExpression.IsUnderAsyncDeclaration()) { return; } var referenceCurrentResolveResult = invocationExpression.Reference?.Resolve(); if (referenceCurrentResolveResult?.IsValid() != true) { return; } var invocationMethod = referenceCurrentResolveResult.DeclaredElement as IMethod; if (invocationMethod == null) { return; } var invokedType = (invocationExpression.ConditionalQualifier as IReferenceExpression)?.QualifierExpression?.Type(); var findingReslt = asyncMethodFinder.FindEquivalentAsyncMethod(invocationMethod, invokedType); if (findingReslt.Method == null || !findingReslt.ParameterCompareResult.CanBeConvertedToAsync()) { return; } consumer.AddHighlighting(new CanBeUseAsyncMethodHighlighting(invocationExpression)); }
public bool TryReplaceInvocationToAsync(IInvocationExpression invocationExpression) { var referenceCurrentResolveResult = invocationExpression.Reference?.Resolve(); if (referenceCurrentResolveResult?.IsValid() != true) { return(false); } var invocationMethod = referenceCurrentResolveResult.DeclaredElement as IMethod; if (invocationMethod == null) { return(false); } var invokedType = (invocationExpression.ConditionalQualifier as IReferenceExpression)?.QualifierExpression?.Type(); var findingResult = asyncMethodFinder.FindEquivalentAsyncMethod(invocationMethod, invokedType); if (findingResult.CanBeConvertedToAsync()) { if (!TryConvertParameterFuncToAsync(invocationExpression, findingResult.ParameterCompareResult)) { return(false); } asyncInvocationReplacer.ReplaceInvocation(invocationExpression, findingResult.Method.ShortName, true); return(true); } return(false); }
public bool CanReplace(IInvocationExpression element) { var referenceCurrentResolveResult = element.Reference?.Resolve(); if (referenceCurrentResolveResult?.IsValid() != true) { return(false); } var invocationMethod = referenceCurrentResolveResult.DeclaredElement as IMethod; if (invocationMethod == null) { return(false); } var invokedType = (element.ConditionalQualifier as IReferenceExpression)?.QualifierExpression?.Type(); var findingResult = asyncMethodFinder.FindEquivalentAsyncMethod(invocationMethod, invokedType); if (findingResult.Method == null || !findingResult.ParameterCompareResult.CanBeConvertedToAsync()) { return(false); } return(true); }