Browse Source

Use @SafeVarargs in Jackson builder and factory

Using @SafeVarargs in Jackson mapper builder and factory bean classes
allows the varargs methods to be used without a compiler warning. The
implementations of these methods do not perform unsafe operations on
their varargs parameter. It is therefore safe to add this annotation.

The following two methods are changed:

- add @SafeVarargs to Jackson2ObjectMapperBuilder#modulesToInstall
  and make it final
- add @SafeVarargs to
  Jackson2ObjectMapperFactoryBean#setModulesToInstall and make it final

This is a backwards incompatible change as these methods now have to be
declared final. Existing subclasses that override one of these methods
will break.

Closes gh-25311
pull/25316/head
Philippe Marschall 6 years ago committed by Sam Brannen
parent
commit
a142d21700
  1. 4
      spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java
  2. 4
      spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java
  3. 2
      spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java
  4. 1
      spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java

4
spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java

@ -595,8 +595,8 @@ public class Jackson2ObjectMapperBuilder { @@ -595,8 +595,8 @@ public class Jackson2ObjectMapperBuilder {
* @see #modulesToInstall(Module...)
* @see com.fasterxml.jackson.databind.Module
*/
@SuppressWarnings("unchecked")
public Jackson2ObjectMapperBuilder modulesToInstall(Class<? extends Module>... modules) {
@SafeVarargs
public final Jackson2ObjectMapperBuilder modulesToInstall(Class<? extends Module>... modules) {
this.moduleClasses = modules;
this.findWellKnownModules = true;
return this;

4
spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java

@ -409,8 +409,8 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean<ObjectMapper @@ -409,8 +409,8 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean<ObjectMapper
* @since 4.0.1
* @see com.fasterxml.jackson.databind.Module
*/
@SuppressWarnings("unchecked")
public void setModulesToInstall(Class<? extends Module>... modules) {
@SafeVarargs
public final void setModulesToInstall(Class<? extends Module>... modules) {
this.builder.modulesToInstall(modules);
}

2
spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java

@ -242,7 +242,6 @@ class Jackson2ObjectMapperBuilderTests { @@ -242,7 +242,6 @@ class Jackson2ObjectMapperBuilderTests {
}
@Test
@SuppressWarnings("unchecked")
void modulesToInstallByClass() {
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
.modulesToInstall(CustomIntegerModule.class)
@ -292,7 +291,6 @@ class Jackson2ObjectMapperBuilderTests { @@ -292,7 +291,6 @@ class Jackson2ObjectMapperBuilderTests {
}
@Test // SPR-12634
@SuppressWarnings("unchecked")
void customizeWellKnownModulesWithModuleClass()
throws JsonProcessingException, UnsupportedEncodingException {

1
spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java

@ -213,7 +213,6 @@ public class Jackson2ObjectMapperFactoryBeanTests { @@ -213,7 +213,6 @@ public class Jackson2ObjectMapperFactoryBeanTests {
}
@Test // SPR-12634
@SuppressWarnings("unchecked")
public void customizeDefaultModulesWithModuleClass() throws JsonProcessingException, UnsupportedEncodingException {
this.factory.setModulesToInstall(CustomIntegerModule.class);
this.factory.afterPropertiesSet();

Loading…
Cancel
Save