/** * @since 5.1 */ public void load(RulesDefinition.NewRepository repo, InputStream input, Charset charset) { try (Reader reader = new InputStreamReader(input, charset)) { load(repo, reader); } catch (IOException e) { throw new IllegalStateException("Error while reading XML rules definition for repository " + repo.key(), e); } }
fillParams(rule, params); } catch (Exception e) { throw new IllegalStateException(format("Fail to load the rule with key [%s:%s]", repo.key(), key), e);
/** * Loads descriptions of rules and related rule parameters. Existing descriptions * are overridden if English labels exist in bundles. */ public void load(RulesDefinition.NewRepository repo) { for (RulesDefinition.NewRule rule : repo.rules()) { String name = i18n.getName(repo.key(), rule.key()); if (StringUtils.isNotBlank(name)) { rule.setName(name); } String desc = i18n.getDescription(repo.key(), rule.key()); if (StringUtils.isNotBlank(desc)) { rule.setHtmlDescription(desc); } for (RulesDefinition.NewParam param : rule.params()) { String paramDesc = i18n.getParamDescription(repo.key(), rule.key(), param.key()); if (StringUtils.isNotBlank(paramDesc)) { param.setDescription(paramDesc); } } } } }
private void setupExternalNames(Collection<NewRule> rules) { URL resource = AnnotationBasedRulesDefinition.class.getResource("/org/sonar/l10n/" + languageKey + ".properties"); if (resource == null) { return; } ResourceBundle bundle = ResourceBundle.getBundle("org.sonar.l10n." + languageKey, Locale.ENGLISH); for (NewRule rule : rules) { String baseKey = "rule." + repository.key() + "." + rule.key(); String nameKey = baseKey + ".name"; if (bundle.containsKey(nameKey)) { rule.setName(bundle.getString(nameKey)); } for (NewParam param : rule.params()) { String paramDescriptionKey = baseKey + ".param." + param.key(); if (bundle.containsKey(paramDescriptionKey)) { param.setDescription(bundle.getString(paramDescriptionKey)); } } } }
private void setupExternalNames(Collection<NewRule> rules) { ResourceBundle bundle; try { bundle = ResourceBundle.getBundle("org.sonar.l10n." + languageKey, locale); } catch (MissingResourceException e) { return; } for (NewRule rule : rules) { String baseKey = "rule." + repository.key() + "." + rule.key(); String nameKey = baseKey + ".name"; if (bundle.containsKey(nameKey)) { rule.setName(bundle.getString(nameKey)); } for (NewParam param : rule.params()) { String paramDescriptionKey = baseKey + ".param." + param.key(); if (bundle.containsKey(paramDescriptionKey)) { param.setDescription(bundle.getString(paramDescriptionKey)); } } } }
/** * Loads descriptions of rules and related rule parameters. Existing descriptions * are overridden if English labels exist in bundles. */ public void load(RulesDefinition.NewRepository repo) { for (RulesDefinition.NewRule rule : repo.rules()) { String name = i18n.getName(repo.key(), rule.key()); if (StringUtils.isNotBlank(name)) { rule.setName(name); } String desc = i18n.getDescription(repo.key(), rule.key()); if (StringUtils.isNotBlank(desc)) { rule.setHtmlDescription(desc); } for (RulesDefinition.NewParam param : rule.params()) { String paramDesc = i18n.getParamDescription(repo.key(), rule.key(), param.key()); if (StringUtils.isNotBlank(paramDesc)) { param.setDescription(paramDesc); } } } } }
@VisibleForTesting protected void newRule(Class<?> ruleClass, NewRepository repository) { org.sonar.check.Rule ruleAnnotation = AnnotationUtils.getAnnotation(ruleClass, org.sonar.check.Rule.class); if (ruleAnnotation == null) { throw new IllegalArgumentException("No Rule annotation was found on " + ruleClass); } String ruleKey = ruleAnnotation.key(); if (StringUtils.isEmpty(ruleKey)) { throw new IllegalArgumentException("No key is defined in Rule annotation of " + ruleClass); } NewRule rule = repository.rule(ruleKey); if (rule == null) { throw new IllegalStateException("No rule was created for " + ruleClass + " in " + repository.key()); } ruleMetadata(rule); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); if (ruleAnnotation.cardinality() == Cardinality.MULTIPLE) { throw new IllegalArgumentException("Cardinality is not supported, use the RuleTemplate annotation instead for " + ruleClass); } }
private void setupExternalNames(Collection<NewRule> rules) { URL resource = AnnotationBasedRulesDefinition.class.getResource("/org/sonar/l10n/" + languageKey + ".properties"); if (resource == null) { return; } ResourceBundle bundle = ResourceBundle.getBundle("org.sonar.l10n." + languageKey, Locale.ENGLISH); for (NewRule rule : rules) { String baseKey = "rule." + repository.key() + "." + rule.key(); String nameKey = baseKey + ".name"; if (bundle.containsKey(nameKey)) { rule.setName(bundle.getString(nameKey)); } for (NewParam param : rule.params()) { String paramDescriptionKey = baseKey + ".param." + param.key(); if (bundle.containsKey(paramDescriptionKey)) { param.setDescription(bundle.getString(paramDescriptionKey)); } } } }
private void setupExternalNames(Collection<NewRule> rules) { URL resource = AnnotationBasedRulesDefinition.class.getResource("/org/sonar/l10n/" + languageKey + ".properties"); if (resource == null) { return; } ResourceBundle bundle = ResourceBundle.getBundle("org.sonar.l10n." + languageKey, Locale.ENGLISH); for (NewRule rule : rules) { String baseKey = "rule." + repository.key() + "." + rule.key(); String nameKey = baseKey + ".name"; if (bundle.containsKey(nameKey)) { rule.setName(bundle.getString(nameKey)); } for (NewParam param : rule.params()) { String paramDescriptionKey = baseKey + ".param." + param.key(); if (bundle.containsKey(paramDescriptionKey)) { param.setDescription(bundle.getString(paramDescriptionKey)); } } } }
@VisibleForTesting protected void newRule(Class<?> ruleClass, NewRepository repository) { org.sonar.check.Rule ruleAnnotation = AnnotationUtils.getAnnotation(ruleClass, org.sonar.check.Rule.class); if (ruleAnnotation == null) { throw new IllegalArgumentException("No Rule annotation was found on " + ruleClass); } String ruleKey = ruleAnnotation.key(); if (StringUtils.isEmpty(ruleKey)) { throw new IllegalArgumentException("No key is defined in Rule annotation of " + ruleClass); } NewRule rule = repository.rule(ruleKey); if (rule == null) { throw new IllegalStateException("No rule was created for " + ruleClass + " in " + repository.key()); } ruleMetadata(ruleClass, rule); rule.setTemplate(AnnotationUtils.getAnnotation(ruleClass, RuleTemplate.class) != null); if (ruleAnnotation.cardinality() == Cardinality.MULTIPLE) { throw new IllegalArgumentException("Cardinality is not supported, use the RuleTemplate annotation instead for " + ruleClass); } }
public void load(NewRepository repository) { Collection<NewRule> rules = repository.rules(); for(NewRule rule : rules) { InputStream stream = getClass().getResourceAsStream("/rules/"+repository.key().toLowerCase()+"/"+sanitize(rule.key())+".html"); if(stream!=null) { try { LOG.debug("Adding HTML description for rule "+repository.key()+":"+rule.key()); String description = IOUtils.toString(stream); rule.setHtmlDescription("<p>"+RuleUtil.getHtmlDescription(rule)+"</p><div class=\""+htmlDescriptionClass+"\">"+description+"</div>"); } catch (IOException e) { LOG.error("failed to load HTML description for rule "+rule.key()); } catch (RuleDefinitionException e) { LOG.error("failed to read current HTML description for rule "+rule.key()); } } else { LOG.debug("No HTML description for rule "+rule.key()+" for repository "+repository.key()); } } }
public void load(NewRepository repository) { InputStream stream = getClass().getResourceAsStream("/rules/"+repository.key().toLowerCase()+".css"); if(stream!=null) { try { String css = IOUtils.toString(stream); for(NewRule rule : repository.rules()) { rule.setHtmlDescription("<style>"+css+"</style><div id=\""+containerNodeId+"\">"+RuleUtil.getHtmlDescription(rule)+"</div>"); LOG.debug("Adding custom CSS for HTML description for rule "+repository.key()+":"+rule.key()); } } catch (IOException e) { LOG.error("failed to load CSS file for repository "+repository.key()); } catch (RuleDefinitionException e) { LOG.error("failed to add CSS file for repository "+repository.key()); } } else { LOG.info("No CSS file for repository "+repository.key()); } } }
public void load(NewRepository repository) { Collection<NewRule> rules = repository.rules(); for (NewRule rule : rules) { InputStream stream = getClass().getResourceAsStream("/rules/" + repository.key().toLowerCase() + "/" + sanitize(rule.key()) + ".md"); if (stream != null) { try { String description = IOUtils.toString(stream); rule.setMarkdownDescription(description); } catch (IOException e) { LOG.error("failed to load markdown description for rule " + rule.key()); } } else { LOG.debug("No markdown description for rule " + rule.key() + " for repository " + repository.key()); } } }
public AnnotationBasedRulesDefinition(NewRepository repository, String languageKey) { this.repository = repository; this.languageKey = languageKey; String externalDescriptionBasePath = String.format("/org/sonar/l10n/%s/rules/%s", languageKey, repository.key()); this.externalDescriptionLoader = new ExternalDescriptionLoader(repository, externalDescriptionBasePath); }
public CustomAnnotationBasedRulesDefinition(NewRepository repository, String languageKey) { this.repository = repository; this.languageKey = languageKey; this.locale = Locale.getDefault(); this.externalDescriptionBasePath = String.format("%s/rules/%s", getLocalizedFolderName(String.format("/org/sonar/l10n/%s", languageKey), locale), repository.key()); }
public void load(NewRepository repository) { LOG.info("Adding default rule for "+repository.key()); // add default rule NewRule rule = repository.createRule(ruleKey); rule.setName(ruleName); rule.setHtmlDescription(ruleDescription); }
public AnnotationBasedRulesDefinition(NewRepository repository, String languageKey) { this.repository = repository; this.languageKey = languageKey; String externalDescriptionBasePath = String.format("/org/sonar/l10n/%s/rules/%s", languageKey, repository.key()); this.externalDescriptionLoader = new ExternalDescriptionLoader(repository, externalDescriptionBasePath); }
public AnnotationBasedRulesDefinition(NewRepository repository, String languageKey) { this.repository = repository; this.languageKey = languageKey; String externalDescriptionBasePath = String.format("/org/sonar/l10n/%s/rules/%s", languageKey, repository.key()); this.externalDescriptionLoader = new ExternalDescriptionLoader(repository, externalDescriptionBasePath); }
/** * @since 5.1 */ public void load(RulesDefinition.NewRepository repo, InputStream input, Charset charset) { try (Reader reader = new InputStreamReader(input, charset)) { load(repo, reader); } catch (IOException e) { throw new IllegalStateException("Error while reading XML rules definition for repository " + repo.key(), e); } }
/** * @since 5.1 */ public void load(RulesDefinition.NewRepository repo, InputStream input, Charset charset) { try (Reader reader = new InputStreamReader(input, charset)) { load(repo, reader); } catch (IOException e) { throw new IllegalStateException("Error while reading XML rules definition for repository " + repo.key(), e); } }