private static RuleDetail GetRuleDetail(Type analyzerType) { var rule = analyzerType.GetCustomAttributes<RuleAttribute>().Single(); var ruleDetail = new RuleDetail { Key = rule.Key, Title = rule.Title, Severity = rule.Severity.ToString().ToUpper(CultureInfo.InvariantCulture), IsActivatedByDefault = rule.IsActivatedByDefault, Description = GetResourceHtml(analyzerType, rule), IsTemplate = RuleFinder.IsRuleTemplate(analyzerType) }; GetParameters(analyzerType, ruleDetail); GetTags(analyzerType, ruleDetail); GetSqale(analyzerType, ruleDetail); return ruleDetail; }
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 GetParameters(Type analyzerType, RuleDetail ruleDetail) { var typeToGetParametersFrom = analyzerType; var templateInterface = analyzerType.GetInterfaces() .FirstOrDefault(type => type.IsGenericType && type.GetGenericTypeDefinition() == typeof (IRuleTemplate<>)); if (templateInterface != null) { typeToGetParametersFrom = templateInterface.GetGenericArguments().First(); } var parameters = typeToGetParametersFrom.GetProperties() .Select(p => p.GetCustomAttributes<RuleParameterAttribute>().SingleOrDefault()); foreach (var ruleParameter in parameters .Where(attribute => attribute != null)) { ruleDetail.Parameters.Add( new RuleParameter { DefaultValue = ruleParameter.DefaultValue, Description = ruleParameter.Description, Key = ruleParameter.Key, Type = ruleParameter.Type.ToSonarQubeString() }); } }
private static void GetTags(Type analyzerType, RuleDetail ruleDetail) { var tags = analyzerType.GetCustomAttributes<TagsAttribute>().FirstOrDefault(); if (tags != null) { ruleDetail.Tags.AddRange(tags.Tags); } }