From 140f256f24f9b4dac6b44034cab4211efd34b85e Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Tue, 18 Mar 2014 16:14:05 +0100 Subject: [PATCH] SONAR-926 support cross-project duplications in multi-lang project --- .../main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java | 2 +- .../src/main/java/org/sonar/plugins/cpd/SonarEngine.java | 6 +++--- .../org/sonar/plugins/cpd/index/DbDuplicationsIndex.java | 5 +++-- .../main/java/org/sonar/plugins/cpd/index/IndexFactory.java | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java index cf6af57a06c..7c24a89bb3a 100644 --- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java +++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarBridgeEngine.java @@ -101,7 +101,7 @@ public class SonarBridgeEngine extends CpdEngine { } // Create index - SonarDuplicationsIndex index = indexFactory.create(project); + SonarDuplicationsIndex index = indexFactory.create(project, languageKey); TokenizerBridge bridge = new TokenizerBridge(mapping.getTokenizer(), fs.encoding().name(), getBlockSize(project, languageKey)); for (InputFile inputFile : sourceFiles) { diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java index c1890f4a08c..8255053db31 100644 --- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java +++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/SonarEngine.java @@ -102,12 +102,12 @@ public class SonarEngine extends CpdEngine { if (sourceFiles.isEmpty()) { return; } - SonarDuplicationsIndex index = createIndex(project, sourceFiles); + SonarDuplicationsIndex index = createIndex(project, languageKey, sourceFiles); detect(index, context, sourceFiles); } - private SonarDuplicationsIndex createIndex(Project project, Iterable sourceFiles) { - final SonarDuplicationsIndex index = indexFactory.create(project); + private SonarDuplicationsIndex createIndex(Project project, String language, Iterable sourceFiles) { + final SonarDuplicationsIndex index = indexFactory.create(project, language); TokenChunker tokenChunker = JavaTokenProducer.build(); StatementChunker statementChunker = JavaStatementBuilder.build(); diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/DbDuplicationsIndex.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/DbDuplicationsIndex.java index d91b4c22954..2b587690753 100644 --- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/DbDuplicationsIndex.java +++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/DbDuplicationsIndex.java @@ -46,14 +46,15 @@ public class DbDuplicationsIndex { private DuplicationDao dao; - public DbDuplicationsIndex(ResourcePersister resourcePersister, Project currentProject, DuplicationDao dao) { + public DbDuplicationsIndex(ResourcePersister resourcePersister, Project currentProject, DuplicationDao dao, + String language) { this.dao = dao; this.resourcePersister = resourcePersister; Snapshot currentSnapshot = resourcePersister.getSnapshotOrFail(currentProject); Snapshot lastSnapshot = resourcePersister.getLastSnapshot(currentSnapshot, false); this.currentProjectSnapshotId = currentSnapshot.getId(); this.lastSnapshotId = lastSnapshot == null ? null : lastSnapshot.getId(); - this.languageKey = currentProject.getLanguageKey(); + this.languageKey = language; } int getSnapshotIdFor(InputFile inputFile) { diff --git a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/IndexFactory.java b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/IndexFactory.java index 4a242726e63..f6f8981f6c1 100644 --- a/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/IndexFactory.java +++ b/plugins/sonar-cpd-plugin/src/main/java/org/sonar/plugins/cpd/index/IndexFactory.java @@ -44,9 +44,9 @@ public class IndexFactory implements BatchExtension { this.dao = dao; } - public SonarDuplicationsIndex create(Project project) { + public SonarDuplicationsIndex create(Project project, String languageKey) { if (verifyCrossProject(project, LOG)) { - return new SonarDuplicationsIndex(new DbDuplicationsIndex(resourcePersister, project, dao)); + return new SonarDuplicationsIndex(new DbDuplicationsIndex(resourcePersister, project, dao, languageKey)); } return new SonarDuplicationsIndex(); } -- 2.39.5