private RepositoryImpl(NewRepositoryImpl newRepository, @Nullable Repository mergeInto) { this.key = newRepository.key; this.language = newRepository.language; this.isExternal = newRepository.isExternal; Map<String, Rule> ruleBuilder = new HashMap<>(); if (mergeInto != null) { if (!StringUtils.equals(newRepository.language, mergeInto.language()) || !StringUtils.equals(newRepository.key, mergeInto.key())) { throw new IllegalArgumentException(format("Bug - language and key of the repositories to be merged should be the sames: %s and %s", newRepository, mergeInto)); } this.name = StringUtils.defaultIfBlank(mergeInto.name(), newRepository.name); for (Rule rule : mergeInto.rules()) { if (!newRepository.key().startsWith("common-") && ruleBuilder.containsKey(rule.key())) { Loggers.get(getClass()).warn("The rule '{}' of repository '{}' is declared several times", rule.key(), mergeInto.key()); } ruleBuilder.put(rule.key(), rule); } } else { this.name = newRepository.name; } for (NewRule newRule : newRepository.newRules.values()) { newRule.validate(); ruleBuilder.put(newRule.key, new Rule(this, newRule)); } this.rulesByKey = unmodifiableMap(ruleBuilder); }
private RepositoryImpl(NewRepositoryImpl newRepository, @Nullable Repository mergeInto) { this.key = newRepository.key; this.language = newRepository.language; this.isExternal = newRepository.isExternal; Map<String, Rule> ruleBuilder = new HashMap<>(); if (mergeInto != null) { if (!StringUtils.equals(newRepository.language, mergeInto.language()) || !StringUtils.equals(newRepository.key, mergeInto.key())) { throw new IllegalArgumentException(format("Bug - language and key of the repositories to be merged should be the sames: %s and %s", newRepository, mergeInto)); } this.name = StringUtils.defaultIfBlank(mergeInto.name(), newRepository.name); for (Rule rule : mergeInto.rules()) { if (!newRepository.key().startsWith("common-") && ruleBuilder.containsKey(rule.key())) { Loggers.get(getClass()).warn("The rule '{}' of repository '{}' is declared several times", rule.key(), mergeInto.key()); } ruleBuilder.put(rule.key(), rule); } } else { this.name = newRepository.name; } for (NewRule newRule : newRepository.newRules.values()) { newRule.validate(); ruleBuilder.put(newRule.key, new Rule(this, newRule)); } this.rulesByKey = unmodifiableMap(ruleBuilder); }
public NewExtendedRepository extendRepository(String key, String language) { return new NewRepositoryImpl(this, key, language, true); }
public NewRepository createRepository(String key, String language) { return new NewRepositoryImpl(this, key, language, false); }
private void registerRepository(NewRepositoryImpl newRepository) { Repository existing = repositoriesByKey.get(newRepository.key()); if (existing != null) { String existingLanguage = existing.language(); checkState(existingLanguage.equals(newRepository.language), "The rule repository '%s' must not be defined for two different languages: %s and %s", newRepository.key, existingLanguage, newRepository.language); } repositoriesByKey.put(newRepository.key, new RepositoryImpl(newRepository, existing)); }
/** * New builder for {@link org.sonar.api.server.rule.RulesDefinition.Repository}. * <br> * A plugin can add rules to a repository that is defined then executed by another plugin. For instance * the FbContrib plugin contributes to the Findbugs plugin rules. In this case no need * to execute {@link org.sonar.api.server.rule.RulesDefinition.NewRepository#setName(String)} */ public NewRepository createRepository(String key, String language) { return new NewRepositoryImpl(this, key, language, false); }
/** * Creates a repository of rules from external rule engines. * The repository key will be "external_[engineId]". * * @since 7.2 */ public NewRepository createExternalRepository(String engineId, String language) { return new NewRepositoryImpl(this, RuleKey.EXTERNAL_RULE_REPO_PREFIX + engineId, language, true); }
/** * New builder for {@link org.sonar.api.server.rule.RulesDefinition.Repository}. * <br> * A plugin can add rules to a repository that is defined then executed by another plugin. For instance * the FbContrib plugin contributes to the Findbugs plugin rules. In this case no need * to execute {@link org.sonar.api.server.rule.RulesDefinition.NewRepository#setName(String)} */ public NewRepository createRepository(String key, String language) { return new NewRepositoryImpl(this, key, language, false); }
/** * Creates a repository of rules from external rule engines. * The repository key will be "external_[engineId]". * * @since 7.2 */ public NewRepository createExternalRepository(String engineId, String language) { return new NewRepositoryImpl(this, RuleKey.EXTERNAL_RULE_REPO_PREFIX + engineId, language, true); }
private void registerRepository(NewRepositoryImpl newRepository) { Repository existing = repositoriesByKey.get(newRepository.key()); if (existing != null) { String existingLanguage = existing.language(); checkState(existingLanguage.equals(newRepository.language), "The rule repository '%s' must not be defined for two different languages: %s and %s", newRepository.key, existingLanguage, newRepository.language); } repositoriesByKey.put(newRepository.key, new RepositoryImpl(newRepository, existing)); }