/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd; import java.util.logging.Level; import java.util.logging.Logger; import net.sourceforge.pmd.benchmark.Benchmark; import net.sourceforge.pmd.benchmark.Benchmarker; public final class RulesetsFactoryUtils { private static final Logger LOG = Logger.getLogger(RulesetsFactoryUtils.class.getName()); private RulesetsFactoryUtils() { } /** * Creates a new rulesets with the given string. The resulting rulesets will * contain all referenced rulesets. * * @param rulesets * the string with the rulesets to load * @param factory * the ruleset factory * @return the rulesets * @throws IllegalArgumentException * if rulesets is empty (means, no rules have been found) or if * a ruleset couldn't be found. */ public static RuleSets getRuleSets(String rulesets, RuleSetFactory factory) { RuleSets ruleSets = null; try { ruleSets = factory.createRuleSets(rulesets); printRuleNamesInDebug(ruleSets); if (ruleSets.ruleCount() == 0) { String msg = "No rules found. Maybe you mispelled a rule name? (" + rulesets + ")"; LOG.log(Level.SEVERE, msg); throw new IllegalArgumentException(msg); } } catch (RuleSetNotFoundException rsnfe) { LOG.log(Level.SEVERE, "Ruleset not found", rsnfe); throw new IllegalArgumentException(rsnfe); } return ruleSets; } /** * See {@link #getRuleSets(String, RuleSetFactory)}. In addition, the * loading of the rules is benchmarked. * * @param rulesets * the string with the rulesets to load * @param factory * the ruleset factory * @return the rulesets * @throws IllegalArgumentException * if rulesets is empty (means, no rules have been found) or if * a ruleset couldn't be found. */ public static RuleSets getRuleSetsWithBenchmark(String rulesets, RuleSetFactory factory) { long loadRuleStart = System.nanoTime(); RuleSets ruleSets = null; try { ruleSets = getRuleSets(rulesets, factory); } finally { long endLoadRules = System.nanoTime(); Benchmarker.mark(Benchmark.LoadRules, endLoadRules - loadRuleStart, 0); } return ruleSets; } public static RuleSetFactory getRulesetFactory(final PMDConfiguration configuration) { return new RuleSetFactory(configuration.getClassLoader(), configuration.getMinimumPriority(), true, configuration.isRuleSetFactoryCompatibilityEnabled()); } /** * If in debug modus, print the names of the rules. * * @param rulesets * the RuleSets to print */ private static void printRuleNamesInDebug(RuleSets rulesets) { if (LOG.isLoggable(Level.FINER)) { for (Rule r : rulesets.getAllRules()) { LOG.finer("Loaded rule " + r.getName()); } } } }