]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11529 CE fails if the same duplicated text block is found twice
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Mon, 26 Nov 2018 23:52:59 +0000 (17:52 -0600)
committersonartech <sonartech@sonarsource.com>
Fri, 30 Nov 2018 10:20:46 +0000 (11:20 +0100)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReaderTest.java

index 8c7b07af79e903c069b0a3e46cb6a48d20df3a3e..3c354d0b9ac3fd7a98f23b28adab2f7935dcb245 100644 (file)
@@ -34,7 +34,6 @@ import org.sonar.ce.task.projectanalysis.duplication.Duplicate;
 import org.sonar.ce.task.projectanalysis.duplication.Duplication;
 import org.sonar.ce.task.projectanalysis.duplication.InnerDuplicate;
 import org.sonar.ce.task.projectanalysis.duplication.TextBlock;
-import org.sonar.core.util.stream.MoreCollectors;
 import org.sonar.db.protobuf.DbFileSources;
 
 import static com.google.common.collect.FluentIterable.from;
@@ -71,7 +70,7 @@ public class DuplicationLineReader implements LineReader {
   private static Map<TextBlock, Integer> createIndexOfDuplicatedTextBlocks(Iterable<Duplication> duplications) {
     return extractAllDuplicatedTextBlocks(duplications)
       .stream().sorted()
-      .collect(Collectors.toMap(e -> e, new TextBlockIndexGenerator(), MoreCollectors.mergeNotSupportedMerger(), LinkedHashMap::new));
+      .collect(Collectors.toMap(e -> e, new TextBlockIndexGenerator(), (a, b) -> a, LinkedHashMap::new));
   }
 
   /**
index 9d86533fa234e7d3742a19d025dcb1aba5dece72..09e5dda6024b921042b332108d853247f6d95699 100644 (file)
@@ -67,6 +67,23 @@ public class DuplicationLineReaderTest {
     assertThat(line4.getDuplicationList()).containsExactly(2);
   }
 
+  @Test
+  public void read_duplication_with_repeated_text_blocks() {
+    DuplicationLineReader reader = duplicationLineReader(
+      duplication(1, 2, innerDuplicate(3, 4)),
+      duplication(3, 4, innerDuplicate(1, 2)));
+
+    assertThat(reader.read(line1)).isEmpty();
+    assertThat(reader.read(line2)).isEmpty();
+    assertThat(reader.read(line3)).isEmpty();
+    assertThat(reader.read(line4)).isEmpty();
+
+    assertThat(line1.getDuplicationList()).containsExactly(1);
+    assertThat(line2.getDuplicationList()).containsExactly(1);
+    assertThat(line3.getDuplicationList()).containsExactly(3);
+    assertThat(line4.getDuplicationList()).containsExactly(3);
+  }
+
   @Test
   public void read_duplication_with_duplicates_on_other_file() {
     DuplicationLineReader reader = duplicationLineReader(