aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-ws-client/src
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2011-04-27 20:29:11 +0400
committerEvgeny Mandrikov <mandrikov@gmail.com>2011-04-27 22:10:58 +0400
commit25f963bfb953346ee85337009b1af7d665494aa0 (patch)
treef1ae028f197e0538460c5d3e349832915bf49bdb /sonar-ws-client/src
parent70c03e6ac1e0f24277655f9e7666142d9418d270 (diff)
downloadsonarqube-25f963bfb953346ee85337009b1af7d665494aa0.tar.gz
sonarqube-25f963bfb953346ee85337009b1af7d665494aa0.zip
SONAR-2386 Define contract for lineId in Violation
Value can be null or greater than zero, so setter must log warning if not null and less than 1. It will throw an exception in future releases.
Diffstat (limited to 'sonar-ws-client/src')
-rw-r--r--sonar-ws-client/src/main/java/org/sonar/wsclient/services/Violation.java22
-rw-r--r--sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java12
-rw-r--r--sonar-ws-client/src/test/resources/violations/violation-with-incorrect-line.json19
3 files changed, 52 insertions, 1 deletions
diff --git a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/Violation.java b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/Violation.java
index 0d5b816425f..4e170124c6b 100644
--- a/sonar-ws-client/src/main/java/org/sonar/wsclient/services/Violation.java
+++ b/sonar-ws-client/src/main/java/org/sonar/wsclient/services/Violation.java
@@ -74,12 +74,32 @@ public class Violation extends Model {
this.severity = priority;
}
+ /**
+ * @return line number (numeration starts from 1), or <code>null</code> if violation doesn't belong to concrete line
+ * @see #hasLine()
+ */
public Integer getLine() {
return line;
}
public void setLine(Integer line) {
- this.line = line;
+ if (line != null && line < 1) {
+ /*
+ * This shouldn't happen, however line would be normalized to null if web service returns incorrect value (less than 1)
+ * in compliance with a contract for getLine method. Normalization added in 2.8 - see http://jira.codehaus.org/browse/SONAR-2386
+ */
+ this.line = null;
+ } else {
+ this.line = line;
+ }
+ }
+
+ /**
+ * @return <code>true<code> if violation belongs to concrete line
+ * @since 2.8
+ */
+ public boolean hasLine() {
+ return line != null;
}
public String getResourceKey() {
diff --git a/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java b/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java
index dc9a8c4cc2d..4652c2cd9d9 100644
--- a/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java
+++ b/sonar-ws-client/src/test/java/org/sonar/wsclient/unmarshallers/ViolationUnmarshallerTest.java
@@ -42,6 +42,7 @@ public class ViolationUnmarshallerTest extends UnmarshallerTestCase {
violation = violations.get(0);
assertThat(violation.getMessage(), is("throw java.lang.Exception"));
+ assertThat(violation.hasLine(), is(true));
assertThat(violation.getLine(), is(97));
assertThat(violation.getCreatedAt(), notNullValue());
assertThat(violation.getSeverity(), is("MAJOR"));
@@ -60,6 +61,7 @@ public class ViolationUnmarshallerTest extends UnmarshallerTestCase {
public void testViolationWithoutLineNumber() {
Violation violation = new ViolationUnmarshaller().toModel(loadFile("/violations/violation-without-optional-fields.json"));
assertThat(violation.getMessage(), not(nullValue()));
+ assertThat(violation.hasLine(), is(false));
assertThat(violation.getLine(), nullValue());
assertThat(violation.getCreatedAt(), nullValue());
}
@@ -70,4 +72,14 @@ public class ViolationUnmarshallerTest extends UnmarshallerTestCase {
assertThat(violation.isFalsePositive(), is(true));
assertThat(violation.getReviewId(), is(123L));
}
+
+ /**
+ * See http://jira.codehaus.org/browse/SONAR-2386
+ */
+ @Test
+ public void testIncorrectLine() {
+ Violation violation = new ViolationUnmarshaller().toModel(loadFile("/violations/violation-with-incorrect-line.json"));
+ assertThat(violation.hasLine(), is(false));
+ assertThat(violation.getLine(), nullValue());
+ }
}
diff --git a/sonar-ws-client/src/test/resources/violations/violation-with-incorrect-line.json b/sonar-ws-client/src/test/resources/violations/violation-with-incorrect-line.json
new file mode 100644
index 00000000000..ef2ed50b85c
--- /dev/null
+++ b/sonar-ws-client/src/test/resources/violations/violation-with-incorrect-line.json
@@ -0,0 +1,19 @@
+[
+ {
+ "message":"1 branches need to be covered by unit tests to reach the minimum threshold of 65.0% branch coverage.",
+ "line":0,
+ "priority":"MAJOR",
+ "createdAt":"2011-03-07T16:21:39+0000",
+ "rule":{
+ "key":"sqale-java:BranchCoverageCheck",
+ "name":"Insufficient branch coverage by unit tests"
+ },
+ "resource":{
+ "key":"org.codehaus.sonar.plugins:sonar-pmd-plugin:org.sonar.plugins.pmd.PmdRuleRepository",
+ "name":"PmdRuleRepository",
+ "scope":"FIL",
+ "qualifier":"CLA",
+ "language":"java"
+ }
+ }
+]