Skip to content

Commit 0acd43d

Browse files
- Added capability to perform modular analysis
- Added capability to specify a reports directory.
1 parent e87ab91 commit 0acd43d

File tree

3 files changed

+75
-24
lines changed

3 files changed

+75
-24
lines changed

sonar-swift-plugin/src/main/java/org/sonar/plugins/swift/coverage/CoberturaReportParser.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ private void collectPackageMeasures(SMInputCursor pack) throws XMLStreamExceptio
8484
collectFileMeasures(pack.descendantElementCursor("class"), builderByFilename);
8585
for (Map.Entry<String, CoverageMeasuresBuilder> entry : builderByFilename.entrySet()) {
8686
String filePath = entry.getKey();
87+
if (project.isModule()) {
88+
if (!filePath.startsWith(project.path())) {
89+
continue;
90+
}
91+
// fileSystem.baseDir() will include the module path, so we need to get rid of it here
92+
filePath = filePath.substring(project.path().length());
93+
}
8794
File file = new File(fileSystem.baseDir(), filePath);
8895
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().hasAbsolutePath(file.getAbsolutePath()));
8996

@@ -98,6 +105,7 @@ private void collectPackageMeasures(SMInputCursor pack) throws XMLStreamExceptio
98105
context.saveMeasure(resource, measure);
99106
}
100107
}
108+
LOGGER.info("Successfully collected measures for file " + file.getPath());
101109
}
102110
}
103111
}

sonar-swift-plugin/src/main/java/org/sonar/plugins/swift/coverage/ReportFilesFinder.java

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,57 +18,90 @@
1818
package org.sonar.plugins.swift.coverage;
1919

2020
import org.apache.tools.ant.DirectoryScanner;
21+
import org.slf4j.Logger;
22+
import org.slf4j.LoggerFactory;
2123
import org.sonar.api.config.Settings;
2224

2325
import java.io.File;
26+
import java.util.Arrays;
2427
import java.util.ArrayList;
2528
import java.util.List;
2629

