]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5743 Remove naive approach on code snippets (perf issue)
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 24 Oct 2014 14:04:53 +0000 (16:04 +0200)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Fri, 24 Oct 2014 14:04:53 +0000 (16:04 +0200)
server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java
server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowActionTest.java
server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssuesWsTest.java
server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java
server/sonar-server/src/test/resources/org/sonar/server/issue/ws/SearchActionMediumTest/issue_with_snippet.json

index f5180e50260d4be7b5fed4762ef2ca8a9a974a20..f7a1835abf9c8949902b500016aa601cb4852921 100644 (file)
@@ -55,8 +55,6 @@ import org.sonar.server.rule.RuleService;
 import org.sonar.server.search.QueryContext;
 import org.sonar.server.search.Result;
 import org.sonar.server.search.ws.SearchRequestHandler;
-import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
 import org.sonar.server.user.UserSession;
 
 import javax.annotation.CheckForNull;
@@ -91,11 +89,9 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
   private final UserFinder userFinder;
   private final I18n i18n;
   private final Durations durations;
-  private final SourceService sourceService;
-  private final ScmWriter scmWriter;
 
   public SearchAction(DbClient dbClient, IssueChangeDao issueChangeDao, IssueService service, IssueActionsWriter actionsWriter, IssueQueryService issueQueryService,
-    RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations, SourceService sourceService, ScmWriter scmWriter) {
+    RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations) {
     super(SEARCH_ACTION);
     this.dbClient = dbClient;
     this.issueChangeDao = issueChangeDao;
@@ -107,8 +103,6 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
     this.userFinder = userFinder;
     this.i18n = i18n;
     this.durations = durations;
-    this.sourceService = sourceService;
-    this.scmWriter = scmWriter;
   }
 
   @Override
@@ -357,7 +351,6 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
         .prop("fUpdateAge", formatAgeDate(updateDate))
         .prop("closeDate", isoDate(issue.closeDate()));
 
-      writeIssueSnippet(issue, file, json);
       writeIssueComments(commentsByIssues.get(issue.key()), usersByLogin, json);
       writeIssueAttributes(issue, json);
       writeIssueExtraFields(issue, project != null ? project.getKey() : null, usersByLogin, actionPlanByKeys, extraFields, json);
@@ -367,30 +360,6 @@ public class SearchAction extends SearchRequestHandler<IssueQuery, Issue> {
     json.endArray();
   }
 
-  private void writeIssueSnippet(Issue issue, @Nullable ComponentDto file, JsonWriter json) {
-    Integer lineNumber = issue.line();
-    if (lineNumber == null || file == null) {
-      return;
-    }
-
-    String componentKey = file.key();
-    int from = Math.max(lineNumber - 1, 1);
-    int to = from + 2;
-    int lineCounter = from;
-    List<String> lines = sourceService.getLinesAsHtml(componentKey, from, to);
-    if (lines != null) {
-      json.name("sources").beginArray();
-      for (String line : lines) {
-        json.beginArray().value(lineCounter).value(line).endArray();
-        lineCounter++;
-      }
-      json.endArray();
-      String scmAuthorData = sourceService.getScmAuthorData(componentKey);
-      String scmDateData = sourceService.getScmDateData(componentKey);
-      scmWriter.write(scmAuthorData, scmDateData, from, to, true, json);
-    }
-  }
-
   private void writeIssueComments(Collection<DefaultIssueComment> issueComments, Map<String, User> usersByLogin, JsonWriter json) {
     if (!issueComments.isEmpty()) {
       json.name("comments").beginArray();
index 94cc5f37dbc1cf5e0235a279ddce7881ac6238d9..a83eb86e62a12bbeb2ac2c9b30209ed36e83563e 100644 (file)
@@ -53,7 +53,6 @@ import org.sonar.server.issue.actionplan.ActionPlanService;
 import org.sonar.server.rule.Rule;
 import org.sonar.server.rule.RuleService;
 import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
 import org.sonar.server.user.MockUserSession;
 import org.sonar.server.user.UserSession;
 import org.sonar.server.ws.WsTester;
@@ -144,7 +143,7 @@ public class IssueShowActionTest {
         new IssueActionsWriter(issueService, actionService), actionPlanService, userFinder, debtModel, ruleService, i18n, durations),
       new SearchAction(mock(DbClient.class), mock(IssueChangeDao.class), mock(IssueService.class), mock(IssueActionsWriter.class), mock(IssueQueryService.class),
         mock(RuleService.class),
-        mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class), mock(SourceService.class), mock(ScmWriter.class))));
+        mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class))));
   }
 
   @Test
