Skip to content

Commit 3bcbb0e

Browse files
committed
Merge pull request #21704 from unix1982
* pr/21704: Polish 'Add origin support for empty YAML list and map' Add origin support for empty YAML list and map Closes gh-21704
2 parents c885a15 + bd2a252 commit 3bcbb0e

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedYamlLoader.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.yaml.snakeyaml.constructor.Constructor;
3131
import org.yaml.snakeyaml.constructor.SafeConstructor;
3232
import org.yaml.snakeyaml.error.Mark;
33+
import org.yaml.snakeyaml.nodes.CollectionNode;
3334
import org.yaml.snakeyaml.nodes.MappingNode;
3435
import org.yaml.snakeyaml.nodes.Node;
3536
import org.yaml.snakeyaml.nodes.NodeTuple;
@@ -104,12 +105,15 @@ public Object getData() throws NoSuchElementException {
104105

105106
@Override
106107
protected Object constructObject(Node node) {
108+
if (node instanceof CollectionNode && ((CollectionNode<?>) node).getValue().isEmpty()) {
109+
return constructTrackedObject(node, super.constructObject(node));
110+
}
107111
if (node instanceof ScalarNode) {
108112
if (!(node instanceof KeyScalarNode)) {
109113
return constructTrackedObject(node, super.constructObject(node));
110114
}
111115
}
112-
else if (node instanceof MappingNode) {
116+
if (node instanceof MappingNode) {
113117
replaceMappingNodeKeys((MappingNode) node);
114118
}
115119
return super.constructObject(node);

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/env/OriginTrackedYamlLoaderTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.env;
1818

1919
import java.nio.charset.StandardCharsets;
20+
import java.util.Collections;
2021
import java.util.List;
2122
import java.util.Map;
2223

@@ -120,6 +121,14 @@ void processEmptyAndNullValues() {
120121
assertThat(getLocation(nullValue)).isEqualTo("28:13");
121122
}
122123

124+
@Test
125+
void processEmptyListAndMap() {
126+
OriginTrackedValue emptymap = getValue("emptymap");
127+
OriginTrackedValue emptylist = getValue("emptylist");
128+
assertThat(emptymap.getValue()).isEqualTo(Collections.emptyMap());
129+
assertThat(emptylist.getValue()).isEqualTo(Collections.emptyList());
130+
}
131+
123132
@Test
124133
void unsupportedType() throws Exception {
125134
String yaml = "value: !!java.net.URL [!!java.lang.String [!!java.lang.StringBuilder [\"http://localhost:9000/\"]]]";

spring-boot-project/spring-boot/src/test/resources/org/springframework/boot/env/test-yaml.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ example:
2626
- bar2: bling
2727
empty: ""
2828
null-value: null
29+
emptylist: []
30+
emptymap: {}
2931
---
3032

3133
spring:

0 commit comments

Comments
 (0)