From 19ad13dac69306678c0b63d3034f58eabc46acaa Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Mon, 26 Nov 2018 17:52:59 -0600 Subject: [PATCH] SONAR-11529 CE fails if the same duplicated text block is found twice --- .../linereader/DuplicationLineReader.java | 3 +-- .../linereader/DuplicationLineReaderTest.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java index 8c7b07af79e..3c354d0b9ac 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReader.java @@ -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 createIndexOfDuplicatedTextBlocks(Iterable 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)); } /** diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReaderTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReaderTest.java index 9d86533fa23..09e5dda6024 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReaderTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/linereader/DuplicationLineReaderTest.java @@ -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( -- 2.39.5