Skip to content

Commit 30dd844

Browse files
Merge pull request #49 from gravity9-tech/feature/48_sonar_issues
#48 Fixed issues reported by Sonar
2 parents 7acf941 + e36d740 commit 30dd844

13 files changed

+72
-276
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ buildscript {
2929

3030
plugins {
3131
id("net.ltgt.errorprone") version "3.0.1" apply false
32+
id "org.sonarqube" version "4.2.1.3168"
3233
}
3334

3435
apply(plugin: "java");

src/main/java/com/gravity9/jsonpatch/DualPathOperation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
package com.gravity9.jsonpatch;
2121

2222
import com.fasterxml.jackson.core.JsonGenerator;
23-
import com.fasterxml.jackson.core.JsonProcessingException;
2423
import com.fasterxml.jackson.databind.SerializerProvider;
2524
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
2625
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
2726
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
27+
2828
import java.io.IOException;
2929

3030
/**
@@ -48,7 +48,7 @@ protected DualPathOperation(final String op, final String from, final String pat
4848
}
4949

5050
@Override
51-
public final void serialize(final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
51+
public final void serialize(final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
5252
jgen.writeStartObject();
5353
jgen.writeStringField("op", op);
5454
jgen.writeStringField("path", path);
@@ -58,7 +58,7 @@ public final void serialize(final JsonGenerator jgen, final SerializerProvider p
5858

5959
@Override
6060
public final void serializeWithType(final JsonGenerator jgen, final SerializerProvider provider,
61-
final TypeSerializer typeSer) throws IOException, JsonProcessingException {
61+
final TypeSerializer typeSer) throws IOException {
6262
serialize(jgen, provider);
6363
}
6464

src/main/java/com/gravity9/jsonpatch/JsonPathParser.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
class JsonPathParser {
44

5+
private JsonPathParser() {}
6+
57
private static final String ARRAY_ELEMENT_REGEX = "(?<=\\.)(\\d+)";
68

79
/**

src/main/java/com/gravity9/jsonpatch/PathParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
public class PathParser {
99

10+
private PathParser() {}
11+
1012
private static final String FILTER_PLACEHOLDER = "[?]";
1113

1214
/**
@@ -55,7 +57,7 @@ private static boolean isMultiIndexNotation(String path) {
5557
String pathWithoutBracket = path
5658
.replace("[", "")
5759
.replace("]", "");
58-
return !pathWithoutBracket.startsWith("'") && !pathWithoutBracket.matches("[0-9]+");
60+
return !pathWithoutBracket.startsWith("'") && !pathWithoutBracket.matches("\\d+");
5961
}
6062

6163
private static String getNewNodeName(String[] splitJsonPath) {

src/main/java/com/gravity9/jsonpatch/PathValueOperation.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@
2020
package com.gravity9.jsonpatch;
2121

2222
import com.fasterxml.jackson.core.JsonGenerator;
23-
import com.fasterxml.jackson.core.JsonProcessingException;
2423
import com.fasterxml.jackson.databind.JsonNode;
2524
import com.fasterxml.jackson.databind.SerializerProvider;
2625
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
2726
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
27+
2828
import java.io.IOException;
2929

3030
/**
@@ -48,17 +48,17 @@ protected PathValueOperation(final String op, final String path, final JsonNode
4848
}
4949

5050
@Override
51-
public final void serialize(final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonProcessingException {
51+
public final void serialize(final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
5252
jgen.writeStartObject();
5353
jgen.writeStringField("op", op);
54-
jgen.writeStringField("path", path.toString());
54+
jgen.writeStringField("path", path);
5555
jgen.writeFieldName("value");
5656
jgen.writeTree(value);
5757
jgen.writeEndObject();
5858
}
5959

6060
@Override
61-
public final void serializeWithType(final JsonGenerator jgen, final SerializerProvider provider, final TypeSerializer typeSer) throws IOException, JsonProcessingException {
61+
public final void serializeWithType(final JsonGenerator jgen, final SerializerProvider provider, final TypeSerializer typeSer) throws IOException {
6262
serialize(jgen, provider);
6363
}
6464

src/main/java/com/gravity9/jsonpatch/diff/DiffProcessor.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,25 @@
2525
import com.gravity9.jsonpatch.JsonPatchOperation;
2626
import com.gravity9.jsonpatch.jackson.JsonNumEquals;
2727

28+
29+
import javax.annotation.Nullable;
2830
import java.util.ArrayList;
2931
import java.util.Collections;
3032
import java.util.HashMap;
3133
import java.util.List;
3234
import java.util.Map;
33-
import javax.annotation.Nullable;
3435

35-
// TODO: cleanup
3636
final class DiffProcessor {
3737

3838
private static final JsonNumEquals EQUIVALENCE
3939
= JsonNumEquals.getInstance();
4040

4141
private final Map<JsonPointer, JsonNode> unchanged;
4242

43-
private final List<DiffOperation> diffs = new ArrayList<DiffOperation>();
43+
private final List<DiffOperation> diffs = new ArrayList<>();
4444

4545
DiffProcessor(final Map<JsonPointer, JsonNode> unchanged) {
46-
this.unchanged = Collections.unmodifiableMap(new HashMap<JsonPointer, JsonNode>(unchanged));
46+
this.unchanged = Collections.unmodifiableMap(new HashMap<>(unchanged));
4747
}
4848

4949
void valueReplaced(final JsonPointer pointer, final JsonNode oldValue,
@@ -73,7 +73,7 @@ void valueAdded(final JsonPointer pointer, final JsonNode value) {
7373
}
7474

7575
JsonPatch getPatch() {
76-
final List<JsonPatchOperation> list = new ArrayList<JsonPatchOperation>();
76+
final List<JsonPatchOperation> list = new ArrayList<>();
7777

7878
for (final DiffOperation op : diffs)
7979
list.add(op.asJsonPatchOperation());

src/main/java/com/gravity9/jsonpatch/diff/JsonDiff.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ public final class JsonDiff {
7979
private static final JsonNumEquals EQUIVALENCE
8080
= JsonNumEquals.getInstance();
8181

82+
private static final String NULL_ARGUMENT_KEY = "common.nullArgument";
83+
8284
private JsonDiff() {
8385
}
8486

@@ -93,8 +95,8 @@ private JsonDiff() {
9395
*/
9496
public static JsonPatch asJsonPatch(final JsonNode source,
9597
final JsonNode target) {
96-
BUNDLE.checkNotNull(source, "common.nullArgument");
97-
BUNDLE.checkNotNull(target, "common.nullArgument");
98+
BUNDLE.checkNotNull(source, NULL_ARGUMENT_KEY);
99+
BUNDLE.checkNotNull(target, NULL_ARGUMENT_KEY);
98100
final Map<JsonPointer, JsonNode> unchanged
99101
= getUnchangedValues(source, target);
100102
final DiffProcessor processor = new DiffProcessor(unchanged);
@@ -116,8 +118,8 @@ public static JsonPatch asJsonPatch(final JsonNode source,
116118
*/
117119
public static JsonPatch asJsonPatchIgnoringFields(final JsonNode source,
118120
final JsonNode target, final List<String> fieldsToIgnore) throws JsonPatchException {
119-
BUNDLE.checkNotNull(source, "common.nullArgument");
120-
BUNDLE.checkNotNull(target, "common.nullArgument");
121+
BUNDLE.checkNotNull(source, NULL_ARGUMENT_KEY);
122+
BUNDLE.checkNotNull(target, NULL_ARGUMENT_KEY);
121123
final List<JsonPatchOperation> ignoredFieldsRemoveOperations = getJsonPatchRemoveOperationsForIgnoredFields(fieldsToIgnore);
122124

123125
JsonNode sourceWithoutIgnoredFields = removeIgnoredFields(source, ignoredFieldsRemoveOperations);
@@ -161,14 +163,15 @@ private static JsonNode removeIgnoredFieldOrIgnore(JsonNode nodeWithoutIgnoredFi
161163
* @param source the node to be patched
162164
* @param target the expected result after applying the patch
163165
* @return the patch as a {@link JsonNode}
166+
* @throws JsonPatchException when cannot generate JSON diff
164167
*/
165-
public static JsonNode asJson(final JsonNode source, final JsonNode target) {
168+
public static JsonNode asJson(final JsonNode source, final JsonNode target) throws JsonPatchException {
166169
final String s;
167170
try {
168171
s = MAPPER.writeValueAsString(asJsonPatch(source, target));
169172
return MAPPER.readTree(s);
170173
} catch (IOException e) {
171-
throw new RuntimeException("cannot generate JSON diff", e);
174+
throw new JsonPatchException("cannot generate JSON diff", e);
172175
}
173176
}
174177

@@ -189,7 +192,7 @@ public static JsonNode asJsonIgnoringFields(final JsonNode source, final JsonNod
189192
s = MAPPER.writeValueAsString(asJsonPatchIgnoringFields(source, target, fieldsToIgnore));
190193
return MAPPER.readTree(s);
191194
} catch (IOException e) {
192-
throw new RuntimeException("cannot generate JSON diff", e);
195+
throw new JsonPatchException("cannot generate JSON diff", e);
193196
}
194197
}
195198

@@ -221,7 +224,7 @@ private static void generateDiffs(final DiffProcessor processor,
221224
}
222225

223226
/*
224-
* If we reach this point, both nodes are either objects or arrays;
227+
* If we reach this point, both nodes are either objects or arrays
225228
* delegate.
226229
*/
227230
if (firstType == NodeType.OBJECT)
@@ -262,12 +265,6 @@ private static void generateObjectDiffs(final DiffProcessor processor,
262265
}
263266

264267
private static <T> Set<T> collect(Iterator<T> from, Set<T> to) {
265-
if (from == null) {
266-
throw new NullPointerException();
267-
}
268-
if (to == null) {
269-
throw new NullPointerException();
270-
}
271268
while (from.hasNext()) {
272269
to.add(from.next());
273270
}

src/main/java/com/gravity9/jsonpatch/mergepatch/NonObjectMergePatch.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ final class NonObjectMergePatch extends JsonMergePatch {
3232
private final JsonNode node;
3333

3434
NonObjectMergePatch(final JsonNode node) {
35-
if (node == null) {
36-
throw new NullPointerException();
37-
}
3835
this.node = node;
3936
}
4037

src/main/java/com/gravity9/jsonpatch/mergepatch/ObjectMergePatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public JsonNode apply(final JsonNode input) throws JsonPatchException {
7272
* the modifiedMembers map, values are JsonMergePatch instances:
7373
*
7474
* * if it is a NonObjectMergePatch, the value is replaced
75-
* unconditionally;
75+
* unconditionally
7676
* * if it is an ObjectMergePatch, we get back here; the value will
7777
* be replaced with a JSON Object anyway before being processed.
7878
*/

src/test/java/com/gravity9/jsonpatch/JsonPatchTestSuite.java renamed to src/test/java/com/gravity9/jsonpatch/JsonPatchTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@
3131
import static org.testng.Assert.assertTrue;
3232
import static org.testng.Assert.fail;
3333

34-
public final class JsonPatchTestSuite {
34+
public final class JsonPatchTests {
3535

3636
private final JsonNode testNode;
3737

38-
public JsonPatchTestSuite()
38+
public JsonPatchTests()
3939
throws IOException {
4040
testNode = JsonLoader.fromResource("/jsonpatch/testsuite.json");
4141
}

src/test/java/com/gravity9/jsonpatch/JsonPathParserTest.java

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,26 @@
11
package com.gravity9.jsonpatch;
22

3+
import org.testng.annotations.DataProvider;
34
import org.testng.annotations.Test;
45

56
import static org.testng.Assert.assertEquals;
67

78
public class JsonPathParserTest {
89

9-
@Test
10-
public void shouldConvertPointerToJsonPath() throws JsonPatchException {
11-
String jsonPointerWithQuery = "/productPrice/prodPriceAlteration";
12-
String expected = "$.productPrice.prodPriceAlteration";
13-
String result = JsonPathParser.parsePathToJsonPath(jsonPointerWithQuery);
14-
assertEquals(result, expected);
15-
}
16-
17-
@Test
18-
public void shouldConvertPointerWithArrayToJsonPath() throws JsonPatchException {
19-
String jsonPointerWithQuery = "/productPrice/1/prodPriceAlteration";
20-
String expected = "$.productPrice.[1].prodPriceAlteration";
21-
String result = JsonPathParser.parsePathToJsonPath(jsonPointerWithQuery);
22-
assertEquals(result, expected);
10+
@DataProvider
11+
public static Object[][] jsonPointerToJsonPathTestCases() {
12+
return new Object[][] {
13+
{"/productPrice/prodPriceAlteration", "$.productPrice.prodPriceAlteration"},
14+
{"/productPrice/1/prodPriceAlteration", "$.productPrice.[1].prodPriceAlteration"},
15+
{"/productPrice/prodPriceAlteration/1", "$.productPrice.prodPriceAlteration.[1]"},
16+
{"/2/1/-", "$.[2].[1].-"}
17+
};
2318
}
2419

25-
@Test
26-
public void shouldConvertPointerWithArrayAtTheEndToJsonPath() throws JsonPatchException {
27-
String jsonPointerWithQuery = "/productPrice/prodPriceAlteration/1";
28-
String expected = "$.productPrice.prodPriceAlteration.[1]";
29-
String result = JsonPathParser.parsePathToJsonPath(jsonPointerWithQuery);
30-
assertEquals(result, expected);
31-
}
32-
33-
@Test
34-
public void shouldConvertArrayPathToJsonPath() throws JsonPatchException {
35-
String jsonPointer = "/2/1/-";
36-
String expected = "$.[2].[1].-";
37-
String result = JsonPathParser.parsePathToJsonPath(jsonPointer);
38-
assertEquals(result, expected);
20+
@Test(dataProvider = "jsonPointerToJsonPathTestCases")
21+
public void shouldConvertPointerToJsonPath(String jsonPointerExpression, String expectedJsonPath) throws JsonPatchException {
22+
String result = JsonPathParser.parsePathToJsonPath(jsonPointerExpression);
23+
assertEquals(result, expectedJsonPath);
3924
}
4025

4126
@Test

0 commit comments

Comments
 (0)