Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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);
        }