private static IEnumerable<string> DeclaredIdentifiers(MethodDeclarationSyntax syntax) { var methodParameterNames = syntax.ParameterList.Parameters .Select(p => p.Identifier.ValueText); var methodLocalVars = syntax .DescendantNodes() .OfType<LocalDeclarationStatementSyntax>() .SelectMany(d => d.Declaration.Variables) .Select(v => v.Identifier.ValueText); var classFieldIds = syntax.ContainingClass() .DescendantNodes() .OfType<FieldDeclarationSyntax>() .SelectMany(f => f.Declaration.Variables) .Select(v => v.Identifier.ValueText); var classPropertyIds = syntax.ContainingClass() .DescendantNodes() .OfType<PropertyDeclarationSyntax>() .Select(p => p.Identifier.ValueText); var classMethodIds = syntax.ContainingClass() .DescendantNodes() .OfType<MethodDeclarationSyntax>() .Select(m => m.Identifier.ValueText); var classDelegateIds = syntax.ContainingClass() .DescendantNodes() .OfType<DelegateDeclarationSyntax>() .Select(d => d.Identifier.ValueText); return methodParameterNames .Concat(methodLocalVars) .Concat(classFieldIds) .Concat(classPropertyIds) .Concat(classMethodIds) .Concat(classDelegateIds); }