Your best bet may be a reflection - it should be easy enough to go through all the members of all types, where they are methods, and they have at least one optional parameter.
This does not replace you, but it can give you a list of all abusive members.
Sort of:
foreach (Type tp in currentAssembly.GetTypes()) foreach (MethodInfo func in tp.GetMethods()) if(func.GetParameters().Any(p=>p.IsOptional)) Console.WriteLine(func.ToString());
Keith source share