Clarify when a property was not renamed due to an incompatible type
Closes gh-11794
This commit is contained in:
parent
43e5e83d9c
commit
bdd532cc20
|
@ -25,6 +25,7 @@ import java.util.function.Function;
|
|||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.boot.configurationmetadata.ConfigurationMetadataProperty;
|
||||
import org.springframework.boot.configurationmetadata.Deprecation;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
|
@ -74,10 +75,7 @@ class PropertiesMigrationReport {
|
|||
StringBuilder report = new StringBuilder();
|
||||
report.append(String.format("%nThe use of configuration keys that are no longer "
|
||||
+ "supported was found in the environment:%n%n"));
|
||||
append(report, content,
|
||||
(metadata) -> "Reason: "
|
||||
+ (StringUtils.hasText(metadata.getDeprecation().getShortReason())
|
||||
? metadata.getDeprecation().getShortReason() : "none"));
|
||||
append(report, content, this::determineReason);
|
||||
report.append(String.format("%n"));
|
||||
report.append("Please refer to the migration guide or reference guide for "
|
||||
+ "potential alternatives.");
|
||||
|
@ -85,6 +83,18 @@ class PropertiesMigrationReport {
|
|||
return report.toString();
|
||||
}
|
||||
|
||||
private String determineReason(ConfigurationMetadataProperty metadata) {
|
||||
Deprecation deprecation = metadata.getDeprecation();
|
||||
if (StringUtils.hasText(deprecation.getShortReason())) {
|
||||
return deprecation.getShortReason();
|
||||
}
|
||||
if (StringUtils.hasText(deprecation.getReplacement())) {
|
||||
return String.format("Reason: Replacement key '%s' uses an incompatible "
|
||||
+ "target type", deprecation.getReplacement());
|
||||
}
|
||||
return "none";
|
||||
}
|
||||
|
||||
private Map<String, List<PropertyMigration>> getContent(
|
||||
Function<LegacyProperties, List<PropertyMigration>> extractor) {
|
||||
return this.content.entrySet().stream()
|
||||
|
|
|
@ -141,6 +141,18 @@ public class PropertiesMigrationReporterTests {
|
|||
assertMappedProperty(propertySource, "test.mapped.ttl", 5678L, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void reasonIsProvidedIfPropertyCouldNotBeRenamed() throws IOException {
|
||||
this.environment.getPropertySources().addFirst(loadPropertySource("test",
|
||||
"config/config-error-no-compatible-type.properties"));
|
||||
String report = createErrorReport(
|
||||
loadRepository("metadata/type-conversion-metadata.json"));
|
||||
assertThat(report).isNotNull();
|
||||
assertThat(report).containsSubsequence("Property source 'test'",
|
||||
"wrong.inconvertible", "Line: 1", "Reason: Replacement key "
|
||||
+ "'test.inconvertible' uses an incompatible target type");
|
||||
}
|
||||
|
||||
private List<String> mapToNames(PropertySources sources) {
|
||||
List<String> names = new ArrayList<>();
|
||||
for (PropertySource<?> source : sources) {
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
wrong.inconvertible=abc
|
|
@ -12,6 +12,10 @@
|
|||
"name": "test.mapped",
|
||||
"type": "java.util.Map<java.lang.String, java.time.Duration>"
|
||||
},
|
||||
{
|
||||
"name": "test.inconvertible",
|
||||
"type": "com.example.One"
|
||||
},
|
||||
{
|
||||
"name": "test.cache-seconds",
|
||||
"type": "java.lang.Integer",
|
||||
|
@ -35,6 +39,14 @@
|
|||
"replacement": "test.mapped.ttl",
|
||||
"level": "error"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "wrong.inconvertible",
|
||||
"type": "com.example.Two",
|
||||
"deprecation": {
|
||||
"replacement": "test.inconvertible",
|
||||
"level": "error"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue