]> source.dussan.org Git - sonarqube.git/commitdiff
Use arrays insted of set for Duplicates
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Tue, 30 Jul 2019 20:38:34 +0000 (15:38 -0500)
committerSonarTech <sonartech@sonarsource.com>
Wed, 4 Sep 2019 18:21:04 +0000 (20:21 +0200)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/Duplication.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/duplication/DuplicationMeasures.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/ComponentIssuesLoader.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scm/ScmInfo.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/scm/ScmInfoImpl.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/SymbolsLineReader.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/NewSizeMeasuresStep.java

index 8f129042d84fec56d03350df60238206fdbc77bc..bcff1d73fc66b10a7f51a6653742094cab6ef01a 100644 (file)
@@ -38,7 +38,7 @@ public final class Duplication {
     .thenComparing(DuplicateToFileKey.INSTANCE).thenComparing(DuplicateToTextBlock.INSTANCE);
 
   private final TextBlock original;
-  private final SortedSet<Duplicate> duplicates;
+  private final Duplicate[] duplicates;
 
   /**
    * @throws NullPointerException     if {@code original} is {@code null} or {@code duplicates} is {@code null} or {@code duplicates} contains {@code null}
@@ -48,8 +48,7 @@ public final class Duplication {
   public Duplication(TextBlock original, List<Duplicate> duplicates) {
     this.original = requireNonNull(original, "original TextBlock can not be null");
     validateDuplicates(original, duplicates);
-    this.duplicates = new TreeSet<>(DUPLICATE_COMPARATOR);
-    this.duplicates.addAll(duplicates);
+    this.duplicates = duplicates.stream().sorted(DUPLICATE_COMPARATOR).distinct().toArray(Duplicate[]::new);
   }
 
   private static void validateDuplicates(TextBlock original, List<Duplicate> duplicates) {
@@ -80,7 +79,7 @@ public final class Duplication {
    * </ul
    * <p>The returned set can not be empty and no inner duplicate can contain the original {@link TextBlock}.</p>
    */
-  public SortedSet<Duplicate> getDuplicates() {
+  public Duplicate[] getDuplicates() {
     return this.duplicates;
   }
 
index c2fd3bd4db59dc7941ef255f8a78b7d636c9a28b..08200f35b0e42bc49c6c892dfeea8a6ef60247db 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.ce.task.projectanalysis.duplication;
 
 import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
@@ -124,7 +125,7 @@ public class DuplicationMeasures {
       for (Duplication duplication : duplications) {
         blocks++;
         addLines(duplication.getOriginal(), duplicatedLineNumbers);
-        InnerDuplicate[] innerDuplicates = duplication.getDuplicates().stream()
+        InnerDuplicate[] innerDuplicates = Arrays.stream(duplication.getDuplicates())
           .filter(x -> x instanceof InnerDuplicate)
           .map(d -> (InnerDuplicate) d)
           .toArray(InnerDuplicate[]::new);
index 5defa8906e01b50d3c51ee510951f448e13fa47e..df7a4865df5d87dea6461be5b23f83dfd585f5bc 100644 (file)
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -178,7 +179,7 @@ public class ComponentIssuesLoader {
       issue.setSelectedAt(System.currentTimeMillis());
       result.add(issue);
     });
-    return ImmutableList.copyOf(result);
+    return Collections.unmodifiableList(result);
   }
 
   private static void setChanges(Map<String, List<IssueChangeDto>> changeDtoByIssueKey, DefaultIssue i) {
index 720b225481864d1be4ec4b4a98cf41c631c15974..32f58890487d4eaee61bf0a68c70ee9f0661aa97 100644 (file)
@@ -43,7 +43,7 @@ public interface ScmInfo {
   boolean hasChangesetForLine(int lineNumber);
 
   /**
-   * Return all ChangeSets, in order, for all lines that have changesets.
+   * Return all ChangeSets, index by line number. Some values might be null.
    */
   Changeset[] getAllChangesets();
 
index cb1514699f1c55cb6b9c43d85f162d939c9f01d1..44fe0b8f319aeb017644a170209819fae050a50a 100644 (file)
@@ -64,7 +64,7 @@ public class ScmInfoImpl implements ScmInfo {
 
   @Override
   public boolean hasChangesetForLine(int lineNumber) {
-    return lineNumber - 1 < lineChangesets.length && lineChangesets[lineNumber - 1] != null;
+    return lineNumber > 0 && lineNumber - 1 < lineChangesets.length && lineChangesets[lineNumber - 1] != null;
   }
 
   @Override
index 7869b5b4504ca25ef4da4ff489fb1e2e5d632373..29826f6dce191ead4766174b47a4d9d2b207de47 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.ce.task.projectanalysis.source.linereader;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -36,7 +37,6 @@ import org.sonar.ce.task.projectanalysis.duplication.InnerDuplicate;
 import org.sonar.ce.task.projectanalysis.duplication.TextBlock;
 import org.sonar.db.protobuf.DbFileSources;
 
-import static com.google.common.collect.FluentIterable.from;
 import static com.google.common.collect.Iterables.size;
 
 public class DuplicationLineReader implements LineReader {
@@ -86,9 +86,9 @@ public class DuplicationLineReader implements LineReader {
     List<TextBlock> duplicatedBlock = new ArrayList<>(size(duplications));
     for (Duplication duplication : duplications) {
       duplicatedBlock.add(duplication.getOriginal());
-      for (InnerDuplicate duplicate : from(duplication.getDuplicates()).filter(InnerDuplicate.class)) {
-        duplicatedBlock.add(duplicate.getTextBlock());
-      }
+      Arrays.stream(duplication.getDuplicates())
+        .filter(d -> d instanceof InnerDuplicate)
+        .forEach(duplicate -> duplicatedBlock.add(duplicate.getTextBlock()));
     }
     return duplicatedBlock;
   }
index 58636964113a56ae19078dcca72038f97e8b6947..5f71ea424629b74fe7ece5eb397c953c54d90a36 100644 (file)
@@ -82,20 +82,17 @@ public class SymbolsLineReader implements LineReader {
   private void processSymbols(DbFileSources.Line.Builder lineBuilder) {
     int line = lineBuilder.getLine();
 
-    List<ScannerReport.Symbol> lineSymbols = new ArrayList<>(this.symbolsPerLine.get(line));
     // Sort symbols to have deterministic results and avoid false variation that would lead to an unnecessary update of the source files
     // data
-    lineSymbols.sort(SymbolsComparator.INSTANCE);
-
     StringBuilder symbolString = new StringBuilder();
-    for (ScannerReport.Symbol lineSymbol : lineSymbols) {
+    symbolsPerLine.get(line).stream().sorted(SymbolsComparator.INSTANCE).forEach(lineSymbol -> {
       int symbolId = idsBySymbol.get(lineSymbol);
 
       appendSymbol(symbolString, lineSymbol.getDeclaration(), line, symbolId, lineBuilder.getSource());
       for (ScannerReport.TextRange range : lineSymbol.getReferenceList()) {
         appendSymbol(symbolString, range, line, symbolId, lineBuilder.getSource());
       }
-    }
+    });
     if (symbolString.length() > 0) {
       lineBuilder.setSymbols(symbolString.toString());
     }
index 3961b4342e335d521ebf0533a9991a9569b7063c..4e995913003b849b72f5762fd9d9cea4a55afd60 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.ce.task.projectanalysis.step;
 
 import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
@@ -129,7 +130,7 @@ public class NewSizeMeasuresStep implements ComputationStep {
       Iterable<Duplication> duplications = duplicationRepository.getDuplications(component);
       for (Duplication duplication : duplications) {
         duplicationCounters.addBlock(duplication.getOriginal());
-        duplication.getDuplicates().stream()
+        Arrays.stream(duplication.getDuplicates())
           .filter(InnerDuplicate.class::isInstance)
           .map(duplicate -> (InnerDuplicate) duplicate)
           .forEach(duplicate -> duplicationCounters.addBlock(duplicate.getTextBlock()));