2730
final class ReportFilesFinder {
2831

32+
private static final Logger LOGGER = LoggerFactory.getLogger(ReportFilesFinder.class);
33+
2934
private final Settings conf;
30-
private final String settingsKey;
31-
private final String settingsDefault;
35+
private final String settingsReportKey;
36+
private final String settingsReportDefault;
37+
private final String settingsDirectoryKey;
3238

33-
public ReportFilesFinder(final Settings settings, final String key, final String defaultValue) {
39+
public ReportFilesFinder(final Settings settings, final String settingsReportKey, final String settingsReportDefault, final String settingsDirectoryKey) {
3440

3541
conf = settings;
36-
settingsKey = key;
37-
settingsDefault = defaultValue;
42+
this.settingsReportKey = settingsReportKey;
43+
this.settingsReportDefault = settingsReportDefault;
44+
this.settingsDirectoryKey = settingsDirectoryKey;
3845
}
3946

40-
public List<File> reportsIn(final String baseDirPath) {
47+
public List<File> reportsIn(final String module, final String rootDirectory, final String baseDirectory) {
4148

42-
final String[] relPaths = filesMathingPattern(baseDirPath, reportPattern());
49+
final String reportDirectory = getReportDirectory(module, rootDirectory, baseDirectory);
50+
final String reportPattern = getReportPattern(module);
51+
final String[] relPaths = filesMatchingPattern(reportDirectory, reportPattern);
4352

4453
final List<File> reports = new ArrayList<File>();
4554

4655
for (final String relPath : relPaths) {
47-
reports.add(new File(baseDirPath, relPath));
56+
reports.add(new File(reportDirectory, relPath));
4857
}
4958

5059
return reports;
5160
}
5261

53-
private String[] filesMathingPattern(final String baseDirPath, final String reportPath) {
62+
private String[] filesMatchingPattern(final String reportDirectory, final String reportPath) {
5463

5564
final DirectoryScanner scanner = new DirectoryScanner();
5665
scanner.setIncludes(new String[] { reportPath });
57-
scanner.setBasedir(new File(baseDirPath));
66+
scanner.setBasedir(new File(reportDirectory));
5867
scanner.scan();
68+
69+
LOGGER.info("Files found in directory '" + reportDirectory + "' including '" + reportPath + "': " + Arrays.toString(scanner.getIncludedFiles()));
5970

6071
return scanner.getIncludedFiles();
6172
}
6273

63-
private String reportPattern() {
74+
private String getReportPattern(final String module) {
75+
76+
String reportPath = conf.getString(module + "." + settingsReportKey);
6477

65-
String reportPath = conf.getString(settingsKey);
78+
if (reportPath == null) {
79+
reportPath = conf.getString(settingsReportKey);
80+
}
6681

6782
if (reportPath == null) {
68-
reportPath = settingsDefault;
83+
reportPath = settingsReportDefault;
6984
}
7085

7186
return reportPath;
7287
}
7388

89+
private String getReportDirectory(final String module, final String rootDirectory, final String defaultDirectory) {
90+
91+
String reportDirectory = conf.getString(module + "." + settingsDirectoryKey);
92+
93+
if (reportDirectory == null) {
94+
reportDirectory = conf.getString(settingsDirectoryKey);
95+
}
96+
97+
if (reportDirectory != null) {
98+
reportDirectory = rootDirectory + reportDirectory;
99+
}
100+
else {
101+
reportDirectory = defaultDirectory;
102+
}
103+
104+
return reportDirectory;
105+
}
106+
74107
}

sonar-swift-plugin/src/main/java/org/sonar/plugins/swift/coverage/SwiftCoberturaSensor.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,38 +37,48 @@ public final class SwiftCoberturaSensor implements Sensor {
3737

3838
public static final String REPORT_PATTERN_KEY = SwiftPlugin.PROPERTY_PREFIX + ".coverage.reportPattern";
3939
public static final String DEFAULT_REPORT_PATTERN = "sonar-reports/coverage-swift*.xml";
40+
public static final String REPORT_DIRECTORY_KEY = SwiftPlugin.PROPERTY_PREFIX + ".coverage.reportDirectory";
4041

4142
private final ReportFilesFinder reportFilesFinder;
4243

4344
private final Settings settings;
4445
private final FileSystem fileSystem;
4546
private final PathResolver pathResolver;
46-
private Project project;
4747

4848
public SwiftCoberturaSensor(final FileSystem fileSystem, final PathResolver pathResolver, final Settings settings) {
49-
49+
5050
this.settings = settings;
5151
this.fileSystem = fileSystem;
52-
this.pathResolver = pathResolver;
52+
this.pathResolver = pathResolver;
5353

54-
reportFilesFinder = new ReportFilesFinder(settings, REPORT_PATTERN_KEY, DEFAULT_REPORT_PATTERN);
55-
}
54+
reportFilesFinder = new ReportFilesFinder(settings, REPORT_PATTERN_KEY, DEFAULT_REPORT_PATTERN, REPORT_DIRECTORY_KEY);
55+
}
5656

5757
public boolean shouldExecuteOnProject(final Project project) {
58-
59-
this.project = project;
60-
61-
return project.isRoot() && fileSystem.languages().contains(Swift.KEY);
58+
return fileSystem.languages().contains(Swift.KEY);
6259
}
6360

6461
public void analyse(final Project project, final SensorContext context) {
6562

66-
6763
final String projectBaseDir = fileSystem.baseDir().getPath();
64+
LOGGER.info("Analyzing directory: " + projectBaseDir);
6865

69-
for (final File report : reportFilesFinder.reportsIn(projectBaseDir)) {
66+
final String module = project.getName();
67+
final String rootDir = getRootDirectory(project);
68+
69+
for (final File report : reportFilesFinder.reportsIn(module, rootDir, projectBaseDir)) {
7070
LOGGER.info("Processing coverage report {}", report);
7171
CoberturaReportParser.parseReport(report, fileSystem, project, context);
7272
}
7373
}
74+
75+
private String getRootDirectory(Project project) {
76+
final String projectBaseDir = fileSystem.baseDir().getPath();
77+
if (project.isRoot()) {
78+
return projectBaseDir;
79+
} else {
80+
final String modulePath = project.path();
81+
return projectBaseDir.substring(0, projectBaseDir.length() - modulePath.length());
82+
}
83+
}
7484
}

0 commit comments

Comments
 (0)