private void ProcessAnalyzer(DiagnosticAnalyzer analyzer, SqaleModel root) { foreach (DiagnosticDescriptor diagnostic in analyzer.SupportedDiagnostics) { SqaleDescriptor sqaleDescriptor = new SqaleDescriptor { Remediation = new SqaleRemediation { RuleKey = diagnostic.Id }, SubCharacteristic = "MAINTAINABILITY_COMPLIANCE" }; sqaleDescriptor.Remediation.Properties.AddRange(new[] { new SqaleRemediationProperty { Key = "remediationFunction", Text = "CONSTANT_ISSUE" }, new SqaleRemediationProperty { Key = "offset", Value = this.remediationConstantValue, Text = string.Empty } }); root.Sqale.Add(sqaleDescriptor); } }
private static SqaleDescriptor GetSqaleDescriptor(string remediation, string remediationCost) { if (remediation == null) { return(null); } var sqaleDescriptor = new SqaleDescriptor(); if (remediation == "Constant/Issue") { sqaleDescriptor.Remediation.Properties.AddRange(new[] { new SqaleRemediationProperty { Key = SqaleRemediationProperty.RemediationFunctionKey, Text = SqaleRemediationProperty.ConstantRemediationFunctionValue }, new SqaleRemediationProperty { Key = SqaleRemediationProperty.OffsetKey, Value = remediationCost, Text = string.Empty } }); } return(sqaleDescriptor); }
private static void GetSqale(Type analyzerType, RuleDetail ruleDetail) { var sqaleRemediation = analyzerType.GetCustomAttributes <SqaleRemediationAttribute>().FirstOrDefault(); if (sqaleRemediation == null || sqaleRemediation is NoSqaleRemediationAttribute) { ruleDetail.SqaleDescriptor = null; return; } var sqaleSubCharacteristic = analyzerType.GetCustomAttributes <SqaleSubCharacteristicAttribute>().First(); var sqaleDescriptor = new SqaleDescriptor { SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString() }; var constantRemediation = sqaleRemediation as SqaleConstantRemediationAttribute; if (constantRemediation == null) { ruleDetail.SqaleDescriptor = sqaleDescriptor; return; } sqaleDescriptor.Remediation.Properties.AddRange(new[] { new SqaleRemediationProperty { Key = SqaleRemediationProperty.RemediationFunctionKey, Text = SqaleRemediationProperty.ConstantRemediationFunctionValue }, new SqaleRemediationProperty { Key = SqaleRemediationProperty.OffsetKey, Value = constantRemediation.Value, Text = string.Empty } }); ruleDetail.SqaleDescriptor = sqaleDescriptor; }
private static void GetSqale(Type analyzerType, RuleDetail ruleDetail) { var sqaleRemediation = analyzerType.GetCustomAttributes<SqaleRemediationAttribute>().FirstOrDefault(); if (sqaleRemediation == null) { ruleDetail.SqaleDescriptor = null; return; } var sqaleSubCharacteristic = analyzerType.GetCustomAttributes<SqaleSubCharacteristicAttribute>().First(); var sqaleDescriptor = new SqaleDescriptor { SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString() }; var constantRemediation = sqaleRemediation as SqaleConstantRemediationAttribute; if (constantRemediation == null) { ruleDetail.SqaleDescriptor = sqaleDescriptor; return; } sqaleDescriptor.Remediation.Properties.AddRange(new[] { new SqaleRemediationProperty { Key = SqaleRemediationProperty.RemediationFunctionKey, Text = SqaleRemediationProperty.ConstantRemediationFunctionValue }, new SqaleRemediationProperty { Key = SqaleRemediationProperty.OffsetKey, Value = constantRemediation.Value, Text = string.Empty } }); ruleDetail.SqaleDescriptor = sqaleDescriptor; }
private static FullRuleDescriptor GetRuleDescriptor(Type analyzerType) { var rule = analyzerType.GetCustomAttributes <RuleAttribute>().FirstOrDefault(); if (rule == null) { return(null); } var ruleDescriptor = new RuleDescriptor { Key = rule.Key, Title = rule.Description, Severity = rule.Severity.ToString().ToUpper(CultureInfo.InvariantCulture), IsActivatedByDefault = rule.IsActivatedByDefault, Cardinality = rule.Template ? "MULTIPLE" : "SINGLE", }; var resources = analyzerType.Assembly.GetManifestResourceNames(); var resource = resources.SingleOrDefault(r => r.EndsWith( string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, rule.Key), StringComparison.OrdinalIgnoreCase)); if (resource != null) { using (var stream = analyzerType.Assembly.GetManifestResourceStream(resource)) using (var reader = new StreamReader(stream)) { ruleDescriptor.Description = reader.ReadToEnd(); } } var parameters = analyzerType.GetProperties() .Where(p => p.GetCustomAttributes <RuleParameterAttribute>().Any()); foreach (var ruleParameter in parameters .Select(propertyInfo => propertyInfo.GetCustomAttributes <RuleParameterAttribute>().First())) { ruleDescriptor.Parameters.Add( new RuleParameter { DefaultValue = ruleParameter.DefaultValue, Description = ruleParameter.Description, Key = ruleParameter.Key, Type = ruleParameter.Type.ToSonarQubeString() }); } var tags = analyzerType.GetCustomAttributes <TagsAttribute>().FirstOrDefault(); if (tags != null) { ruleDescriptor.Tags.AddRange(tags.Tags); } var sqaleRemediation = analyzerType.GetCustomAttributes <SqaleRemediationAttribute>().FirstOrDefault(); if (sqaleRemediation == null || sqaleRemediation is NoSqaleRemediationAttribute) { return(new FullRuleDescriptor { RuleDescriptor = ruleDescriptor, SqaleDescriptor = null }); } var sqaleSubCharacteristic = analyzerType.GetCustomAttributes <SqaleSubCharacteristicAttribute>().First(); var sqale = new SqaleDescriptor { SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString() }; var constant = sqaleRemediation as SqaleConstantRemediationAttribute; if (constant == null) { return(new FullRuleDescriptor { RuleDescriptor = ruleDescriptor, SqaleDescriptor = sqale }); } sqale.Remediation.Properties.Add(new SqaleRemediationProperty { Key = "remediationFunction", Text = "CONSTANT_ISSUE" }); sqale.Remediation.Properties.Add(new SqaleRemediationProperty { Key = "offset", Value = constant.Value, Text = "" }); sqale.Remediation.RuleKey = rule.Key; return(new FullRuleDescriptor { RuleDescriptor = ruleDescriptor, SqaleDescriptor = sqale }); }