@Override public void executeOn(Project project, SensorContext context) { System.out.println("ListAllIssuesPostJob"); // all open issues for (Issue issue : projectIssues.issues()) { String ruleKey = issue.ruleKey().toString(); Integer issueLine = issue.line(); String severity = issue.severity(); boolean isNew = issue.isNew(); // just to illustrate, we dump some fields of the 'issue' in sysout (bad, very bad) System.out.println(ruleKey + " : " + issue.componentKey() + "(" + issueLine + ")"); System.out.println("isNew: " + isNew + " | severity: " + severity); } // all resolved issues for (Issue issue : projectIssues.resolvedIssues()) { String ruleKey = issue.ruleKey().toString(); Integer issueLine = issue.line(); boolean isNew = issue.isNew(); System.out.println(ruleKey + " : " + issue.componentKey() + "(" + issueLine + ")"); System.out.println("isNew: " + isNew + " | resolution: " + issue.resolution()); } }
/** Create issue report according to issue list generated during SonarQube analysis. */ public static SonarQubeIssuesReport extractIssueReport( ProjectIssues projectIssues, InputFileCache inputFileCache, File projectBaseDir) { SonarQubeIssuesReport result = new SonarQubeIssuesReport(); for (Issue issue : projectIssues.issues()) { if (!issue.isNew()) { LOGGER.debug("Issue {} is not a new issue and so, not added to the report", issue.key()); } else { String key = issue.key(); String severity = issue.severity(); String rule = issue.ruleKey().toString(); String message = issue.message(); int line = 0; if (issue.line() != null) { line = issue.line(); } InputFile inputFile = inputFileCache.getInputFile(issue.componentKey()); if (inputFile == null) { LOGGER.debug("Issue {} is not linked to a file, not added to the report", issue.key()); } else { String path = new PathResolver().relativePath(projectBaseDir, inputFile.file()); // Create the issue and Add to report SonarQubeIssue stashIssue = new SonarQubeIssue(key, severity, message, rule, path, line); result.add(stashIssue); } } } return result; }
@VisibleForTesting ListMultimap<TechnicalDebtRequirement, Issue> issuesByRequirement(List<Issue> issues) { ListMultimap<TechnicalDebtRequirement, Issue> issuesByRequirement = ArrayListMultimap.create(); for (Issue issue : issues) { String repositoryKey = issue.ruleKey().repository(); String key = issue.ruleKey().rule(); TechnicalDebtRequirement requirement = technicalDebtModel.getRequirementByRule(repositoryKey, key); if (requirement == null) { LoggerFactory.getLogger(getClass()) .debug("No technical debt requirement for: " + repositoryKey + "/" + key); } else { issuesByRequirement.put(requirement, issue); } } return issuesByRequirement; }
@Test public void shouldPassToChainIfRuleDoesNotMatch() { String rule = "rule"; RuleKey ruleKey = mock(RuleKey.class); when(ruleKey.toString()).thenReturn(rule); when(issue.ruleKey()).thenReturn(ruleKey); IssuePattern matching = mock(IssuePattern.class); WildcardPattern rulePattern = mock(WildcardPattern.class); when(matching.getRulePattern()).thenReturn(rulePattern); when(rulePattern.match(rule)).thenReturn(false); when(exclusionPatternInitializer.getMulticriteriaPatterns()) .thenReturn(ImmutableList.of(matching)); assertThat(ignoreFilter.accept(issue, chain)).isTrue(); verify(chain).accept(issue); }
@Test public void shouldAcceptIssueIfFullyMatched() { String rule = "rule"; String path = "org/sonar/api/Issue.java"; String componentKey = "org.sonar.api.Issue"; RuleKey ruleKey = mock(RuleKey.class); when(ruleKey.toString()).thenReturn(rule); when(issue.ruleKey()).thenReturn(ruleKey); when(issue.componentKey()).thenReturn(componentKey); IssuePattern matching = mock(IssuePattern.class); WildcardPattern rulePattern = mock(WildcardPattern.class); when(matching.getRulePattern()).thenReturn(rulePattern); when(rulePattern.match(rule)).thenReturn(true); WildcardPattern pathPattern = mock(WildcardPattern.class); when(matching.getResourcePattern()).thenReturn(pathPattern); when(pathPattern.match(path)).thenReturn(true); when(exclusionPatternInitializer.getMulticriteriaPatterns()) .thenReturn(ImmutableList.of(matching)); when(exclusionPatternInitializer.getPathForComponent(componentKey)).thenReturn(path); assertThat(ignoreFilter.accept(issue, chain)).isTrue(); verifyZeroInteractions(chain); }