diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 76e1820038db..ec7ee22c493a 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -23,7 +23,7 @@ dependencies { implementation("org.gradle:test-retry-gradle-plugin:1.1.9") implementation("org.springframework:spring-core:5.2.2.RELEASE") implementation("org.springframework:spring-web:5.2.2.RELEASE") - implementation("com.google.code.gson:gson:2.8.5") + implementation("com.fasterxml.jackson.core:jackson-databind:2.11.4") implementation("io.spring.javaformat:spring-javaformat-gradle-plugin:${javaFormatVersion}") testImplementation("org.assertj:assertj-core:3.11.1") testImplementation("org.apache.logging.log4j:log4j-core:2.12.1") diff --git a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java index 5fa43adee13c..3b9baab566a2 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/context/properties/ConfigurationProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2020 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,17 +20,13 @@ import java.io.FileReader; import java.io.IOException; import java.io.Reader; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import org.gradle.api.file.FileCollection; +import com.fasterxml.jackson.databind.ObjectMapper; /** * Configuration properties read from one or more @@ -40,20 +36,18 @@ */ final class ConfigurationProperties { - private static final Type MAP_TYPE = new MapTypeToken().getType(); - private ConfigurationProperties() { } @SuppressWarnings("unchecked") - static Map fromFiles(FileCollection files) { + static Map fromFiles(Iterable files) { List configurationProperties = new ArrayList<>(); try { - Gson gson = new GsonBuilder().create(); + ObjectMapper objectMapper = new ObjectMapper(); for (File file : files) { try (Reader reader = new FileReader(file)) { - Map json = gson.fromJson(reader, MAP_TYPE); + Map json = objectMapper.readValue(file, Map.class); List> properties = (List>) json.get("properties"); for (Map property : properties) { String name = (String) property.get("name"); @@ -74,8 +68,4 @@ static Map fromFiles(FileCollection files) { } } - private static final class MapTypeToken extends TypeToken> { - - } - } diff --git a/buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesTests.java b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesTests.java new file mode 100644 index 000000000000..0169bce623c4 --- /dev/null +++ b/buildSrc/src/test/java/org/springframework/boot/build/context/properties/ConfigurationPropertiesTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2012-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.build.context.properties; + +import java.io.File; +import java.util.Arrays; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link ConfigurationProperties} + * + * @author Andy Wilkinson + */ +class ConfigurationPropertiesTests { + + @Test + void whenJsonHasAnIntegerDefaultValueThenItRemainsAnIntegerWhenRead() { + Map properties = ConfigurationProperties + .fromFiles(Arrays.asList(new File("src/test/resources/spring-configuration-metadata.json"))); + assertThat(properties.get("example.counter").getDefaultValue()).isEqualTo(0); + } + +} diff --git a/buildSrc/src/test/resources/spring-configuration-metadata.json b/buildSrc/src/test/resources/spring-configuration-metadata.json new file mode 100644 index 000000000000..e975b1e3f4f2 --- /dev/null +++ b/buildSrc/src/test/resources/spring-configuration-metadata.json @@ -0,0 +1,9 @@ +{ + "properties": [ + { + "name": "example.counter", + "type": "java.lang.Integer", + "defaultValue": 0 + } + ] +}