Skip to content

Commit 794c8f4

Browse files
committed
fix for cast exception
1 parent 1828c45 commit 794c8f4

File tree

4 files changed

+58
-70
lines changed

4 files changed

+58
-70
lines changed

objclang/src/main/java/com/backelite/sonarqube/objectivec/issues/fauxpas/FauxPasSensor.java

-3
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,10 @@
2222
import org.apache.tools.ant.DirectoryScanner;
2323
import org.slf4j.Logger;
2424
import org.slf4j.LoggerFactory;
25-
import org.sonar.api.batch.fs.FileSystem;
2625
import org.sonar.api.batch.fs.InputFile;
2726
import org.sonar.api.batch.sensor.Sensor;
2827
import org.sonar.api.batch.sensor.SensorContext;
2928
import org.sonar.api.batch.sensor.SensorDescriptor;
30-
import org.sonar.api.component.ResourcePerspectives;
31-
import org.sonar.api.config.Settings;
3229

3330
import java.io.File;
3431

pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@
9595
<logback.version>1.0.13</logback.version>
9696
<mockito.version>1.9.0</mockito.version>
9797
<slf4j.version>1.7.21</slf4j.version>
98-
<sonar.version>7.5</sonar.version>
99-
<sonar-orchestrator.version>3.22.0.1791</sonar-orchestrator.version>
100-
<sonarlint.version>4.0.0.2052</sonarlint.version>
98+
<sonar.version>7.7</sonar.version>
99+
<sonar-orchestrator.version>3.24.0.1993</sonar-orchestrator.version>
100+
<sonarlint.version>4.1.0.2218</sonarlint.version>
101101
<sslr.version>1.23</sslr.version>
102102
<sslr-squid-bridge.version>2.6.1</sslr-squid-bridge.version>
103103
<ant.version>1.6</ant.version>

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

+50-58
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
import org.slf4j.Logger;
2121
import org.slf4j.LoggerFactory;
2222
import org.sonar.api.batch.fs.FilePredicate;
23+
import org.sonar.api.batch.fs.InputComponent;
2324
import org.sonar.api.batch.fs.InputFile;
24-
import org.sonar.api.batch.fs.InputModule;
25+
import org.sonar.api.batch.fs.internal.DefaultInputComponent;
2526
import org.sonar.api.batch.sensor.SensorContext;
2627
import org.sonar.api.measures.CoreMetrics;
2728
import org.w3c.dom.Document;
@@ -115,23 +116,63 @@ private void parseMeasure(String type, NodeList itemList) {
115116

116117
NodeList values = itemElement.getElementsByTagName(VALUE);
117118
if (FILE_MEASURE.equalsIgnoreCase(type)) {
118-
addComplexityFileMeasures(name, values);
119+
InputFile inputFile = getFile(name);
120+
addComplexityFileMeasures(inputFile, values);
119121
} else if (FUNCTION_MEASURE.equalsIgnoreCase(type)) {
120-
addComplexityFunctionMeasures(new SwiftFunction(name), values);
122+
addComplexityFunctionMeasures(new SwiftFunction(0,name), values);
121123
}
122124
}
123125
}
124126
}
125127

