commit
226221073c
|
|
@ -40,12 +40,11 @@ class CollectionBinder extends IndexedElementsBinder<Collection<Object>> {
|
|||
@Override
|
||||
protected Object bindAggregate(ConfigurationPropertyName name, Bindable<?> target,
|
||||
AggregateElementBinder elementBinder) {
|
||||
Class<?> collectionType = (target.getValue() != null) ? List.class : target.getType().resolve(Object.class);
|
||||
ResolvableType aggregateType = ResolvableType.forClassWithGenerics(List.class,
|
||||
target.getType().asCollection().getGenerics());
|
||||
ResolvableType elementType = target.getType().asCollection().getGeneric();
|
||||
IndexedCollectionSupplier result = new IndexedCollectionSupplier(
|
||||
() -> CollectionFactory.createCollection(collectionType, elementType.resolve(), 0));
|
||||
() -> CollectionFactory.createCollection(List.class, elementType.resolve(), 0));
|
||||
bindIndexed(name, target, elementBinder, aggregateType, elementType, result);
|
||||
if (result.wasSupplied()) {
|
||||
return result.get();
|
||||
|
|
|
|||
|
|
@ -1161,6 +1161,19 @@ class ConfigurationPropertiesTests {
|
|||
assertThat(properties.getProp()).isEqualTo("alpha");
|
||||
}
|
||||
|
||||
@Test
|
||||
void loadWhenBindingToConstructorParametersWithConversionToCustomListImplementation() {
|
||||
load(ConstructorBoundCustomListPropertiesConfiguration.class, "test.values=a,b");
|
||||
assertThat(this.context.getBean(ConstructorBoundCustomListProperties.class).getValues()).containsExactly("a",
|
||||
"b");
|
||||
}
|
||||
|
||||
@Test
|
||||
void loadWhenBindingToJavaBeanWithConversionToCustomListImplementation() {
|
||||
load(SetterBoundCustomListPropertiesConfiguration.class, "test.values=a,b");
|
||||
assertThat(this.context.getBean(SetterBoundCustomListProperties.class).getValues()).containsExactly("a", "b");
|
||||
}
|
||||
|
||||
private AnnotationConfigApplicationContext load(Class<?> configuration, String... inlinedProperties) {
|
||||
return load(new Class<?>[] { configuration }, inlinedProperties);
|
||||
}
|
||||
|
|
@ -3043,4 +3056,80 @@ class ConfigurationPropertiesTests {
|
|||
|
||||
}
|
||||
|
||||
@EnableConfigurationProperties(ConstructorBoundCustomListProperties.class)
|
||||
static class ConstructorBoundCustomListPropertiesConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConfigurationPropertiesBinding
|
||||
static Converter<ArrayList<?>, CustomList<?>> arrayListToCustomList() {
|
||||
return new Converter<ArrayList<?>, CustomList<?>>() {
|
||||
|
||||
@Override
|
||||
public CustomList<?> convert(ArrayList<?> source) {
|
||||
return new CustomList<>(source);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties("test")
|
||||
static class ConstructorBoundCustomListProperties {
|
||||
|
||||
private final CustomList<String> values;
|
||||
|
||||
ConstructorBoundCustomListProperties(CustomList<String> values) {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
CustomList<String> getValues() {
|
||||
return this.values;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EnableConfigurationProperties(SetterBoundCustomListProperties.class)
|
||||
static class SetterBoundCustomListPropertiesConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConfigurationPropertiesBinding
|
||||
static Converter<ArrayList<?>, CustomList<?>> arrayListToCustomList() {
|
||||
return new Converter<ArrayList<?>, CustomList<?>>() {
|
||||
|
||||
@Override
|
||||
public CustomList<?> convert(ArrayList<?> source) {
|
||||
return new CustomList<>(source);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties("test")
|
||||
static class SetterBoundCustomListProperties {
|
||||
|
||||
private CustomList<String> values;
|
||||
|
||||
CustomList<String> getValues() {
|
||||
return this.values;
|
||||
}
|
||||
|
||||
void setValues(CustomList<String> values) {
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static final class CustomList<E> extends ArrayList<E> {
|
||||
|
||||
CustomList(List<E> delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue