Commit f18d564a authored by heinz's avatar heinz Committed by Phillip Webb

Add origin support for empty YAML list and map

Update `OriginTrackedYamlLoader` to better deal with empty maps
and collections.

See gh-21704
parent c885a15a
...@@ -30,6 +30,7 @@ import org.yaml.snakeyaml.constructor.BaseConstructor; ...@@ -30,6 +30,7 @@ import org.yaml.snakeyaml.constructor.BaseConstructor;
import org.yaml.snakeyaml.constructor.Constructor; import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.constructor.SafeConstructor; import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.error.Mark; import org.yaml.snakeyaml.error.Mark;
import org.yaml.snakeyaml.nodes.CollectionNode;
import org.yaml.snakeyaml.nodes.MappingNode; import org.yaml.snakeyaml.nodes.MappingNode;
import org.yaml.snakeyaml.nodes.Node; import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.NodeTuple; import org.yaml.snakeyaml.nodes.NodeTuple;
...@@ -109,6 +110,9 @@ class OriginTrackedYamlLoader extends YamlProcessor { ...@@ -109,6 +110,9 @@ class OriginTrackedYamlLoader extends YamlProcessor {
return constructTrackedObject(node, super.constructObject(node)); return constructTrackedObject(node, super.constructObject(node));
} }
} }
else if (node instanceof CollectionNode && ((CollectionNode<?>) node).getValue().isEmpty()) {
return constructTrackedObject(node, super.constructObject(node));
}
else if (node instanceof MappingNode) { else if (node instanceof MappingNode) {
replaceMappingNodeKeys((MappingNode) node); replaceMappingNodeKeys((MappingNode) node);
} }
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
package org.springframework.boot.env; package org.springframework.boot.env;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -120,6 +121,14 @@ class OriginTrackedYamlLoaderTests { ...@@ -120,6 +121,14 @@ class OriginTrackedYamlLoaderTests {
assertThat(getLocation(nullValue)).isEqualTo("28:13"); assertThat(getLocation(nullValue)).isEqualTo("28:13");
} }
@Test
void processEmptyListAndMap() {
OriginTrackedValue emptymap = getValue("emptymap");
OriginTrackedValue emptylist = getValue("emptylist");
assertThat(emptymap.getValue()).isEqualTo(Collections.EMPTY_MAP);
assertThat(emptylist.getValue()).isEqualTo(Collections.EMPTY_LIST);
}
@Test @Test
void unsupportedType() throws Exception { void unsupportedType() throws Exception {
String yaml = "value: !!java.net.URL [!!java.lang.String [!!java.lang.StringBuilder [\"http://localhost:9000/\"]]]"; String yaml = "value: !!java.net.URL [!!java.lang.String [!!java.lang.StringBuilder [\"http://localhost:9000/\"]]]";
......
...@@ -26,6 +26,8 @@ example: ...@@ -26,6 +26,8 @@ example:
- bar2: bling - bar2: bling
empty: "" empty: ""
null-value: null null-value: null
emptylist: []
emptymap: {}
--- ---
spring: spring:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment