protected virtual void CheckProjectItems([NotNull] ICheckerContext context, [NotNull, ItemNotNull] IRule[] rules)
        {
            var items = context.Project.ProjectItems.Where(i => !(i is DatabaseProjectItem) || !((DatabaseProjectItem)i).IsImport).ToArray();
            foreach (var projectItem in items)
            {
                var ruleContext = new ConventionRuleContext(context.Trace, projectItem);

                foreach (var rule in rules)
                {
                    switch (rule.Filter.ToLowerInvariant())
                    {
                        case "items":
                            var item = projectItem as Item;
                            if (item == null)
                            {
                                continue;
                            }

                            break;
                        case "templates":
                            var template = projectItem as Template;
                            if (template == null)
                            {
                                continue;
                            }

                            break;

                        case "databaseprojectitems":
                            var databaseProjectItem = projectItem as DatabaseProjectItem;
                            if (databaseProjectItem == null)
                            {
                                continue;
                            }

                            break;

                        case "file":
                            var file = projectItem as File;
                            if (file == null)
                            {
                                continue;
                            }

                            break;

                        case "project":
                            continue;
                    }

                    rule.Execute(ruleContext);

                    if (ruleContext.IsAborted)
                    {
                        break;
                    }
                }
            }
        }
        protected virtual void CheckProject([NotNull] ICheckerContext context, [NotNull, ItemNotNull] IRule[] rules)
        {
            var ruleContext = new ConventionRuleContext(context.Trace, context.Project);

            foreach (var rule in rules.Where(rule => string.Equals(rule.Filter, "project", StringComparison.OrdinalIgnoreCase)))
            {
                rule.Execute(ruleContext);

                if (ruleContext.IsAborted)
                {
                    break;
                }
            }
        }