index 79ff32334f728a53d615aa5899fe428e28f0c50c..ccb9ab999239cd07bb1e27f5952776e7466caf27 100644 (file)
@@ -35,8 +35,6 @@ import org.sonar.server.issue.IssueQueryService;
 import org.sonar.server.issue.IssueService;
 import org.sonar.server.issue.actionplan.ActionPlanService;
 import org.sonar.server.rule.RuleService;
-import org.sonar.server.source.SourceService;
-import org.sonar.server.source.ws.ScmWriter;
 import org.sonar.server.ws.WsTester;
 
 import static org.fest.assertions.Assertions.assertThat;
@@ -61,7 +59,7 @@ public class IssuesWsTest {
       debtModelService, mock(RuleService.class), i18n, durations);
     SearchAction searchAction = new SearchAction(mock(DbClient.class), mock(IssueChangeDao.class), mock(IssueService.class), mock(IssueActionsWriter.class),
       mock(IssueQueryService.class), mock(RuleService.class),
-      mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class), mock(SourceService.class), mock(ScmWriter.class));
+      mock(ActionPlanService.class), mock(UserFinder.class), mock(I18n.class), mock(Durations.class));
     tester = new WsTester(new IssuesWs(showAction, searchAction));
   }
 
index 0a3050e7df8d40ab139b5f26b66b7b8669c3fbb8..13168957580afdaa87140f1b35bc8f6965a6689d 100644 (file)
@@ -424,31 +424,4 @@ public class SearchActionMediumTest {
     result.assertJson(this.getClass(), "default_page_size_is_100.json", false);
   }
 
-  @Test
-  public void issue_on_line() throws Exception {
-    db.userDao().insert(session, new UserDto().setLogin("simon").setName("Simon").setEmail("simon@email.com"));
-    db.userDao().insert(session, new UserDto().setLogin("fabrice").setName("Fabrice").setEmail("fabrice@email.com"));
-
-    IssueDto issue = IssueTesting.newDto(rule, file, project)
-      .setLine(3)
-      .setRule(rule)
-      .setDebt(10L)
-      .setProject(project)
-      .setComponent(file)
-      .setStatus("OPEN").setResolution("OPEN")
-      .setKee("82fd47d4-b650-4037-80bc-7b112bd4eac2")
-      .setSeverity("MAJOR")
-      .setAuthorLogin("John")
-      .setAssignee("simon")
-      .setReporter("fabrice")
-      .setIssueCreationDate(DateUtils.parseDate("2014-09-04"))
-      .setIssueUpdateDate(DateUtils.parseDate("2014-12-04"));
-    db.issueDao().insert(session, issue);
-    session.commit();
-
-    WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).execute();
-    // TODO date assertion is complex to test, and components id are not predictable, that's why strict boolean is set to false
-    result.assertJson(this.getClass(), "issue_with_snippet.json", false);
-  }
-
 }
index 5bc4cb56653bbac5b014f723c5b71f140af763c7..08d46ce270345773bbd5e62075952d84eb3fdf4c 100644 (file)
       "assignee": "simon",
       "reporter": "fabrice",
       "updateDate": "2014-12-04T00:00:00+0100",
-      "fUpdateAge": "less than a minute",
-      "sources": [
-        [2, "Second Line"],
-        [3, "Third Line"],
-        [4, "Fourth Line"]
-      ],
-      "scm": []
+      "fUpdateAge": "less than a minute"
     }
   ],
   "rules": [