Skip to content

Commit

Permalink
Support SnakeYaml 1.31
Browse files Browse the repository at this point in the history
This commit keeps the managed dependency for SnakeYaml at 1.29 but
enables forward compatibility for SnakeYaml 1.31.

Closes gh-32228
  • Loading branch information
bclozel committed Sep 5, 2022
1 parent d9265f0 commit 724f9eb
Showing 1 changed file with 21 additions and 2 deletions.
Expand Up @@ -45,6 +45,7 @@
import org.springframework.boot.origin.TextResourceOrigin;
import org.springframework.boot.origin.TextResourceOrigin.Location;
import org.springframework.core.io.Resource;
import org.springframework.util.ReflectionUtils;

/**
* Class to load {@code .yml} files into a map of {@code String} to
Expand All @@ -55,6 +56,9 @@
*/
class OriginTrackedYamlLoader extends YamlProcessor {

private static final boolean HAS_RESOLVER_LIMIT = ReflectionUtils.findMethod(Resolver.class, "addImplicitResolver",
Tag.class, Pattern.class, String.class, int.class) != null;

private final Resource resource;

OriginTrackedYamlLoader(Resource resource) {
Expand All @@ -75,7 +79,7 @@ private Yaml createYaml(LoaderOptions loaderOptions) {
BaseConstructor constructor = new OriginTrackingConstructor(loaderOptions);
Representer representer = new Representer();
DumperOptions dumperOptions = new DumperOptions();
LimitedResolver resolver = new LimitedResolver();
Resolver resolver = HAS_RESOLVER_LIMIT ? new NoTimestampResolverWithLimit() : new NoTimestampResolver();
return new Yaml(constructor, representer, dumperOptions, loaderOptions, resolver);
}

Expand Down Expand Up @@ -167,7 +171,7 @@ private static Node get(Node node) {
/**
* {@link Resolver} that limits {@link Tag#TIMESTAMP} tags.
*/
private static class LimitedResolver extends Resolver {
private static class NoTimestampResolver extends Resolver {

@Override
public void addImplicitResolver(Tag tag, Pattern regexp, String first) {
Expand All @@ -179,4 +183,19 @@ public void addImplicitResolver(Tag tag, Pattern regexp, String first) {

}

/**
* {@link Resolver} that limits {@link Tag#TIMESTAMP} tags.
*/
private static class NoTimestampResolverWithLimit extends Resolver {

@Override
public void addImplicitResolver(Tag tag, Pattern regexp, String first, int limit) {
if (tag == Tag.TIMESTAMP) {
return;
}
super.addImplicitResolver(tag, regexp, first, limit);
}

}

}

0 comments on commit 724f9eb

Please sign in to comment.