Allow ThingParsers to throw exceptions on invalid input instead of expecting them to return null.

This allows for a much more well-defined, fail-fast process, where a parser can abort on valid prefix but invalid input.
This commit is contained in:
Andreas Troelsen
2017-11-19 20:19:35 +01:00
parent ea73256749
commit 2c96122e7d
3 changed files with 19 additions and 26 deletions
@@ -74,11 +74,15 @@ public class MAUtils
List<Thing> things = new ArrayList<>(); List<Thing> things = new ArrayList<>();
for (String reward : rewards.split(",")) { for (String reward : rewards.split(",")) {
Thing thing = plugin.getThingManager().parse(reward.trim()); try {
if (thing == null) { Thing thing = plugin.getThingManager().parse(reward.trim());
plugin.getLogger().warning("Failed to parse reward: " + reward.trim()); if (thing == null) {
} else { plugin.getLogger().warning("Failed to parse reward: " + reward.trim());
things.add(thing); } else {
things.add(thing);
}
} catch (Exception e) {
plugin.getLogger().severe("Exception parsing reward '" + reward.trim() + "': " + e.getLocalizedMessage());
} }
} }
result.put(wave, things); result.put(wave, things);
@@ -18,13 +18,7 @@ class MoneyThingParser implements ThingParser {
if (money == null) { if (money == null) {
return null; return null;
} }
return new MoneyThing(plugin, Double.parseDouble(money));
Double value = valueOf(money);
if (value == null) {
return null;
}
return new MoneyThing(plugin, value);
} }
private String trimPrefix(String s) { private String trimPrefix(String s) {
@@ -36,13 +30,4 @@ class MoneyThingParser implements ThingParser {
} }
return null; return null;
} }
private Double valueOf(String money) {
try {
return Double.parseDouble(money);
} catch (NumberFormatException e) {
plugin.getLogger().warning("Invalid economy value: " + money);
return null;
}
}
} }
@@ -307,11 +307,15 @@ public class WaveParser
// Rewards! // Rewards!
String rew = config.getString("reward"); String rew = config.getString("reward");
if (rew != null) { if (rew != null) {
Thing reward = arena.getPlugin().getThingManager().parse(rew); try {
if (reward == null) { Thing thing = arena.getPlugin().getThingManager().parse(rew.trim());
Bukkit.getLogger().warning("[MobArena] Failed to parse boss reward: " + rew); if (thing == null) {
} else { arena.getPlugin().getLogger().warning("Failed to parse boss reward: " + rew.trim());
result.setReward(reward); } else {
result.setReward(thing);
}
} catch (Exception e) {
arena.getPlugin().getLogger().severe("Exception parsing boss reward '" + rew.trim() + "': " + e.getLocalizedMessage());
} }
} }