public static bool IsUnderAsync([NotNull] this ITreeNode node) { foreach (var containingNode in node.ContainingNodes()) { var methodDeclaration = containingNode as IMethodDeclaration; if (methodDeclaration != null) { return(methodDeclaration.Type.IsTask() || methodDeclaration.Type.IsGenericTask()); } var functionExpression = containingNode as IAnonymousFunctionExpression; if (functionExpression != null) { return(functionExpression.ReturnType.IsTask() || functionExpression.ReturnType.IsGenericTask()); } var functionDeclaration = containingNode as ILocalFunctionDeclaration; if (functionDeclaration != null) { return(functionDeclaration.Type.IsTask() || functionDeclaration.Type.IsGenericTask()); } if (containingNode is IQueryParameterPlatform || containingNode is ICSharpTypeMemberDeclaration) { return(false); } } return(false); }