@Override public void define(Context context) { NewBuiltInQualityProfile profile = context.createBuiltInQualityProfile("test BuiltInQualityProfilesDefinition", Xoo.KEY); profile.setDefault(false); NewBuiltInActiveRule rule = profile.activateRule(XOO_REPOSITORY, HasTagSensor.RULE_KEY); rule.overrideSeverity("BLOCKER"); rule.overrideParam("tag", "TODO"); profile.done(); } }
/** * New builder for {@link BuiltInQualityProfile}. * <br> * A plugin can activate rules in a built in quality profile that is defined by another plugin. */ public NewBuiltInQualityProfile createBuiltInQualityProfile(String name, String language) { return new NewBuiltInQualityProfileImpl(this, name, language); }
public void load(BuiltInQualityProfilesDefinition.NewBuiltInQualityProfile builtInProfile, String repositoryKey, Class... annotatedClasses) { for (Class<?> annotatedClass : annotatedClasses) { loadActiveRule(builtInProfile, repositoryKey, annotatedClass); } }
private void addPluginProfile(QProfileDto profile, RuleDefinitionDto... dbRules) { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(profile.getName(), profile.getLanguage()); Arrays.stream(dbRules).forEach(dbRule -> newQp.activateRule(dbRule.getRepositoryKey(), dbRule.getRuleKey()).overrideSeverity(Severity.MAJOR)); newQp.done(); BuiltInQProfile.ActiveRule[] activeRules = toActiveRules(context.profile(profile.getLanguage(), profile.getName()).rules(), dbRules); builtInQProfileRepositoryRule.add(newLanguage(profile.getLanguage()), profile.getName(), false, activeRules); }
@Test public void createEmptyProfile() { Map<String, Map<String, BuiltInQualityProfile>> profiles = define(c -> { c.createBuiltInQualityProfile("Foo", "xoo").done(); }); assertThat(profiles).containsOnlyKeys("xoo"); assertThat(profiles.get("xoo")).containsOnlyKeys("Foo"); BuiltInQualityProfile profile = profiles.get("xoo").get("Foo"); assertThat(profile.name()).isEqualTo("Foo"); assertThat(profile.language()).isEqualTo("xoo"); assertThat(profile.isDefault()).isFalse(); }
@Test public void shouldParseAnnotatedClasses() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newProfile = context.createBuiltInQualityProfile("Foo way", "java"); new BuiltInQualityProfileAnnotationLoader().load(newProfile, "squid", FakeRule.class, RuleNoProfile.class); newProfile.done(); assertThat(context.profile("java", "Foo way").rule(RuleKey.of("squid", "fake")).overriddenSeverity()).isEqualTo(Severity.BLOCKER); }
@Override public void define(Context context) { context.createBuiltInQualityProfile(name, language) .setDefault(defaultProfile).done(); }
@Test public void duplicateProfile() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("There is already a quality profile with name 'Foo' for language 'xoo'"); define(c -> { c.createBuiltInQualityProfile("Foo", "xoo").done(); c.createBuiltInQualityProfile("Foo", "xoo").done(); }); }
@Test public void test_built_in_quality_profile() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); underTest.define(context); BuiltInQualityProfile profile = context.profile("xoo", "test BuiltInQualityProfilesDefinition"); assertThat(profile.isDefault()).isFalse(); assertThat(profile.name()).isEqualTo("test BuiltInQualityProfilesDefinition"); assertThat(profile.language()).isEqualTo("xoo"); assertThat(profile.rules()).hasSize(1); BuiltInQualityProfilesDefinition.BuiltInActiveRule activeRule = profile.rule(RuleKey.of("xoo", "HasTag")); assertThat(activeRule.overriddenSeverity()).isEqualTo("BLOCKER"); assertThat(activeRule.overriddenParams()).hasSize(1); assertThat(activeRule.overriddenParam("tag").overriddenValue()).isEqualTo("TODO"); } }
@Test public void createProfileWithDuplicateRules() { define(c -> { NewBuiltInQualityProfile profile = c.createBuiltInQualityProfile("Foo", "xoo"); profile.activateRule("repo", "rule"); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("The rule 'repo:rule' is already activated"); profile.activateRule("repo", "rule"); }); }
private Map<String, Map<String, BuiltInQualityProfile>> define(Consumer<BuiltInQualityProfilesDefinition.Context> consumer) { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); new FakeProfile(consumer).define(context); return context.profilesByLanguageAndName(); }
private BuiltInQualityProfileImpl(NewBuiltInQualityProfileImpl newProfile) { this.name = newProfile.name(); this.language = newProfile.language(); this.isDefault = newProfile.isDefault(); Map<RuleKey, BuiltInActiveRule> ruleBuilder = new HashMap<>(); for (NewBuiltInActiveRule newActiveRule : newProfile.activeRules()) { ruleBuilder.put(RuleKey.of(newActiveRule.repoKey, newActiveRule.ruleKey), new BuiltInActiveRule(newActiveRule)); } this.activeRulesByKey = unmodifiableMap(ruleBuilder); }
private BuiltInActiveRule(NewBuiltInActiveRule newBuiltInActiveRule) { this.repoKey = newBuiltInActiveRule.repoKey(); this.ruleKey = newBuiltInActiveRule.ruleKey(); this.overriddenSeverity = newBuiltInActiveRule.overriddenSeverity; Map<String, OverriddenParam> paramsBuilder = new HashMap<>(); for (NewOverriddenParam newParam : newBuiltInActiveRule.getOverriddenParams()) { paramsBuilder.put(newParam.key, new OverriddenParam(newParam)); } this.overriddenParams = Collections.unmodifiableMap(paramsBuilder); }
@Override public void initialize() { checkState(qProfiles == null, "initialize must be called only once"); Profiler profiler = Profiler.create(LOGGER).startInfo("Load quality profiles"); BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); for (BuiltInQualityProfilesDefinition definition : definitions) { definition.define(context); } Map<String, Map<String, BuiltInQualityProfile>> rulesProfilesByLanguage = validateAndClean(context); this.qProfiles = toFlatList(rulesProfilesByLanguage); ensureAllLanguagesHaveAtLeastOneBuiltInQP(); profiler.stopDebug(); }
private void registerProfile(NewBuiltInQualityProfileImpl newProfile) { String language = newProfile.language(); String name = newProfile.name(); Preconditions.checkArgument(!profilesByLanguageAndName.computeIfAbsent(language, l -> new LinkedHashMap<>()).containsKey(name), "There is already a quality profile with name '%s' for language '%s'", name, language); profilesByLanguageAndName.get(language).put(name, new BuiltInQualityProfileImpl(newProfile)); }
private OverriddenParam(NewOverriddenParam newOverriddenParam) { this.key = newOverriddenParam.key(); this.overriddenValue = newOverriddenParam.overriddenValue; }
private void addPluginProfile(RulesProfileDto dbProfile, RuleDefinitionDto... dbRules) { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newQp = context.createBuiltInQualityProfile(dbProfile.getName(), dbProfile.getLanguage()); Arrays.stream(dbRules).forEach(dbRule -> newQp.activateRule(dbRule.getRepositoryKey(), dbRule.getRuleKey()).overrideSeverity(Severity.MAJOR)); newQp.done(); List<BuiltInActiveRule> rules = context.profile(dbProfile.getLanguage(), dbProfile.getName()).rules(); BuiltInQProfile.ActiveRule[] activeRules = toActiveRules(rules, dbRules); builtInQProfileRepositoryRule.add(newLanguage(dbProfile.getLanguage()), dbProfile.getName(), false, activeRules); }
@Test public void createDefaultProfile() { Map<String, Map<String, BuiltInQualityProfile>> profiles = define(c -> { c.createBuiltInQualityProfile("Foo", "xoo") .setDefault(true) .done(); }); assertThat(profiles).containsOnlyKeys("xoo"); assertThat(profiles.get("xoo")).containsOnlyKeys("Foo"); BuiltInQualityProfile profile = profiles.get("xoo").get("Foo"); assertThat(profile.name()).isEqualTo("Foo"); assertThat(profile.language()).isEqualTo("xoo"); assertThat(profile.isDefault()).isTrue(); }
@Test public void shouldParseOnlyWantedProfile() { BuiltInQualityProfilesDefinition.Context context = new BuiltInQualityProfilesDefinition.Context(); NewBuiltInQualityProfile newProfile = context.createBuiltInQualityProfile("Foo way", "java"); new BuiltInQualityProfileAnnotationLoader().load(newProfile, "squid", FakeRule.class, RuleOnOtherProfile.class, RuleNoProfile.class); newProfile.done(); assertThat(context.profile("java", "Foo way").rule(RuleKey.of("squid", "fake"))).isNotNull(); assertThat(context.profile("java", "Foo way").rule(RuleKey.of("squid", "other"))).isNull(); } }