private bool TryConvertParameterFuncToAsync([NotNull] IInvocationExpression invocationExpression, [NotNull] ParameterCompareResult parameterCompareResult) { var arguments = invocationExpression.Arguments; invocationExpression.PsiModule.GetPsiServices().Transactions.StartTransaction("convertAsyncParameter"); try { for (var i = 0; i < arguments.Count; i++) { var compareResult = parameterCompareResult.ParameterResults[i]; if (compareResult.Action == ParameterCompareResultAction.NeedConvertToAsyncFunc) { var lambdaExpression = arguments[i].Value as ILambdaExpression; if (lambdaExpression == null) { invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); return(false); } lambdaExpression.SetAsync(true); IInvocationExpression innerInvocationExpression; while ((innerInvocationExpression = lambdaExpression.DescendantsInScope <IInvocationExpression>().FirstOrDefault(syncWaitChecker.CanReplaceWaitToAsync)) != null) { syncWaitConverter.ReplaceWaitToAsync(innerInvocationExpression); } IReferenceExpression referenceExpression; while ((referenceExpression = lambdaExpression.DescendantsInScope <IReferenceExpression>().FirstOrDefault(syncWaitChecker.CanReplaceResultToAsync)) != null) { syncWaitConverter.ReplaceResultToAsync(referenceExpression); } var innerInvocationExpressions = lambdaExpression.DescendantsInScope <IInvocationExpression>(); foreach (var innerInvocationExpression2 in innerInvocationExpressions) { if (!TryReplaceInvocationToAsync(innerInvocationExpression2)) { //invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); } } } } } catch (Exception) { invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); return(false); } invocationExpression.PsiModule.GetPsiServices().Transactions.CommitTransaction(); return(true); }
private bool TryConvertParameterFuncToAsync([NotNull] IInvocationExpression invocationExpression, [NotNull] ParameterCompareResult parameterCompareResult) { var arguments = invocationExpression.Arguments; invocationExpression.PsiModule.GetPsiServices().Transactions.StartTransaction("convertAsyncParameter"); try { for (var i = 0; i < arguments.Count; i++) { var compareResult = parameterCompareResult.ParameterResults[i]; if (compareResult.Action == ParameterCompareResultAction.NeedConvertToAsyncFunc) { var lambdaExpression = arguments[i].Value as ILambdaExpression; if (lambdaExpression == null) { invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); return(false); } lambdaExpression.SetAsync(true); var innerInvocationExpressions = lambdaExpression.DescendantsInScope <IInvocationExpression>(); foreach (var innerInvocationExpression in innerInvocationExpressions) { if (!TryReplaceInvocationToAsync(innerInvocationExpression)) { invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); return(false); } } if (awaitEliderChecker.CanElide(lambdaExpression)) { awaitElider.Elide(lambdaExpression); } } } } catch (Exception) { invocationExpression.PsiModule.GetPsiServices().Transactions.RollbackTransaction(); return(false); } invocationExpression.PsiModule.GetPsiServices().Transactions.CommitTransaction(); return(true); }