示例#1
0
        private void SetParameterObjects(SmartBaseElement element, SmartGenericJsonData data, bool update = false)
        {
            if (data.DescriptionRules != null)
            {
                element.DescriptionRules = new List <DescriptionRule>();
                foreach (SmartDescriptionRulesJsonData rule in data.DescriptionRules)
                {
                    element.DescriptionRules.Add(new DescriptionRule(rule));
                }
            }
            else
            {
                element.DescriptionRules = null;
            }

            element.Id           = data.Id;
            element.ReadableHint = data.Description;

            for (var i = 0; i < element.ParametersCount; ++i)
            {
                element.GetParameter(i).IsUsed = false;
            }

            if (data.Parameters == null)
            {
                return;
            }

            for (var i = 0; i < data.Parameters.Count; ++i)
            {
                string key = data.Parameters[i].Type;
                if (data.Parameters[i].Values != null)
                {
                    key = $"{data.Name}_{i}";
                    if (!parameterFactory.IsRegistered(key))
                    {
                        parameterFactory.Register(key, data.Parameters[i].Type == "FlagParameter" ? new FlagParameter()
                        {
                            Items = data.Parameters[i].Values
                        } : new Parameter()
                        {
                            Items = data.Parameters[i].Values
                        });
                    }
                }

                IParameter <long> parameter = parameterFactory.Factory(key);
                element.GetParameter(i).Name = data.Parameters[i].Name;
                if (!update)
                {
                    element.GetParameter(i).Value = data.Parameters[i].DefaultVal;
                }
                element.GetParameter(i).Parameter = parameter;
                element.GetParameter(i).IsUsed    = true;
            }
        }
 public void Fix(SmartBaseElement e)
 {
     for (int i = 0; i < e.ParametersCount; ++i)
     {
         if (!e.GetParameter(i).IsUsed&& e.GetParameter(i).Value != 0)
         {
             e.GetParameter(i).Value = 0;
         }
     }
 }
        public InspectionResult?Inspect(SmartBaseElement e, string ofWhat)
        {
            for (int i = 0; i < e.ParametersCount; ++i)
            {
                if (!e.GetParameter(i).IsUsed&& e.GetParameter(i).Value != 0)
                {
                    int    index = i + 1;
                    string nd    = index == 1 ? "st" : (index == 2 ? "nd" : (index == 3 ? "rd" : "th"));
                    return(new InspectionResult()
                    {
                        Severity = DiagnosticSeverity.Info,
                        Message = $" {index}{nd} parameter of {ofWhat} is not used, but has non zero value.",
                        Line = e.LineId
                    });
                }
            }

            return(null);
        }
示例#4
0
        private void SetParameterObjects(SmartBaseElement element, ConditionJsonData data)
        {
            element.Id           = data.Id;
            element.ReadableHint = data.Description;

            for (var i = 0; i < element.ParametersCount; ++i)
            {
                element.GetParameter(i).IsUsed = false;
            }

            if (data.Parameters == null)
            {
                return;
            }

            for (var i = 0; i < data.Parameters.Count; ++i)
            {
                string key = data.Parameters[i].Type;
                if (data.Parameters[i].Values != null)
                {
                    key = $"{data.Name}_{i}";
                    if (!parameterFactory.IsRegisteredLong(key))
                    {
                        parameterFactory.Register(key, new Parameter()
                        {
                            Items = data.Parameters[i].Values
                        });
                    }
                }

                IParameter <long> parameter = parameterFactory.Factory(key);

                element.GetParameter(i).Name      = data.Parameters[i].Name;
                element.GetParameter(i).IsUsed    = true;
                element.GetParameter(i).Parameter = parameter;
            }
        }
        public InspectionResult?Inspect(SmartBaseElement e)
        {
            for (int i = 0; i < e.ParametersCount; ++i)
            {
                if (e.GetParameter(i).IsUsed&&
                    e.GetParameter(i).Value != 0 &&
                    e.GetParameter(i).HasItems&&
                    !((e.GetParameter(i).Parameter.Items?.ContainsKey(e.GetParameter(i).Value) ?? false) ||
                      (e.GetParameter(i).Parameter is FlagParameter fp && ContainsAllFlags(fp, e.GetParameter(i).Value))))
                {
                    return(new InspectionResult()
                    {
                        Severity = DiagnosticSeverity.Info,
                        Message = $"Parameter `{e.GetParameter(i).Name}` value out of range ({e.GetParameter(i).Value})",
                        Line = e.LineId
                    });
                }
            }

            return(null);
        }
示例#6
0
        public InspectionResult?Inspect(SmartBaseElement e)
        {
            for (int i = 0; i < e.ParametersCount; ++i)
            {
                if (e.GetParameter(i).IsUsed&&
                    e.GetParameter(i).HasItems)
                {
                    if (e.GetParameter(i).Parameter is FlagParameter fp &&
                        ContainsAllFlags(fp, e.GetParameter(i).Value) != 0)
                    {
                        var unknownFlag = ContainsAllFlags(fp, e.GetParameter(i).Value);
                        return(new InspectionResult()
                        {
                            Severity = DiagnosticSeverity.Info,
                            Message = $"Parameter `{e.GetParameter(i).Name}` uses non existing flag {unknownFlag}",
                            Line = e.LineId
                        });
                    }

                    if (e.GetParameter(i).Value != 0 &&
                        e.GetParameter(i).Parameter is not FlagParameter &&
                        !e.GetParameter(i).Parameter.AllowUnknownItems&&
                        !(e.GetParameter(i).Items?.ContainsKey(e.GetParameter(i).Value) ?? false))
                    {
                        return(new InspectionResult()
                        {
                            Severity = DiagnosticSeverity.Info,
                            Message = $"Parameter `{e.GetParameter(i).Name}` value out of range ({e.GetParameter(i).Value})",
                            Line = e.LineId
                        });
                    }
                }
            }

            return(null);
        }