Skip to content

Commit c41cc91

Browse files
Introduce ObjectMapperValueToTree Refaster rule (#1938)
1 parent d375ed4 commit c41cc91

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

error-prone-contrib/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
<artifactId>jackson-annotations</artifactId>
4848
<scope>provided</scope>
4949
</dependency>
50+
<dependency>
51+
<groupId>com.fasterxml.jackson.core</groupId>
52+
<artifactId>jackson-core</artifactId>
53+
<scope>provided</scope>
54+
</dependency>
5055
<dependency>
5156
<groupId>com.fasterxml.jackson.core</groupId>
5257
<artifactId>jackson-databind</artifactId>

error-prone-contrib/src/main/java/tech/picnic/errorprone/refasterrules/JacksonRules.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tech.picnic.errorprone.refasterrules;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
34
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.google.errorprone.refaster.Refaster;
57
import com.google.errorprone.refaster.annotation.AfterTemplate;
68
import com.google.errorprone.refaster.annotation.BeforeTemplate;
@@ -45,4 +47,20 @@ Optional<JsonNode> after(JsonNode node, String fieldName) {
4547
return node.optional(fieldName);
4648
}
4749
}
50+
51+
/**
52+
* Prefer {@link ObjectMapper#valueToTree(Object)} over more contrived and less efficient
53+
* alternatives.
54+
*/
55+
static final class ObjectMapperValueToTree {
56+
@BeforeTemplate
57+
JsonNode before(ObjectMapper objectMapper, Object object) throws JsonProcessingException {
58+
return objectMapper.readTree(objectMapper.writeValueAsString(object));
59+
}
60+
61+
@AfterTemplate
62+
JsonNode after(ObjectMapper objectMapper, Object object) {
63+
return objectMapper.valueToTree(object);
64+
}
65+
}
4866
}

error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/JacksonRulesTestInput.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tech.picnic.errorprone.refasterrules;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
34
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.fasterxml.jackson.databind.node.NullNode;
57
import com.google.common.collect.ImmutableSet;
68
import java.util.Optional;
@@ -22,4 +24,8 @@ ImmutableSet<Optional<JsonNode>> testJsonNodeOptionalString() {
2224
Optional.of(NullNode.getInstance().get("baz")),
2325
Optional.ofNullable(NullNode.getInstance().get("qux")));
2426
}
27+
28+
JsonNode testObjectMapperValueToTree() throws JsonProcessingException {
29+
return new ObjectMapper().readTree(new ObjectMapper().writeValueAsString("foo"));
30+
}
2531
}

error-prone-contrib/src/test/resources/tech/picnic/errorprone/refasterrules/JacksonRulesTestOutput.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package tech.picnic.errorprone.refasterrules;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
34
import com.fasterxml.jackson.databind.JsonNode;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
46
import com.fasterxml.jackson.databind.node.NullNode;
57
import com.google.common.collect.ImmutableSet;
68
import java.util.Optional;
@@ -22,4 +24,8 @@ ImmutableSet<Optional<JsonNode>> testJsonNodeOptionalString() {
2224
NullNode.getInstance().optional("baz"),
2325
NullNode.getInstance().optional("qux"));
2426
}
27+
28+
JsonNode testObjectMapperValueToTree() throws JsonProcessingException {
29+
return new ObjectMapper().valueToTree("foo");
30+
}
2531
}

0 commit comments

Comments
 (0)