126-
private void addComplexityFileMeasures(String fileName, NodeList values) {
127-
LOGGER.debug("File measures for {}",fileName);
128+
private InputFile getFile(String fileName){
128129
FilePredicate fp = context.fileSystem().predicates().hasRelativePath(fileName);
129130
if (!context.fileSystem().hasFiles(fp)) {
130131
LOGGER.warn("file not included in sonar {}", fileName);
131-
return;
132+
return null;
132133
}
133-
InputFile component = context.fileSystem().inputFile(fp);
134+
return context.fileSystem().inputFile(fp);
135+
}
136+
137+
static class SwiftFunction extends DefaultInputComponent implements InputComponent {
138+
private String name;
139+
private String key;
140+
private String file;
141+
private int lineNumber;
142+
SwiftFunction(int scannerId, String name) {
143+
super(scannerId);
144+
String[] vals = name.split(" at ");
145+
if (vals.length >= 2) {
146+
this.name = vals[0].replaceAll("\\W","");
147+
148+
if (vals[1].contains(":")) {
149+
String[] sp = vals[1].split(":");
150+
this.file = sp[0].substring(0,sp[0].lastIndexOf("."));
151+
this.lineNumber = Integer.parseInt(sp[1]);
152+
} else {
153+
this.file = vals[1];
154+
this.lineNumber = 0;
155+
}
156+
157+
this.key = String.format("%s.%s:%d", this.file, this.name, this.lineNumber);
158+
} else {
159+
this.key = name;
160+
}
161+
}
162+
@Override
163+
public String key() {
164+
return key;
165+
}
166+
@Override
167+
public boolean isFile() {
168+
return false;
169+
}
170+
}
171+
172+
private void addComplexityFileMeasures(InputFile component, NodeList values) {
173+
LOGGER.debug("File measures for {}",component.toString());
134174
int complexity = Integer.parseInt(values.item(cyclomaticComplexityIndex).getTextContent());
175+
135176
context.<Integer>newMeasure()
136177
.on(component)
137178
.forMetric(CoreMetrics.COMPLEXITY)
@@ -153,8 +194,8 @@ private void addComplexityFileMeasures(String fileName, NodeList values) {
153194
.save();
154195
}
155196

156-
private void addComplexityFunctionMeasures(SwiftFunction component, NodeList values) {
157-
LOGGER.debug("Function measures for {}",component.key);
197+
private void addComplexityFunctionMeasures(InputComponent component, NodeList values) {
198+
LOGGER.debug("Function measures for {}",component.key());
158199
int complexity = Integer.parseInt(values.item(cyclomaticComplexityIndex).getTextContent());
159200
context.<Integer>newMeasure()
160201
.on(component)
@@ -169,53 +210,4 @@ private void addComplexityFunctionMeasures(SwiftFunction component, NodeList val
169210
.withValue(numberOfLines)
170211
.save();
171212
}
172-
173-
private static class SwiftFunction implements InputModule {
174-
private String name;
175-
private String key;
176-
private String file;
177-
private int lineNumber;
178-
179-
public SwiftFunction(String name) {
180-
String[] vals = name.split(" at ");
181-
if (vals.length >= 2) {
182-
this.name = vals[0].replaceAll("\\W","");
183-
184-
if (vals[1].contains(":")) {
185-
String[] sp = vals[1].split(":");
186-
this.file = sp[0].substring(0,sp[0].lastIndexOf("."));
187-
this.lineNumber = Integer.parseInt(sp[1]);
188-
} else {
189-
this.file = vals[1];
190-
this.lineNumber = 0;
191-
}
192-
193-
this.key = String.format("%s.%s:%d", this.file, this.name, this.lineNumber);
194-
} else {
195-
this.key = name;
196-
}
197-
}
198-
199-
@Override
200-
public String key() {
201-
return key;
202-
}
203-
204-
public String getName() {
205-
return name;
206-
}
207-
208-
public String getFile() {
209-
return file;
210-
}
211-
212-
public int getLineNumber() {
213-
return lineNumber;
214-
}
215-
216-
@Override
217-
public boolean isFile() {
218-
return false;
219-
}
220-
}
221213
}

swiftlang/src/main/java/com/backelite/sonarqube/swift/lang/SwiftFileSystem.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,17 @@
1818
package com.backelite.sonarqube.swift.lang;
1919

2020
import com.backelite.sonarqube.swift.lang.core.Swift;
21-
import org.sonar.api.batch.ScannerSide;
2221
import org.sonar.api.batch.fs.FilePredicate;
2322
import org.sonar.api.batch.fs.FilePredicates;
2423
import org.sonar.api.batch.fs.FileSystem;
2524
import org.sonar.api.batch.fs.InputFile;
25+
import org.sonar.api.scanner.ScannerSide;
2626

2727
import javax.annotation.CheckForNull;
2828
import java.io.File;
2929
import java.util.ArrayList;
3030
import java.util.List;
3131

32-
3332
@ScannerSide
3433
public class SwiftFileSystem {
3534

@@ -49,10 +48,10 @@ public boolean hasSwiftFiles() {
4948
return fileSystem.hasFiles(isSwiftLanguage);
5049
}
5150

52-
public List<File> sourceFiles() {
53-
Iterable<File> files = fileSystem.files(predicates.and(isSwiftLanguage, isMainTypeFile));
54-
List<File> list = new ArrayList<>();
55-
files.iterator().forEachRemaining(list::add);
51+
public List<InputFile> sourceFiles() {
52+
Iterable<InputFile> inputFiles = fileSystem.inputFiles(predicates.and(isSwiftLanguage, isMainTypeFile));
53+
List<InputFile> list = new ArrayList<>();
54+
inputFiles.iterator().forEachRemaining(list::add);
5655
return list;
5756
}
5857

0 commit comments

Comments
 (0)