Skip to content

Commit 84fa44c

Browse files
committed
Fixed some cobertura parser
1 parent cff0897 commit 84fa44c

File tree

17 files changed

+110
-190
lines changed

17 files changed

+110
-190
lines changed

objclang/src/main/java/com/backelite/sonarqube/objectivec/lang/core/ObjectiveC.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package com.backelite.sonarqube.objectivec.lang.core;
1919

2020
import com.backelite.sonarqube.objectivec.ObjectiveCConstants;
21-
import org.apache.commons.lang.StringUtils;
2221
import org.sonar.api.config.Configuration;
2322
import org.sonar.api.resources.AbstractLanguage;
2423

@@ -37,15 +36,15 @@ public ObjectiveC(Configuration config) {
3736
public String[] getFileSuffixes() {
3837
String[] suffixes = filterEmptyStrings(config.getStringArray(ObjectiveCConstants.FILE_SUFFIXES));
3938
if (suffixes.length == 0) {
40-
suffixes = StringUtils.split(ObjectiveCConstants.FILE_SUFFIXES, ",");
39+
suffixes = ObjectiveCConstants.FILE_SUFFIXES.split( ",");
4140
}
4241
return suffixes;
4342
}
4443

4544
private String[] filterEmptyStrings(String[] stringArray) {
4645
List<String> nonEmptyStrings = new ArrayList<>();
4746
for (String string : stringArray) {
48-
if (StringUtils.isNotBlank(string.trim())) {
47+
if (string.trim().length() > 0) {
4948
nonEmptyStrings.add(string.trim());
5049
}
5150
}

sonar-swift-plugin/src/main/java/com/backelite/sonarqube/swift/complexity/LizardReportParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,19 @@ public class LizardReportParser {
5151
private static final String CYCLOMATIC_COMPLEXITY_LABEL = "CCN";
5252
private static final String FUNCTION_COUNT_LABEL = "Functions";
5353
private final SensorContext context;
54+
private final DocumentBuilderFactory dbfactory;
5455
private int lineCountIndex;
5556
private int cyclomaticComplexityIndex;
5657
private int functionCountIndex;
5758

5859
public LizardReportParser(final SensorContext context) {
5960
this.context = context;
61+
this.dbfactory = DocumentBuilderFactory.newInstance();
6062
}
6163

6264
public void parseReport(final File xmlFile) {
63-
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
6465
try {
65-
DocumentBuilder builder = factory.newDocumentBuilder();
66+
DocumentBuilder builder = dbfactory.newDocumentBuilder();
6667
Document document = builder.parse(xmlFile);
6768
parseFile(document);
6869
} catch (final FileNotFoundException e) {

sonar-swift-plugin/src/main/java/com/backelite/sonarqube/swift/coverage/CoberturaReportParser.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.slf4j.Logger;
2121
import org.slf4j.LoggerFactory;
22+
import org.sonar.api.batch.fs.FilePredicate;
2223
import org.sonar.api.batch.fs.InputFile;
2324
import org.sonar.api.batch.sensor.SensorContext;
2425
import org.sonar.api.batch.sensor.coverage.NewCoverage;
@@ -31,14 +32,16 @@
3132
import javax.xml.parsers.DocumentBuilder;
3233
import javax.xml.parsers.DocumentBuilderFactory;
3334
import javax.xml.parsers.ParserConfigurationException;
34-
import java.io.*;
35+
import java.io.File;
36+
import java.io.FileNotFoundException;
37+
import java.io.IOException;
3538

3639
public final class CoberturaReportParser {
3740
private static final Logger LOGGER = LoggerFactory.getLogger(CoberturaReportParser.class);
3841
private static final String PACKAGES = "packages";
3942
private static final String CLASSES = "class";
4043
private static final String FILE = "filename";
41-
private static final String LINES = "lines";
44+
private static final String LINE = "line";
4245
private static final String NUMBER = "number";
4346
private static final String HITS = "hits";
4447
private static final String BRANCH = "branch";
@@ -84,14 +87,15 @@ private void collectClassMeasures(NodeList nodeList) {
8487
if (node.getNodeType() == Node.ELEMENT_NODE) {
8588
Element element = (Element) node;
8689
String filePath = element.getAttribute(FILE);
87-
NodeList nl = element.getElementsByTagName(LINES);
90+
NodeList nl = element.getElementsByTagName(LINE);
8891
collectFileData(filePath, nl);
8992
}
9093
}
9194
}
9295

9396
private void collectFileData(String filePath, NodeList nodeList) {
9497
InputFile resource = getFile(filePath);
98+
LOGGER.info("Collect file data: {}",resource.toString());
9599
if (resource != null) {
96100
boolean lineAdded = false;
97101
NewCoverage coverage = context.newCoverage();
@@ -130,9 +134,11 @@ private void addCoverageConditions(NewCoverage coverage, int line, String text)
130134
}
131135

132136
private InputFile getFile(String filePath) {
133-
String path = context.fileSystem().baseDir().getAbsolutePath() + File.separator + filePath;
134-
InputFile file = context.fileSystem().inputFile(context.fileSystem().predicates().hasAbsolutePath(path));
135-
return file != null && file.isFile() ? file : null;
137+
FilePredicate fp = context.fileSystem().predicates().hasPath(filePath);
138+
if(context.fileSystem().hasFiles(fp))
139+
return context.fileSystem().inputFile(fp);
140+
LOGGER.warn("Can't find file {}",filePath);
141+
return null;
136142
}
137143

138144
}

sonar-swift-plugin/src/main/java/com/backelite/sonarqube/swift/coverage/CoberturaSensor.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.backelite.sonarqube.commons.Constants;
2121
import com.backelite.sonarqube.objectivec.lang.core.ObjectiveC;
2222
import com.backelite.sonarqube.swift.lang.core.Swift;
23+
import org.apache.tools.ant.DirectoryScanner;
2324
import org.slf4j.Logger;
2425
import org.slf4j.LoggerFactory;
2526
import org.sonar.api.batch.fs.InputFile;
@@ -28,8 +29,6 @@
2829
import org.sonar.api.batch.sensor.SensorDescriptor;
2930

3031
import java.io.File;
31-
import java.io.IOException;
32-
import java.nio.file.*;
3332

3433
public class CoberturaSensor implements Sensor {
3534
private static final Logger LOGGER = LoggerFactory.getLogger(CoberturaSensor.class);
@@ -58,15 +57,16 @@ public void describe(SensorDescriptor descriptor) {
5857
@Override
5958
public void execute(SensorContext context) {
6059
CoberturaReportParser parser = new CoberturaReportParser(context);
61-
String path = reportPath();
62-
String dirPath = context.fileSystem().baseDir().getAbsolutePath() + File.separator + path.substring(0,path.lastIndexOf(File.separator)+1);
63-
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("regex:"+path.replaceAll("\\*","\\\\w+"));
64-
try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(Paths.get(dirPath), pathMatcher::matches)) {
65-
for(Path p : dirStream){
66-
parser.parseReport(p.toFile());
67-
}
68-
} catch (IOException ex){
69-
LOGGER.error( "Error while finding test files.", ex);
60+
DirectoryScanner scanner = new DirectoryScanner();
61+
scanner.setIncludes(new String[]{reportPath()});
62+
scanner.setBasedir(context.fileSystem().baseDir().getAbsolutePath());
63+
scanner.setCaseSensitive(false);
64+
scanner.scan();
65+
String[] files = scanner.getIncludedFiles();
66+
67+
for (String filename : files) {
68+
LOGGER.info("Processing report report {}", filename);
69+
parser.parseReport(new File(filename));
7070
}
7171
}
7272
}

swiftlang/src/main/java/com/backelite/sonarqube/swift/SwiftSquidSensor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private SwiftConfiguration createConfiguration() {
7878
private void save(Collection<SourceCode> squidSourceFiles) {
7979
for (SourceCode squidSourceFile : squidSourceFiles) {
8080
SourceFile squidFile = (SourceFile) squidSourceFile;
81-
String relativePath = pathResolver.relativePath(context.fileSystem().baseDir(), new java.io.File(squidFile.getKey()));
81+
String relativePath = pathResolver.relativePath(context.fileSystem().baseDir(), new File(squidFile.getKey()));
8282
InputFile inputFile = context.fileSystem().inputFile(context.fileSystem().predicates().hasRelativePath(relativePath));
8383

8484
saveMeasures(inputFile, squidFile);

swiftlang/src/main/java/com/backelite/sonarqube/swift/issues/SwiftProfile.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ public class SwiftProfile implements BuiltInQualityProfilesDefinition {
3939
private final SwiftLintProfileImporter swiftLintProfileImporter;
4040
private final TailorProfileImporter tailorProfileImporter;
4141

42-
public SwiftProfile(final SwiftLintProfileImporter swiftLintProfileImporter,
43-
final TailorProfileImporter tailorProfileImporter) {
42+
public SwiftProfile(final SwiftLintProfileImporter swiftLintProfileImporter, final TailorProfileImporter tailorProfileImporter) {
4443
this.swiftLintProfileImporter = swiftLintProfileImporter;
4544
this.tailorProfileImporter = tailorProfileImporter;
4645
}

swiftlang/src/main/java/com/backelite/sonarqube/swift/issues/swiftlint/SwiftLintProfile.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public void define(Context context) {
4848
LOGGER.info("Creating SwiftLint Profile");
4949
NewBuiltInQualityProfile nbiqp = context.createBuiltInQualityProfile(SwiftLintRulesDefinition.REPOSITORY_KEY, Swift.KEY);
5050

51-
5251
try(Reader config = new InputStreamReader(getClass().getResourceAsStream(SwiftLintProfile.PROFILE_PATH))) {
5352
RulesProfile ocLintRulesProfile = profileImporter.importProfile(config, ValidationMessages.create());
5453
for (ActiveRule rule : ocLintRulesProfile.getActiveRules()) {

swiftlang/src/main/java/com/backelite/sonarqube/swift/issues/swiftlint/SwiftLintProfileImporter.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,15 @@
2828
import java.io.Reader;
2929

3030
public class SwiftLintProfileImporter extends ProfileImporter {
31-
32-
private static final String UNABLE_TO_LOAD_DEFAULT_PROFILE = "Unable to load default SwiftLint profile";
3331
private static final Logger LOGGER = LoggerFactory.getLogger(SwiftLintProfileImporter.class);
32+
private static final String UNABLE_TO_LOAD_DEFAULT_PROFILE = "Unable to load default SwiftLint profile";
3433

3534
private final XMLProfileParser profileParser;
3635

3736
public SwiftLintProfileImporter(final XMLProfileParser xmlProfileParser) {
3837
super(SwiftLintRulesDefinition.REPOSITORY_KEY, SwiftLintRulesDefinition.REPOSITORY_KEY);
3938
setSupportedLanguages(Swift.KEY);
40-
profileParser = xmlProfileParser;
39+
this.profileParser = xmlProfileParser;
4140
}
4241

4342
@Override

swiftlang/src/main/java/com/backelite/sonarqube/swift/issues/swiftlint/SwiftLintReportParser.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package com.backelite.sonarqube.swift.issues.swiftlint;
1919

20-
import org.apache.commons.io.IOUtils;
2120
import org.slf4j.Logger;
2221
import org.slf4j.LoggerFactory;
2322
import org.sonar.api.batch.fs.FilePredicate;
@@ -28,11 +27,12 @@
2827
import org.sonar.api.rule.RuleKey;
2928

3029
import java.io.*;
30+
import java.nio.file.Files;
3131
import java.util.regex.Matcher;
3232
import java.util.regex.Pattern;
33+
import java.util.stream.Stream;
3334

3435
public class SwiftLintReportParser {
35-
3636
private static final Logger LOGGER = LoggerFactory.getLogger(SwiftLintReportParser.class);
3737

3838
private final SensorContext context;
@@ -42,21 +42,9 @@ public SwiftLintReportParser(final SensorContext context) {
4242
}
4343

4444
public void parseReport(File reportFile) {
45-
try {
45+
try (Stream<String> lines = Files.lines(reportFile.toPath())) {
4646
// Read and parse report
47-
FileReader fr = new FileReader(reportFile);
48-
49-
BufferedReader br = new BufferedReader(fr);
50-
String line;
51-
while ((line = br.readLine()) != null) {
52-
recordIssue(line);
53-
54-
}
55-
IOUtils.closeQuietly(br);
56-
IOUtils.closeQuietly(fr);
57-
58-
} catch (FileNotFoundException e) {
59-
LOGGER.error("Failed to parse SwiftLint report file", e);
47+
lines.forEach(this::recordIssue);
6048
} catch (IOException e) {
6149
LOGGER.error("Failed to parse SwiftLint report file", e);
6250
}

swiftlang/src/main/java/com/backelite/sonarqube/swift/issues/swiftlint/SwiftLintRulesDefinition.java

Lines changed: 14 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package com.backelite.sonarqube.swift.issues.swiftlint;
1919

2020
import com.backelite.sonarqube.swift.lang.core.Swift;
21-
import org.apache.commons.io.IOUtils;
2221
import org.apache.commons.lang.CharEncoding;
2322
import org.json.simple.JSONArray;
2423
import org.json.simple.JSONObject;
@@ -28,7 +27,6 @@
2827
import org.sonar.api.server.rule.RulesDefinition;
2928
import org.sonar.squidbridge.rules.SqaleXmlLoader;
3029

31-
import java.io.BufferedReader;
3230
import java.io.IOException;
3331
import java.io.InputStreamReader;
3432
import java.io.Reader;
@@ -37,51 +35,30 @@
3735
* Created by gillesgrousset on 27/11/2015.
3836
*/
3937
public class SwiftLintRulesDefinition implements RulesDefinition {
40-
38+
private static final Logger LOGGER = LoggerFactory.getLogger(SwiftLintRulesDefinition.class);
4139
public static final String REPOSITORY_KEY = "SwiftLint";
4240
public static final String REPOSITORY_NAME = REPOSITORY_KEY;
43-
private static final Logger LOGGER = LoggerFactory.getLogger(SwiftLintRulesDefinition.class);
4441
private static final String RULES_FILE = "/org/sonar/plugins/swiftlint/rules.json";
4542

4643
@Override
4744
public void define(Context context) {
48-
49-
NewRepository repository = context
50-
.createRepository(REPOSITORY_KEY, Swift.KEY)
51-
.setName(REPOSITORY_NAME);
52-
53-
try {
54-
loadRules(repository);
45+
NewRepository repository = context.createRepository(REPOSITORY_KEY, Swift.KEY).setName(REPOSITORY_NAME);
46+
47+
try(Reader reader = new InputStreamReader(getClass().getResourceAsStream(RULES_FILE), CharEncoding.UTF_8)){
48+
JSONArray slRules = (JSONArray)JSONValue.parse(reader);
49+
if(slRules != null){
50+
for (Object obj : slRules) {
51+
JSONObject slRule = (JSONObject) obj;
52+
repository.createRule((String) slRule.get("key"))
53+
.setName((String) slRule.get("name"))
54+
.setSeverity((String) slRule.get("severity"))
55+
.setHtmlDescription((String) slRule.get("description"));
56+
}
57+
}
5558
} catch (IOException e) {
5659
LOGGER.error("Failed to load SwiftLint rules", e);
5760
}
58-
5961
SqaleXmlLoader.load(repository, "/com/sonar/sqale/swiftlint-model.xml");
60-
6162
repository.done();
62-
63-
}
64-
65-
private void loadRules(NewRepository repository) throws IOException {
66-
67-
Reader reader = new BufferedReader(new InputStreamReader(getClass()
68-
.getResourceAsStream(RULES_FILE), CharEncoding.UTF_8));
69-
70-
String jsonString = IOUtils.toString(reader);
71-
72-
Object rulesObj = JSONValue.parse(jsonString);
73-
74-
if (rulesObj != null) {
75-
JSONArray slRules = (JSONArray) rulesObj;
76-
for (Object obj : slRules) {
77-
JSONObject slRule = (JSONObject) obj;
78-
79-
RulesDefinition.NewRule rule = repository.createRule((String) slRule.get("key"));
80-
rule.setName((String) slRule.get("name"));
81-
rule.setSeverity((String) slRule.get("severity"));
82-
rule.setHtmlDescription((String) slRule.get("description"));
83-
84-
}
85-
}
8663
}
8764
}

0 commit comments

Comments
 (0)