private static List <KBObject> GetObjectsWithProblems(List <KBObject> objs, IOutputService output) { int numObj = 0; int objWithProblems = 0; List <KBObject> objectsWithProblems = new List <KBObject>(); foreach (KBObject obj in objs) { ICallableObject callableObject = obj as ICallableObject; if (callableObject != null) { numObj += 1; if ((numObj % 100) == 0) { output.AddLine("KBDoctor", "Processing " + obj.Name); } foreach (Signature signature in callableObject.GetSignatures()) { Boolean someInOut = false; foreach (Parameter parm in signature.Parameters) { if (parm.Accessor.ToString() == "PARM_INOUT") { someInOut = true; break; } } if (someInOut) { string ruleParm = Utility.ExtractRuleParm(obj); if (ruleParm != "") { int countparms = ruleParm.Split(new char[] { ',' }).Length; int countsemicolon = ruleParm.Split(new char[] { ':' }).Length - 1; if (countparms != countsemicolon) { objWithProblems += 1; objectsWithProblems.Add(obj); OutputError err = new OutputError("Parameter without IN/OUT/INOUT ", MessageLevel.Error, new KBObjectPosition(obj.Parts.Get <RulesPart>())); output.Add("KBDoctor", err); } } } } } } return(objectsWithProblems); }