aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorAndrey Somov <public.somov@gmail.com>2022-01-09 18:10:41 +0400
committerAndrey Somov <public.somov@gmail.com>2022-01-09 18:10:41 +0400
commita9fc3f0b93b2d7f481607bc01e97b3765b7bca4d (patch)
treed4a360754eebe64a9d6b4d5fa2bf66611fb246d5 /src/main
parent724b1193b88d67b2bea2b6061df1c69302f55dfc (diff)
downloadsnakeyaml-a9fc3f0b93b2d7f481607bc01e97b3765b7bca4d.tar.gz
Fix directives to keep tag handlers
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
index a91146b9..bebbb44c 100644
--- a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
@@ -143,7 +143,7 @@ public class ParserImpl implements Parser {
public ParserImpl(Scanner scanner) {
this.scanner = scanner;
currentEvent = null;
- directives = new VersionTagsTuple(null, new HashMap<String, String>());
+ directives = new VersionTagsTuple(null, new HashMap<String, String>(DEFAULT_TAGS));
states = new ArrayStack<Production>(100);
marks = new ArrayStack<Mark>(10);
state = new ParseStreamStart();
@@ -216,7 +216,6 @@ public class ParserImpl implements Parser {
return produceCommentEvent((CommentToken) scanner.getToken());
}
if (!scanner.checkToken(Token.ID.Directive, Token.ID.DocumentStart, Token.ID.StreamEnd)) {
- directives = new VersionTagsTuple(null, DEFAULT_TAGS);
Token token = scanner.peekToken();
Mark startMark = token.getStartMark();
Mark endMark = startMark;
@@ -327,7 +326,11 @@ public class ParserImpl implements Parser {
*/
@SuppressWarnings("unchecked")
private VersionTagsTuple processDirectives() {
- HashMap<String, String> tagHandles = new HashMap<String, String>();
+ HashMap<String, String> tagHandles = new HashMap<String, String>(directives.getTags());
+ for (String key : DEFAULT_TAGS.keySet()) {
+ tagHandles.remove(key);
+ }
+ // keep only added tag handlers
directives = new VersionTagsTuple(null, tagHandles);
while (scanner.checkToken(Token.ID.Directive)) {
@SuppressWarnings("rawtypes")
@@ -370,12 +373,14 @@ public class ParserImpl implements Parser {
// copy from tagHandles
detectedTagHandles = new HashMap<String, String>(tagHandles);
}
+ // add default tag handlers to resolve tags
for (String key : DEFAULT_TAGS.keySet()) {
// do not overwrite re-defined tags
if (!tagHandles.containsKey(key)) {
tagHandles.put(key, DEFAULT_TAGS.get(key));
}
}
+ // data for the events (no default tags added)
return new VersionTagsTuple(directives.getVersion(), detectedTagHandles);
}