Skip to content

Commit 5234708

Browse files
author
Gilles Grousset
committed
Merge branch 'develop'
2 parents 1f5d30e + 3f31c84 commit 5234708

File tree

16 files changed

+545
-107
lines changed

16 files changed

+545
-107
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<p align="left">
2-
<img src="http://www.backelite.com/bkimages/extension/backelite/design/backelite/templates/img/header_logo.png/3840/2160/PNG" width="100"/>
2+
<img src="https://www.backelite.com/wp-content/uploads/2016/09/logo-backelite-square.png" width="100"/>
33
</p>
44

55
| Branch | Status |
@@ -42,6 +42,11 @@ Otherwise, run the ```run-sonar-swift.sh``` script from your Xcode project root
4242

4343
###Release history
4444

45+
####0.3.0
46+
- SonarQube 6 support. Important : will work with SonarQube 5.x and above only. Will not work anymore with SonarQube 4.5.x anymore.
47+
- SwiftLint 0.13.1 support (49 rules now).
48+
- Desactivation of unit tests and coverage is now allowed. Use **run-sonar-swift.sh -nounittests** to do it.
49+
4550
####0.2.4
4651
- Analysis does not fail anymore when an unkwown issue is reported by SwiftLint. See [issue 35](https://github.com/Backelite/sonar-swift/issues/35)
4752
- Fastlane documentation (thanks to [viteinfinite](https://github.com/viteinfinite)). See [PR 33](https://github.com/Backelite/sonar-swift/pull/33)

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
<groupId>com.backelite.sonarqube</groupId>
2828
<artifactId>backelite-sonar-swift-plugin</artifactId>
29-
<version>0.2.4</version>
29+
<version>0.3.0</version>
3030

3131
<packaging>sonar-plugin</packaging>
3232

@@ -67,7 +67,7 @@
6767

6868
<maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
6969

70-
<sonar.version>4.3</sonar.version>
70+
<sonar.version>5.0</sonar.version>
7171
<sslr.version>1.20</sslr.version>
7272

7373
<!-- Configuration for sonar-packaging-maven-plugin -->
@@ -81,16 +81,13 @@
8181
<groupId>org.codehaus.sonar</groupId>
8282
<artifactId>sonar-plugin-api</artifactId>
8383
<version>${sonar.version}</version>
84+
<scope>provided</scope>
8485
</dependency>
8586
<dependency>
8687
<groupId>org.codehaus.sonar</groupId>
8788
<artifactId>sonar-testing-harness</artifactId>
8889
<version>${sonar.version}</version>
89-
</dependency>
90-
<dependency>
91-
<groupId>org.codehaus.sonar</groupId>
92-
<artifactId>sonar-deprecated</artifactId>
93-
<version>${sonar.version}</version>
90+
<scope>test</scope>
9491
</dependency>
9592

9693
<dependency>
@@ -134,11 +131,13 @@
134131
<groupId>junit</groupId>
135132
<artifactId>junit</artifactId>
136133
<version>4.10</version>
134+
<scope>test</scope>
137135
</dependency>
138136
<dependency>
139137
<groupId>org.mockito</groupId>
140138
<artifactId>mockito-all</artifactId>
141139
<version>1.9.0</version>
140+
<scope>test</scope>
142141
</dependency>
143142
<dependency>
144143
<groupId>org.hamcrest</groupId>
@@ -149,6 +148,7 @@
149148
<groupId>org.easytesting</groupId>
150149
<artifactId>fest-assert</artifactId>
151150
<version>1.4</version>
151+
<scope>test</scope>
152152
</dependency>
153153
<dependency>
154154
<groupId>ch.qos.logback</groupId>

src/main/java/org/sonar/plugins/swift/SwiftPlugin.java

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,38 @@
2727
import org.sonar.plugins.swift.complexity.LizardSensor;
2828
import org.sonar.plugins.swift.coverage.SwiftCoberturaSensor;
2929
import org.sonar.plugins.swift.cpd.SwiftCpdMapping;
30-
import org.sonar.plugins.swift.lang.core.Swift;
3130
import org.sonar.plugins.swift.issues.SwiftProfile;
31+
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintProfile;
32+
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintProfileImporter;
33+
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintRulesDefinition;
34+
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintSensor;
35+
import org.sonar.plugins.swift.lang.core.Swift;
3236
import org.sonar.plugins.swift.tests.SwiftSurefireSensor;
33-
import org.sonar.plugins.swift.issues.swiftlint.*;
3437

3538
import java.util.List;
3639

3740
@Properties({
38-
@Property(key = SwiftCoberturaSensor.REPORT_PATTERN_KEY, defaultValue = SwiftCoberturaSensor.DEFAULT_REPORT_PATTERN, name = "Path to unit test coverage report(s)", description = "Relative to projects' root. Ant patterns are accepted", global = false, project = true),
39-
@Property(key = SwiftLintSensor.REPORT_PATH_KEY, defaultValue = SwiftLintSensor.DEFAULT_REPORT_PATH, name = "Path to SwiftLint report", description = "Relative to projects' root.", global = false, project = true),
40-
@Property(key = LizardSensor.REPORT_PATH_KEY, defaultValue = LizardSensor.DEFAULT_REPORT_PATH, name = "Path to lizard report", description = "Relative to projects' root.", global = false, project = true)
41+
@Property(
42+
key = SwiftCoberturaSensor.REPORT_PATTERN_KEY,
43+
defaultValue = SwiftCoberturaSensor.DEFAULT_REPORT_PATTERN,
44+
name = "Path to unit test coverage report(s)",
45+
description = "Relative to projects' root. Ant patterns are accepted",
46+
global = false,
47+
project = true),
48+
@Property(
49+
key = SwiftLintSensor.REPORT_PATH_KEY,
50+
defaultValue = SwiftLintSensor.DEFAULT_REPORT_PATH,
51+
name = "Path to SwiftLint report",
52+
description = "Relative to projects' root.",
53+
global = false,
54+
project = true),
55+
@Property(
56+
key = LizardSensor.REPORT_PATH_KEY,
57+
defaultValue = LizardSensor.DEFAULT_REPORT_PATH,
58+
name = "Path to lizard report",
59+
description = "Relative to projects' root.",
60+
global = false,
61+
project = true)
4162
})
4263
public class SwiftPlugin extends SonarPlugin {
4364

@@ -55,22 +76,33 @@ public class SwiftPlugin extends SonarPlugin {
5576
@Override
5677
public List getExtensions() {
5778
return ImmutableList.of(
79+
// language support
5880
Swift.class,
59-
SwiftCodeColorizerFormat.class,
60-
SwiftCpdMapping.class,
61-
62-
SwiftSquidSensor.class,
63-
SwiftSurefireSensor.class,
64-
SwiftCoberturaSensor.class,
65-
6681
SwiftProfile.class,
6782

83+
// SwiftLint rules
6884
SwiftLintSensor.class,
6985
SwiftLintRulesDefinition.class,
86+
87+
// SwiftLint guality profile
7088
SwiftLintProfile.class,
7189
SwiftLintProfileImporter.class,
7290

73-
LizardSensor.class
91+
// duplications search
92+
SwiftCpdMapping.class,
93+
94+
// code
95+
SwiftSquidSensor.class,
96+
97+
// tests
98+
SwiftSurefireSensor.class,
99+
SwiftCoberturaSensor.class,
100+
101+
// complexity
102+
LizardSensor.class,
103+
104+
// code highlight
105+
SwiftCodeColorizerFormat.class
74106
);
75107
}
76108
}

src/main/java/org/sonar/plugins/swift/SwiftSquidSensor.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,9 @@
2828
import org.sonar.api.batch.fs.InputFile;
2929
import org.sonar.api.batch.rule.CheckFactory;
3030
import org.sonar.api.batch.rule.Checks;
31-
import org.sonar.api.checks.AnnotationCheckFactory;
3231
import org.sonar.api.component.ResourcePerspectives;
3332
import org.sonar.api.issue.Issuable;
3433
import org.sonar.api.measures.CoreMetrics;
35-
import org.sonar.api.measures.PersistenceMode;
36-
import org.sonar.api.measures.RangeDistributionBuilder;
3734
import org.sonar.api.profiles.RulesProfile;
3835
import org.sonar.api.resources.Project;
3936
import org.sonar.api.resources.Resource;
@@ -50,9 +47,7 @@
5047
import org.sonar.squidbridge.api.CheckMessage;
5148
import org.sonar.squidbridge.api.SourceCode;
5249
import org.sonar.squidbridge.api.SourceFile;
53-
import org.sonar.squidbridge.api.SourceFunction;
5450
import org.sonar.squidbridge.checks.SquidCheck;
55-
import org.sonar.squidbridge.indexer.QueryByParent;
5651
import org.sonar.squidbridge.indexer.QueryByType;
5752

5853
import java.util.Collection;
@@ -65,7 +60,6 @@ public class SwiftSquidSensor implements Sensor {
6560
private final Number[] FUNCTIONS_DISTRIB_BOTTOM_LIMITS = {1, 2, 4, 6, 8, 10, 12, 20, 30};
6661
private final Number[] FILES_DISTRIB_BOTTOM_LIMITS = {0, 5, 10, 20, 30, 60, 90};
6762

68-
private final AnnotationCheckFactory annotationCheckFactory;
6963
private final FileSystem fileSystem;
7064
private final PathResolver pathResolver;
7165
private final ResourcePerspectives resourcePerspectives;
@@ -78,7 +72,6 @@ public class SwiftSquidSensor implements Sensor {
7872

7973
public SwiftSquidSensor(RulesProfile profile, FileSystem fileSystem, PathResolver pathResolver, ResourcePerspectives resourcePerspectives, CheckFactory checkFactory) {
8074

81-
this.annotationCheckFactory = AnnotationCheckFactory.create(profile, CheckList.REPOSITORY_KEY, CheckList.getChecks());
8275
this.fileSystem = fileSystem;
8376
this.pathResolver = pathResolver;
8477
this.resourcePerspectives = resourcePerspectives;
@@ -140,7 +133,7 @@ private void saveIssues(InputFile inputFile, SourceFile squidFile) {
140133

141134
Collection<CheckMessage> messages = squidFile.getCheckMessages();
142135

143-
Resource resource = context.getResource(org.sonar.api.resources.File.fromIOFile(inputFile.file(), project));
136+
Resource resource = context.getResource(inputFile);
144137

145138
if (messages != null && resource != null) {
146139
for (CheckMessage message : messages) {

src/main/java/org/sonar/plugins/swift/complexity/LizardMeasurePersistor.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,21 @@
1919
*/
2020
package org.sonar.plugins.swift.complexity;
2121

22+
import org.slf4j.Logger;
2223
import org.slf4j.LoggerFactory;
2324
import org.sonar.api.batch.SensorContext;
2425
import org.sonar.api.batch.fs.FileSystem;
26+
import org.sonar.api.batch.fs.InputFile;
2527
import org.sonar.api.measures.Measure;
2628
import org.sonar.api.resources.Project;
29+
import org.sonar.api.resources.Resource;
2730

2831
import java.io.File;
2932
import java.util.List;
3033
import java.util.Map;
3134

3235
public class LizardMeasurePersistor {
36+
private static final Logger LOGGER = LoggerFactory.getLogger(LizardMeasurePersistor.class);
3337

3438
private Project project;
3539
private SensorContext sensorContext;
@@ -48,22 +52,26 @@ public void saveMeasures(final Map<String, List<Measure>> measures) {
4852
}
4953

5054
for (Map.Entry<String, List<Measure>> entry : measures.entrySet()) {
51-
final org.sonar.api.resources.File file = org.sonar.api.resources.File.fromIOFile(new File(fileSystem.baseDir(), entry.getKey()), project);
52-
if (fileExists(sensorContext, file)) {
55+
File file = new File(fileSystem.baseDir(), entry.getKey());
56+
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().hasAbsolutePath(file.getAbsolutePath()));
57+
58+
if (inputFile == null) {
59+
LOGGER.warn("file not included in sonar {}", entry.getKey());
60+
continue;
61+
}
62+
63+
Resource resource = sensorContext.getResource(inputFile);
64+
65+
if (resource != null) {
5366
for (Measure measure : entry.getValue()) {
5467
try {
55-
LoggerFactory.getLogger(getClass()).debug("Save measure {} for file {}", measure.getMetric().getName(), file);
56-
sensorContext.saveMeasure(file, measure);
68+
LOGGER.debug("Save measure {} for file {}", measure.getMetric().getName(), file);
69+
sensorContext.saveMeasure(resource, measure);
5770
} catch (Exception e) {
58-
LoggerFactory.getLogger(getClass()).error(" Exception -> {} -> {}", entry.getKey(), measure.getMetric().getName());
71+
LOGGER.error(" Exception -> {} -> {}", entry.getKey(), measure.getMetric().getName());
5972
}
6073
}
6174
}
6275
}
6376
}
64-
65-
private boolean fileExists(final SensorContext context,
66-
final org.sonar.api.resources.File file) {
67-
return context.getResource(file) != null;
68-
}
6977
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
import org.apache.commons.lang.StringUtils;
2525
import org.codehaus.staxmate.in.SMHierarchicCursor;
2626
import org.codehaus.staxmate.in.SMInputCursor;
27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
2729
import org.sonar.api.batch.SensorContext;
2830
import org.sonar.api.batch.fs.FileSystem;
31+
import org.sonar.api.batch.fs.InputFile;
2932
import org.sonar.api.measures.CoverageMeasuresBuilder;
3033
import org.sonar.api.measures.Measure;
3134
import org.sonar.api.resources.Project;
@@ -42,6 +45,8 @@
4245

4346
final class CoberturaReportParser {
4447

48+
private static final Logger LOGGER = LoggerFactory.getLogger(CoberturaReportParser.class);
49+
4550
private final FileSystem fileSystem;
4651
private final Project project;
4752
private final SensorContext context;
@@ -81,7 +86,15 @@ private void collectPackageMeasures(SMInputCursor pack) throws XMLStreamExceptio
8186
collectFileMeasures(pack.descendantElementCursor("class"), builderByFilename);
8287
for (Map.Entry<String, CoverageMeasuresBuilder> entry : builderByFilename.entrySet()) {
8388
String filePath = entry.getKey();
84-
Resource resource = org.sonar.api.resources.File.fromIOFile(new File(fileSystem.baseDir(), filePath), project);
89+
File file = new File(fileSystem.baseDir(), filePath);
90+
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().hasAbsolutePath(file.getAbsolutePath()));
91+
92+
if (inputFile == null) {
93+
LOGGER.warn("file not included in sonar {}", filePath);
94+
continue;
95+
}
96+
97+
Resource resource = context.getResource(inputFile);
8598
if (resourceExists(resource)) {
8699
for (Measure measure : entry.getValue().createMeasures()) {
87100
context.saveMeasure(resource, measure);

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,12 @@
2525
import org.sonar.api.batch.SensorContext;
2626
import org.sonar.api.batch.fs.FileSystem;
2727
import org.sonar.api.config.Settings;
28-
import org.sonar.api.measures.CoverageMeasuresBuilder;
2928
import org.sonar.api.resources.Project;
3029
import org.sonar.api.scan.filesystem.PathResolver;
3130
import org.sonar.plugins.swift.SwiftPlugin;
3231
import org.sonar.plugins.swift.lang.core.Swift;
3332

3433
import java.io.File;
35-
import java.util.HashMap;
36-
import java.util.Map;
3734

3835

3936
public final class SwiftCoberturaSensor implements Sensor {

src/main/java/org/sonar/plugins/swift/cpd/SwiftCpdMapping.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.sonar.api.batch.AbstractCpdMapping;
2424
import org.sonar.api.batch.fs.FileSystem;
2525
import org.sonar.api.resources.Language;
26-
import org.sonar.api.resources.ProjectFileSystem;
2726
import org.sonar.plugins.swift.lang.core.Swift;
2827

2928
import java.nio.charset.Charset;

src/main/java/org/sonar/plugins/swift/issues/SwiftProfile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
import org.sonar.api.profiles.RulesProfile;
2727
import org.sonar.api.rules.ActiveRule;
2828
import org.sonar.api.utils.ValidationMessages;
29-
import org.sonar.plugins.swift.lang.core.Swift;
3029
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintProfile;
3130
import org.sonar.plugins.swift.issues.swiftlint.SwiftLintProfileImporter;
31+
import org.sonar.plugins.swift.lang.core.Swift;
3232

3333
import java.io.InputStreamReader;
3434
import java.io.Reader;

0 commit comments

Comments
 (0)