protected override bool CanAddImportForMethod(Diagnostic diagnostic, ref SyntaxNode node) { switch (diagnostic.Id) { case CS1061: if (node.IsKind(SyntaxKind.ConditionalAccessExpression)) { node = (node as ConditionalAccessExpressionSyntax).WhenNotNull; } else if (node.IsKind(SyntaxKind.MemberBindingExpression)) { node = (node as MemberBindingExpressionSyntax).Name; } else if (node.Parent.IsKind(SyntaxKind.CollectionInitializerExpression)) { return true; } break; case CS0122: break; case CS1503: //// look up its corresponding method name var parent = node.GetAncestor<InvocationExpressionSyntax>(); if (parent == null) { return false; } var method = parent.Expression as MemberAccessExpressionSyntax; if (method != null) { node = method.Name; } break; default: return false; } var simpleName = node as SimpleNameSyntax; if (!simpleName.IsParentKind(SyntaxKind.SimpleMemberAccessExpression) && !simpleName.IsParentKind(SyntaxKind.MemberBindingExpression)) { return false; } var memberAccess = simpleName.Parent as MemberAccessExpressionSyntax; var memberBinding = simpleName.Parent as MemberBindingExpressionSyntax; if (memberAccess.IsParentKind(SyntaxKind.SimpleMemberAccessExpression) || memberAccess.IsParentKind(SyntaxKind.ElementAccessExpression) || memberBinding.IsParentKind(SyntaxKind.SimpleMemberAccessExpression) || memberBinding.IsParentKind(SyntaxKind.ElementAccessExpression)) { return false; } if (!node.IsMemberAccessExpressionName()) { return false; } return true; }