public static List <ConsumedDefInfo> GetConsumedFields(this InRule.Repository.RuleApplicationDef ruleAppDef)
        {
            var consumedList = new List <ConsumedDefInfo>();
            var network      = DefUsageNetwork.Create(ruleAppDef);

            foreach (var entityDef in ruleAppDef.Entities.OfType <EntityDef>())
            {
                foreach (var fieldDef in entityDef.Fields.OfType <FieldDef>())
                {
                    var usages = network.GetDefUsages(fieldDef.Guid, false);
                    foreach (var usage in usages)
                    {
                        if (usage.UsageType == DefUsageType.ConsumedBy)
                        {
                            var defInfo = consumedList.FirstOrDefault(x => x.TargetDef == fieldDef);
                            if (defInfo == null)
                            {
                                defInfo           = new ConsumedDefInfo();
                                defInfo.TargetDef = fieldDef;
                                consumedList.Add(defInfo);
                            }
                            var relatedDef = usage.Element.GetDef(ruleAppDef);
                            defInfo.ConsumedBy.Add(relatedDef);
                        }
                    }
                }
            }
            return(consumedList);
        }
        public static string GetDefUsageSummary(this InRule.Repository.RuleApplicationDef ruleAppDef)
        {
            var sb = new StringBuilder();

            sb.AppendLine($"----- Field Usage Summary -----");

            sb.AppendLine();
            sb.AppendLine(BuildFieldList($"UNUSED FIELDS", "(Unused)", ruleAppDef.GetUnusedFields()));

            sb.AppendLine();
            sb.AppendLine(BuildFieldList($"CONSUMED FIELDS", "(Consumed)", ruleAppDef.GetConsumedFields().Select(t => t.TargetDef).ToList()));

            sb.AppendLine();
            sb.AppendLine(BuildFieldList($"UPDATED FIELDS", "(Updated)", ruleAppDef.GetUpdatedFields().Select(t => t.TargetDef).ToList()));

            return(sb.ToString());
        }
        public static List <UpdatedDefInfo> GetUpdatedFields(this InRule.Repository.RuleApplicationDef ruleAppDef)
        {
            var updatedList = new List <UpdatedDefInfo>();
            var network     = DefUsageNetwork.Create(ruleAppDef);

            foreach (var entityDef in ruleAppDef.Entities.OfType <EntityDef>())
            {
                foreach (var fieldDef in entityDef.Fields.OfType <FieldDef>())
                {
                    if (fieldDef.IsCalculated)
                    {
                        if (!updatedList.Any(x => x.TargetDef == fieldDef))
                        {
                            var defInfo = new UpdatedDefInfo();
                            defInfo.TargetDef     = fieldDef;
                            defInfo.IsCalculation = true;
                            updatedList.Add(defInfo);
                        }
                    }
                    else
                    {
                        var usages = network.GetDefUsages(fieldDef.Guid, false);
                        foreach (var usage in usages)
                        {
                            if (usage.UsageType == DefUsageType.UpdatedBy)
                            {
                                UpdatedDefInfo defInfo =
                                    updatedList.FirstOrDefault(x => x.TargetDef == fieldDef);
                                if (defInfo == null)
                                {
                                    defInfo           = new UpdatedDefInfo();
                                    defInfo.TargetDef = fieldDef;
                                    updatedList.Add(defInfo);
                                }
                                var relatedDef = usage.Element.GetDef(ruleAppDef);
                                defInfo.UpdatedBy.Add(relatedDef);
                            }
                        }
                    }
                }
            }
            return(updatedList);
        }