]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3755 Issue finder optimization
authorJulien Lancelot <julien.lancelot@gmail.com>
Tue, 23 Apr 2013 12:35:22 +0000 (14:35 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Tue, 23 Apr 2013 12:35:22 +0000 (14:35 +0200)
sonar-server/src/main/java/org/sonar/server/issue/ServerIssueFinder.java
sonar-server/src/test/java/org/sonar/server/issue/ServerIssueFinderTest.java

index f406f4867b7df9c16e04b4f08acc1f67b480ca04..b5e52df61ffc8e87b841ab1052db8ca52841dafa 100644 (file)
@@ -86,7 +86,11 @@ public class ServerIssueFinder implements IssueFinder {
           ruleIds.add(dto.getRuleId());
         }
       }
-      return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds));
+      if (!issues.isEmpty()) {
+        return new DefaultResults(issues, getRulesByIssue(issues, ruleIds), getComponentsByIssue(issues, componentIds));
+      } else {
+        return new DefaultResults(issues);
+      }
     } finally {
       MyBatis.closeQuietly(sqlSession);
     }
@@ -144,6 +148,12 @@ public class ServerIssueFinder implements IssueFinder {
       this.componentsByIssue = componentsByIssue;
     }
 
+    DefaultResults(List<Issue> issues) {
+      this.issues = issues;
+      this.rulesByIssue = newHashMap();
+      this.componentsByIssue = newHashMap();
+    }
+
     @Override
     public List<Issue> issues() {
       return issues;
index d3bf37c085ece48135da0380cc4288a384fe9152..7d71aa1e8f2bd89f2545bd76d2966d28da8b9c69 100644 (file)
@@ -38,13 +38,18 @@ import org.sonar.core.resource.ResourceDao;
 import org.sonar.core.rule.DefaultRuleFinder;
 import org.sonar.core.user.AuthorizationDao;
 
+import java.util.Collections;
 import java.util.List;
 
 import static com.google.common.collect.Lists.newArrayList;
 import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyCollection;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anySet;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.*;
 
 public class ServerIssueFinderTest {
 
@@ -148,6 +153,21 @@ public class ServerIssueFinderTest {
     assertThat(results.components()).hasSize(1);
   }
 
+  @Test
+  public void should_get_empty_rule_and_component_from_result_when_no_issue() {
+    grantAccessRights();
+    IssueQuery issueQuery = mock(IssueQuery.class);
+    when(issueDao.select(eq(issueQuery), any(SqlSession.class))).thenReturn(Collections.<IssueDto>emptyList());
+
+    IssueFinder.Results results = finder.find(issueQuery, null, UserRole.USER);
+    assertThat(results.issues()).isEmpty();
+    assertThat(results.rules()).isEmpty();
+    assertThat(results.components()).isEmpty();
+
+    verifyZeroInteractions(ruleFinder);
+    verifyZeroInteractions(resourceDao);
+  }
+
   private void grantAccessRights() {
     when(authorizationDao.keepAuthorizedComponentIds(anySet(), anyInt(), anyString(), any(SqlSession.class)))
       .thenAnswer(new Answer<Object>() {