merged with master
diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index 688daaf..9bc6218 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -20,12 +20,11 @@
import java.nio.charset.CharacterCodingException;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.yaml.snakeyaml.error.Mark;
@@ -392,24 +391,15 @@
*/
private void stalePossibleSimpleKeys() {
// use toRemove to avoid java.util.ConcurrentModificationException
- Set<Integer> toRemove = null;
- for (Integer level : this.possibleSimpleKeys.keySet()) {
- SimpleKey key = this.possibleSimpleKeys.get(level);
+ for (Iterator<Entry<Integer, SimpleKey>> iterator = this.possibleSimpleKeys.entrySet().iterator() ; iterator.hasNext();) {
+ Entry<Integer, SimpleKey> level = iterator.next();
+ SimpleKey key = level.getValue();
if ((key.getLine() != reader.getLine()) || (reader.getIndex() - key.getIndex() > 1024)) {
if (key.isRequired()) {
throw new ScannerException("while scanning a simple key", key.getMark(),
"could not found expected ':'", reader.getMark());
- } else {
- if (toRemove == null) {
- toRemove = new HashSet<Integer>();
- }
- toRemove.add(level);
}
- }
- }
- if (toRemove != null) {
- for (Integer level : toRemove) {
- this.possibleSimpleKeys.remove(level);
+ iterator.remove();
}
}
}
@@ -451,12 +441,11 @@
* Remove the saved possible key position at the current flow level.
*/
private void removePossibleSimpleKey() {
- SimpleKey key = possibleSimpleKeys.get(flowLevel);
+ SimpleKey key = possibleSimpleKeys.remove(flowLevel);
if (key != null && key.isRequired()) {
throw new ScannerException("while scanning a simple key", key.getMark(),
"could not found expected ':'", reader.getMark());
}
- possibleSimpleKeys.remove(flowLevel);
}
// Indentation functions.
@@ -715,10 +704,9 @@
private void fetchValue() {
// Do we determine a simple key?
- if (this.possibleSimpleKeys.keySet().contains(this.flowLevel)) {
+ SimpleKey key = this.possibleSimpleKeys.remove(this.flowLevel);
+ if (key != null) {
// Add KEY.
- SimpleKey key = this.possibleSimpleKeys.get(this.flowLevel);
- this.possibleSimpleKeys.remove(this.flowLevel);
this.tokens.add(key.getTokenNumber() - this.tokensTaken, new KeyToken(key.getMark(),
key.getMark()));