|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2012-2019 the original author or authors. |
|
|
|
|
* Copyright 2012-2020 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. |
|
|
|
|
@ -101,7 +101,7 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
@@ -101,7 +101,7 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
|
|
|
|
|
|
|
|
|
|
private void bindIndexed(ConfigurationPropertySource source, ConfigurationPropertyName root, |
|
|
|
|
AggregateElementBinder elementBinder, IndexedCollectionSupplier collection, ResolvableType elementType) { |
|
|
|
|
MultiValueMap<String, ConfigurationProperty> knownIndexedChildren = getKnownIndexedChildren(source, root); |
|
|
|
|
MultiValueMap<String, ConfigurationPropertyName> knownIndexedChildren = getKnownIndexedChildren(source, root); |
|
|
|
|
for (int i = 0; i < Integer.MAX_VALUE; i++) { |
|
|
|
|
ConfigurationPropertyName name = root.append((i != 0) ? "[" + i + "]" : INDEX_ZERO); |
|
|
|
|
Object value = elementBinder.bind(name, Bindable.of(elementType), source); |
|
|
|
|
@ -111,12 +111,12 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
@@ -111,12 +111,12 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
|
|
|
|
|
knownIndexedChildren.remove(name.getLastElement(Form.UNIFORM)); |
|
|
|
|
collection.get().add(value); |
|
|
|
|
} |
|
|
|
|
assertNoUnboundChildren(knownIndexedChildren); |
|
|
|
|
assertNoUnboundChildren(source, knownIndexedChildren); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private MultiValueMap<String, ConfigurationProperty> getKnownIndexedChildren(ConfigurationPropertySource source, |
|
|
|
|
private MultiValueMap<String, ConfigurationPropertyName> getKnownIndexedChildren(ConfigurationPropertySource source, |
|
|
|
|
ConfigurationPropertyName root) { |
|
|
|
|
MultiValueMap<String, ConfigurationProperty> children = new LinkedMultiValueMap<>(); |
|
|
|
|
MultiValueMap<String, ConfigurationPropertyName> children = new LinkedMultiValueMap<>(); |
|
|
|
|
if (!(source instanceof IterableConfigurationPropertySource)) { |
|
|
|
|
return children; |
|
|
|
|
} |
|
|
|
|
@ -124,17 +124,17 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
@@ -124,17 +124,17 @@ abstract class IndexedElementsBinder<T> extends AggregateBinder<T> {
|
|
|
|
|
ConfigurationPropertyName choppedName = name.chop(root.getNumberOfElements() + 1); |
|
|
|
|
if (choppedName.isLastElementIndexed()) { |
|
|
|
|
String key = choppedName.getLastElement(Form.UNIFORM); |
|
|
|
|
ConfigurationProperty value = source.getConfigurationProperty(name); |
|
|
|
|
children.add(key, value); |
|
|
|
|
children.add(key, name); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return children; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void assertNoUnboundChildren(MultiValueMap<String, ConfigurationProperty> children) { |
|
|
|
|
private void assertNoUnboundChildren(ConfigurationPropertySource source, |
|
|
|
|
MultiValueMap<String, ConfigurationPropertyName> children) { |
|
|
|
|
if (!children.isEmpty()) { |
|
|
|
|
throw new UnboundConfigurationPropertiesException( |
|
|
|
|
children.values().stream().flatMap(List::stream).collect(Collectors.toCollection(TreeSet::new))); |
|
|
|
|
throw new UnboundConfigurationPropertiesException(children.values().stream().flatMap(List::stream) |
|
|
|
|
.map(source::getConfigurationProperty).collect(Collectors.toCollection(TreeSet::new))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|