From bfa45985c524ee79cc672531682ebee0664cacea Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Wed, 26 Oct 2011 06:56:36 +0100 Subject: Fixed issues with loading YamlConfigurations with typed keys --- .../configuration/file/YamlConfiguration.java | 30 +++++++++++++--------- .../configuration/ConfigurationSectionTest.java | 6 ++--- .../bukkit/configuration/ConfigurationTest.java | 1 + .../configuration/file/YamlConfigurationTest.java | 3 ++- 4 files changed, 24 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java index f9523b39..aaf8ce7f 100644 --- a/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java +++ b/src/main/java/org/bukkit/configuration/file/YamlConfiguration.java @@ -4,6 +4,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.logging.Level; @@ -55,11 +56,14 @@ public class YamlConfiguration extends FileConfiguration { throw new IllegalArgumentException("Contents cannot be null"); } - Map input; - try { - input = (Map)yaml.load(contents); - } catch (Throwable ex) { - throw new InvalidConfigurationException("Specified contents is not a valid Configuration", ex); + Map input = (Map)yaml.load(contents); + int size = (input == null) ? 0 : input.size(); + Map result = new LinkedHashMap(size); + + if (size > 0) { + for (Map.Entry entry : input.entrySet()) { + result.put(entry.getKey().toString(), entry.getValue()); + } } String header = parseHeader(contents); @@ -68,7 +72,7 @@ public class YamlConfiguration extends FileConfiguration { options().header(header); } - deserializeValues(input, this); + deserializeValues(result, this); } protected void deserializeValues(Map input, ConfigurationSection section) throws InvalidConfigurationException { @@ -80,12 +84,14 @@ public class YamlConfiguration extends FileConfiguration { Object value = entry.getValue(); if (value instanceof Map) { - Map subvalues; - - try { - subvalues = (Map) value; - } catch (ClassCastException ex) { - throw new InvalidConfigurationException("Map found where type is not ", ex); + Map subinput = (Map)value; + int size = (subinput == null) ? 0 : subinput.size(); + Map subvalues = new LinkedHashMap(size); + + if (size > 0) { + for (Map.Entry subentry : subinput.entrySet()) { + subvalues.put(subentry.getKey().toString(), subentry.getValue()); + } } if (subvalues.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) { diff --git a/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java b/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java index 290b7844..fea435a8 100644 --- a/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java +++ b/src/test/java/org/bukkit/configuration/ConfigurationSectionTest.java @@ -1,7 +1,6 @@ package org.bukkit.configuration; import org.bukkit.Material; -import java.io.File; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -22,9 +21,10 @@ public abstract class ConfigurationSectionTest { section.set("subsection.subkey2", true); section.set("subsection.subsubsection.key", true); section.set("key2", true); + section.set("42", true); - assertArrayEquals(new String[] {"key", "subsection", "key2"}, section.getKeys(false).toArray()); - assertArrayEquals(new String[] {"key", "subsection", "subsection.subkey", "subsection.subkey2", "subsection.subsubsection", "subsection.subsubsection.key", "key2"}, section.getKeys(true).toArray()); + assertArrayEquals(new String[] {"key", "subsection", "key2", "42"}, section.getKeys(false).toArray()); + assertArrayEquals(new String[] {"key", "subsection", "subsection.subkey", "subsection.subkey2", "subsection.subsubsection", "subsection.subsubsection.key", "key2", "42"}, section.getKeys(true).toArray()); assertArrayEquals(new String[] {"subkey", "subkey2", "subsubsection", "subsubsection.key"}, section.getConfigurationSection("subsection").getKeys(true).toArray()); } diff --git a/src/test/java/org/bukkit/configuration/ConfigurationTest.java b/src/test/java/org/bukkit/configuration/ConfigurationTest.java index 0f2af733..20e6f21d 100644 --- a/src/test/java/org/bukkit/configuration/ConfigurationTest.java +++ b/src/test/java/org/bukkit/configuration/ConfigurationTest.java @@ -22,6 +22,7 @@ public abstract class ConfigurationTest { result.put("false-boolean", false); result.put("vector", new Vector(12345.67, 64, -12345.6789)); result.put("list", Arrays.asList(1, 2, 3, 4, 5)); + result.put("42", "The Answer"); return result; } diff --git a/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java b/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java index 239b2f83..e6b90756 100644 --- a/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java +++ b/src/test/java/org/bukkit/configuration/file/YamlConfigurationTest.java @@ -36,7 +36,8 @@ public class YamlConfigurationTest extends FileConfigurationTest { "- 2\n" + "- 3\n" + "- 4\n" + - "- 5\n"; + "- 5\n" + + "'42': The Answer\n"; } @Test -- cgit v1.2.3