private RulesDefinition.Repository load(Class annotatedClass) { RulesDefinition.Context context = new RulesDefinition.Context(); RulesDefinition.NewExtendedRepository newRepository = context.createRepository("squid", "java"); annotationLoader.load(newRepository, annotatedClass); newRepository.done(); return context.repository("squid"); }
private void defineRulesXoo(Context context) { NewRepository repo = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo"); new RulesDefinitionAnnotationLoader().load(repo, Check.ALL);
private static NewRule addAnnotatedRule(NewRepository repository, Class<?> ruleClass) { org.sonar.check.Rule ruleAnnotation = AnnotationUtils.getAnnotation(ruleClass, org.sonar.check.Rule.class); if (ruleAnnotation == null) { throw new IllegalStateException("No Rule annotation was found on " + ruleClass.getName()); } String ruleKey = ruleAnnotation.key(); if (ruleKey.length() == 0) { throw new IllegalStateException("Empty key"); } new RulesDefinitionAnnotationLoader().load(repository, ruleClass); NewRule rule = repository.rule(ruleKey); if (rule == null) { throw new IllegalStateException("Rule not found: " + ruleKey); } return rule; }
@Override public void define(Context context) { NewRepository repo = context.createRepository(REPOSITORY_KEY, "java"); repo.setName(REPOSITORY_KEY); RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader(); annotationLoader.load(repo, JavaDebuggingPluginCheckRegistrar.checkClasses()); annotationLoader.load(repo, JavaDebuggingPluginCheckRegistrar.testCheckClasses()); repo.done(); } }
@Override public void define(Context context) { NewRepository repo = context.createRepository(REPOSITORY_KEY, "java"); repo.setName(REPOSITORY_KEY); // We could use a XML or JSON file to load all rule metadata, but // we prefer use annotations in order to have all information in a // single place RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader(); // Load custom check classes annotationLoader.load(repo, JavaExtensionsCheckRegistrar.checkClasses()); // Load custom test check classes annotationLoader.load(repo, JavaExtensionsCheckRegistrar.testCheckClasses()); repo.done(); } }
@SuppressWarnings("rawtypes") public void addRuleClasses(boolean failIfNoExplicitKey, Iterable<Class> ruleClasses) { new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(ruleClasses, Class.class)); List<NewRule> newRules = Lists.newArrayList(); for (Class<?> ruleClass : ruleClasses) { NewRule rule = newRule(ruleClass, failIfNoExplicitKey); externalDescriptionLoader.addHtmlDescription(rule, ruleClass); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); try { setupSqaleModel(rule, ruleClass); } catch (RuntimeException e) { throw new IllegalArgumentException("Could not setup SQALE model on " + ruleClass, e); } newRules.add(rule); } setupExternalNames(newRules); }
@SuppressWarnings("rawtypes") public void addRuleClasses(boolean failIfNoExplicitKey, Iterable<Class> ruleClasses) { new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(ruleClasses, Class.class)); List<NewRule> newRules = Lists.newArrayList(); for (Class<?> ruleClass : ruleClasses) { NewRule rule = newRule(ruleClass, failIfNoExplicitKey); externalDescriptionLoader.addHtmlDescription(rule, ruleClass); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); try { setupSqaleModel(rule, ruleClass); } catch (RuntimeException e) { throw new IllegalArgumentException("Could not setup SQALE model on " + ruleClass, e); } newRules.add(rule); } setupExternalNames(newRules); }
public void addRuleClasses(boolean failIfSqaleNotFound, boolean failIfNoExplicitKey, Iterable<Class> ruleClasses) { new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(ruleClasses, Class.class)); List<NewRule> newRules = Lists.newArrayList(); for (Class<?> ruleClass : ruleClasses) { NewRule rule = newRule(ruleClass, failIfNoExplicitKey); externalDescriptionLoader.addHtmlDescription(rule); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); if (!isSqaleAnnotated(ruleClass) && failIfSqaleNotFound) { throw new IllegalArgumentException("No SqaleSubCharacteristic annotation was found on " + ruleClass); } try { setupSqaleModel(rule, ruleClass); } catch (RuntimeException e) { throw new IllegalArgumentException("Could not setup SQALE model on " + ruleClass, e); } newRules.add(rule); } setupExternalNames(newRules); }
/** * Loads apex custom rules in the repository. * * @param context builder. */ @Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, Apex.KEY) .setName(CheckList.REPOSITORY_NAME); List<Class> checks = CheckList.getChecks(); new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(checks, Class.class)); checks.stream().forEach((ruleClass) -> { newRule(ruleClass, repository); }); repository.done(); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, "java") .setName("VIPAnalyzer "); List<Class> checks = SonarRulesList.getChecks(); new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(checks, Class.class)); for (Class ruleClass : checks) { newRule(ruleClass, repository); } repository.done(); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(REPOSITORY_KEY, Java.KEY) .setName("MyCompany Custom Repository"); List<Class> checks = RulesList.getChecks(); new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(checks, Class.class)); for (Class ruleClass : checks) { newRule(ruleClass, repository); } repository.done(); }
@SuppressWarnings("rawtypes") public void addRuleClasses(boolean failIfNoExplicitKey, Iterable<Class> ruleClasses) { RulesDefinitionAnnotationLoader loader = new RulesDefinitionAnnotationLoader(); for (Class annotatedClass : ruleClasses) { loader.load(repository, annotatedClass); } List<NewRule> newRules = new ArrayList<>(); for (Class<?> ruleClass : ruleClasses) { NewRule rule = newRule(ruleClass, failIfNoExplicitKey); addHtmlDescription(rule); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); try { setupSqaleModel(rule, ruleClass); } catch (RuntimeException e) { throw new IllegalArgumentException("Could not setup SQALE model on " + ruleClass, e); } newRules.add(rule); } setupExternalNames(newRules); }
@Override public void define(Context context) { NewRepository repository = context .createRepository(CheckList.REPOSITORY_KEY, Java.KEY) .setName("SonarAnalyzer"); List<Class> checks = getChecks(); new RulesDefinitionAnnotationLoader().load(repository, Iterables.toArray(checks, Class.class)); JavaSonarWayProfile.Profile profile = JavaSonarWayProfile.readProfile(); for (Class ruleClass : checks) { newRule(ruleClass, repository, profile); } repository.done(); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(repositoryKey(), "php").setName("MyCompany Custom Repository"); // Load rule meta data from annotations RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader(); checkClasses().forEach(ruleClass -> annotationLoader.load(repository, ruleClass)); // Optionally override html description from annotation with content from html files repository.rules().forEach(rule -> rule.setHtmlDescription(loadResource("/org/sonar/l10n/php/rules/custom/" + rule.key() + ".html"))); // Optionally define remediation costs Map<String, String> remediationCosts = new HashMap<>(); remediationCosts.put(ForbiddenFunctionUseCheck.KEY, "5min"); remediationCosts.put(OtherForbiddenFunctionUseCheck.KEY, "5min"); repository.rules().forEach(rule -> rule.setDebtRemediationFunction( rule.debtRemediationFunctions().constantPerIssue(remediationCosts.get(rule.key())))); repository.done(); }
@Override public void define(Context context) { RulesDefinition.NewRepository repository = context.createRepository(repositoryKey(), "js") .setName("MyCompany Custom Repository"); // this will load metadata from @Rule annotation new RulesDefinitionAnnotationLoader().load(repository, checkClasses().toArray(new Class[] {})); NewRule rule = repository.rule("S1"); // description is loaded from html file in resources directory rule.setHtmlDescription(loadRuleDescription(rule.key())); // remediation function sets how much rule violation contributes to technical debt rule.setDebtRemediationFunction(rule.debtRemediationFunctions().linear("5min")); repository.done(); }
@Override public void define(Context context) { NewRepository repository = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo"); // Load checks new RulesDefinitionAnnotationLoader().load(repository, Check.ALL); // define a single rule programmatically. Note that rules // can be loaded from JSON or XML files too. NewRule x1Rule = repository.createRule("x1") .setName("No empty line") .setMarkdownDescription("Generate an issue on *empty* lines of Xoo source files") // optional tags .setTags("style", "security") // optional status. Default value is READY. .setStatus(RuleStatus.BETA) // default severity when the rule is activated on a Quality profile. Default value is MAJOR. .setSeverity(Severity.MINOR); // debt-related information x1Rule .setDebtSubCharacteristic(SubCharacteristics.INTEGRATION_TESTABILITY) .setDebtRemediationFunction(x1Rule.debtRemediationFunctions().linearWithOffset("1h", "30min")) .setEffortToFixDescription("Effort to fix issue on one line"); x1Rule.createParam("acceptWhitespace") .setDefaultValue("false") .setType(RuleParamType.BOOLEAN) .setDescription("= Accept whitespace (``\\s|\\t``) on the line\nThis property is available so that a line containing only whitespace is not considered empty.\n" + "== Example with property set to ``false``\n``xoo\n <- One issue here\n<- And one here\n``\n\n" + "== Example with property set to ``true``\n``xoo\n <- No issue here\n<- But one here\n``\n"); // don't forget to call done() to finalize the definition repository.done(); }
private void defineRulesXoo(Context context) { NewRepository repo = context.createRepository(XOO_REPOSITORY, Xoo.KEY).setName("Xoo"); new RulesDefinitionAnnotationLoader().load(repo, Check.ALL);