From 638244f43d7ee3f3a5e643d4b9fcc4456f63b59c Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Wed, 23 Dec 2015 11:29:14 +0100 Subject: [PATCH] SONAR-2867 Standard copy-paste detection should happen within a project, not only within a module --- .../java/org/sonar/batch/cpd/CpdExecutor.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/sonar-batch/src/main/java/org/sonar/batch/cpd/CpdExecutor.java b/sonar-batch/src/main/java/org/sonar/batch/cpd/CpdExecutor.java index 302035c3973..31fac6c17a8 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/cpd/CpdExecutor.java +++ b/sonar-batch/src/main/java/org/sonar/batch/cpd/CpdExecutor.java @@ -93,13 +93,25 @@ public class CpdExecutor { } InputFile inputFile = (InputFile) component.inputComponent(); - Predicate minimumTokensPredicate = DuplicationPredicates.numberOfUnitsNotLessThan(getMinimumTokens(inputFile.language())); - List filtered = from(duplications).filter(minimumTokensPredicate).toList(); + + List filtered; + if (!"java".equalsIgnoreCase(inputFile.language())) { + Predicate minimumTokensPredicate = DuplicationPredicates.numberOfUnitsNotLessThan(getMinimumTokens(inputFile.language())); + filtered = from(duplications).filter(minimumTokensPredicate).toList(); + } else { + filtered = duplications; + } saveDuplications(component, filtered); } @VisibleForTesting + /** + * Not applicable to Java, as the {@link BlockChunker} that it uses does not record start and end units of each block. + * Also, it uses statements instead of tokens. + * @param languageKey + * @return + */ int getMinimumTokens(String languageKey) { int minimumTokens = settings.getInt("sonar.cpd." + languageKey + ".minimumTokens"); if (minimumTokens == 0) { -- 2.39.5