DefaultRules(Collection<NewRule> newRules) { Map<RuleKey, Rule> rulesByRuleKeyBuilder = new HashMap<>(); ImmutableListMultimap.Builder<String, Rule> builder = ImmutableListMultimap.builder(); Table<String, String, List<Rule>> tableBuilder = HashBasedTable.create(); for (NewRule newRule : newRules) { DefaultRule r = new DefaultRule(newRule); rulesByRuleKeyBuilder.put(r.key(), r); builder.put(r.key().repository(), r); addToTable(tableBuilder, r); } rulesByRuleKey = Collections.unmodifiableMap(rulesByRuleKeyBuilder); rulesByRepository = builder.build(); rulesByRepositoryAndInternalKey = ImmutableTable.copyOf(tableBuilder); }
private static void addToTable(Table<String, String, List<Rule>> table, DefaultRule r) { if (r.internalKey() == null) { return; } List<Rule> ruleList = table.get(r.key().repository(), r.internalKey()); if (ruleList == null) { ruleList = new LinkedList<>(); } ruleList.add(r); table.put(r.key().repository(), r.internalKey(), ruleList); }
IRule linkRule = new DefaultRule(Type.CHARACTER, "/rss/channel/item/link") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { // Also store the link, or something equivalently fancy } }
@Override public void store(Issue issue) { InputComponent inputComponent = issue.primaryLocation().inputComponent(); DefaultRule rule = validateRule(issue); ActiveRule activeRule = activeRules.find(issue.ruleKey()); if (activeRule == null) { // rule does not exist or is not enabled -> ignore the issue return; } if (noSonar(inputComponent, issue)) { return; } String primaryMessage = defaultIfEmpty(issue.primaryLocation().message(), rule.name()); org.sonar.api.batch.rule.Severity overriddenSeverity = issue.overriddenSeverity(); String severity = overriddenSeverity != null ? overriddenSeverity.name() : activeRule.severity(); String type = rule.type(); List<org.sonarsource.sonarlint.core.client.api.common.analysis.Issue.Flow> flows = mapFlows(issue.flows()); DefaultClientIssue newIssue = new DefaultClientIssue(severity, type, activeRule, rules.find(activeRule.ruleKey()), primaryMessage, issue.primaryLocation().textRange(), inputComponent.isFile() ? ((SonarLintInputFile) inputComponent).getClientInputFile() : null, flows); if (filters.accept(inputComponent, newIssue)) { issueListener.handle(newIssue); } }
IRule titleRule = new DefaultRule(Type.CHARACTER, "/rss/channel/title") { @Override public void handleParsedCharacters(XMLParser parser, String text) { // Store the title in a DB or something fancy }}
DefaultRules(Collection<NewRule> newRules) { ImmutableListMultimap.Builder<String, Rule> builder = ImmutableListMultimap.builder(); for (NewRule newRule : newRules) { DefaultRule r = new DefaultRule(newRule); builder.put(r.key().repository(), r); } rulesByRepository = builder.build(); }
IRule linkRule = new DefaultRule(Type.CHARACTER, "/rss/channel/item/link") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { // 'text' is the link; store it, print it, whatever you need... } }
private static void addToTable(Table<String, String, List<Rule>> table, DefaultRule r) { if (r.internalKey() == null) { return; } List<Rule> ruleList = table.get(r.key().repository(), r.internalKey()); if (ruleList == null) { ruleList = new LinkedList<>(); } ruleList.add(r); table.put(r.key().repository(), r.internalKey(), ruleList); }
DefaultRules(Collection<NewRule> newRules) { Map<RuleKey, Rule> rulesByRuleKeyBuilder = new HashMap<>(); ImmutableListMultimap.Builder<String, Rule> builder = ImmutableListMultimap.builder(); Table<String, String, List<Rule>> tableBuilder = HashBasedTable.create(); for (NewRule newRule : newRules) { DefaultRule r = new DefaultRule(newRule); rulesByRuleKeyBuilder.put(r.key(), r); builder.put(r.key().repository(), r); addToTable(tableBuilder, r); } rulesByRuleKey = Collections.unmodifiableMap(rulesByRuleKeyBuilder); rulesByRepository = builder.build(); rulesByRepositoryAndInternalKey = ImmutableTable.copyOf(tableBuilder); }
IRule channelSubjectRule = new DefaultRule(Type.CHARACTER, "/rss/channel/[http://purl.org/dc/elements/1.1/]subject") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { // Got the Channel's dc:subject value! I win! } }
IRule roundNumRule = new DefaultRule(Type.CHARACTER, "/Game/Round/roundNumber") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { System.out.println("Round Parsed: " + text); } } IRule doorNameRule = new DefaultRule(Type.CHARACTER, "/Game/Round/Door/doorName") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { System.out.println("Door Name: " + text); } }
// Create /root/state rule IRule stateRule = new DefaultRule(Type.CHARACTER, "/root/state") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { System.out.println("State is: " + text); } } // Create /root/volume rule IRule volRule = new DefaultRule(Type.CHARACTER, "/state/volume") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { System.out.println("Volume is: " + text); } } // Create the parser with the given rules XMLParser parser = new XMLParser(stateRule, volRule);
IRule linkRule = new DefaultRule(Type.CHARACTER, "/root/Persons/list/Person/Name") { @Override public void handleParsedCharacters(XMLParser parser, String text, Object userObject) { // Get the last person we added on open-tag. Person p = personList.get(personList.size() - 1); // <Name> tag was parsed, 'text' is our parsed Name. Set it. p.setName(text); } }