From a142d21700a51c95656115bb2cdbd242cff62cb7 Mon Sep 17 00:00:00 2001 From: Philippe Marschall Date: Wed, 24 Jun 2020 12:48:32 +0200 Subject: [PATCH] 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 --- .../http/converter/json/Jackson2ObjectMapperBuilder.java | 4 ++-- .../http/converter/json/Jackson2ObjectMapperFactoryBean.java | 4 ++-- .../http/converter/json/Jackson2ObjectMapperBuilderTests.java | 2 -- .../converter/json/Jackson2ObjectMapperFactoryBeanTests.java | 1 - 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java index d2f2dfd9b18..5dbc3e3afbc 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.java @@ -595,8 +595,8 @@ public class Jackson2ObjectMapperBuilder { * @see #modulesToInstall(Module...) * @see com.fasterxml.jackson.databind.Module */ - @SuppressWarnings("unchecked") - public Jackson2ObjectMapperBuilder modulesToInstall(Class... modules) { + @SafeVarargs + public final Jackson2ObjectMapperBuilder modulesToInstall(Class... modules) { this.moduleClasses = modules; this.findWellKnownModules = true; return this; diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java index 6925ddaf1ac..36338243c2b 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java @@ -409,8 +409,8 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean... modules) { + @SafeVarargs + public final void setModulesToInstall(Class... modules) { this.builder.modulesToInstall(modules); } diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java index d52db8bd7e1..81a8fe3fa1a 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperBuilderTests.java @@ -242,7 +242,6 @@ class Jackson2ObjectMapperBuilderTests { } @Test - @SuppressWarnings("unchecked") void modulesToInstallByClass() { ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json() .modulesToInstall(CustomIntegerModule.class) @@ -292,7 +291,6 @@ class Jackson2ObjectMapperBuilderTests { } @Test // SPR-12634 - @SuppressWarnings("unchecked") void customizeWellKnownModulesWithModuleClass() throws JsonProcessingException, UnsupportedEncodingException { diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java index f4d2b7fb629..8968b872344 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBeanTests.java @@ -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();