From 7d4eeb464b9166b6b8220f35c96a4effda1da8aa Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 10 Jul 2021 21:49:50 -0300 Subject: [PATCH] short circuit rules condition checking --- src/main/java/carpet/settings/SettingsManager.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/carpet/settings/SettingsManager.java b/src/main/java/carpet/settings/SettingsManager.java index 9332b943..b2fdd9e7 100644 --- a/src/main/java/carpet/settings/SettingsManager.java +++ b/src/main/java/carpet/settings/SettingsManager.java @@ -139,28 +139,25 @@ public class SettingsManager */ public void parseSettingsClass(Class settingsClass) { - for (Field f : settingsClass.getDeclaredFields()) + rule: for (Field f : settingsClass.getDeclaredFields()) { Rule rule = f.getAnnotation(Rule.class); if (rule == null) continue; - ParsedRule parsed = new ParsedRule(f, rule, this); - - List conditions = new ArrayList<>(); + ParsedRule parsed = new ParsedRule<>(f, rule, this); for (Class condition : rule.condition()) { try { Constructor constr = condition.getDeclaredConstructor(); constr.setAccessible(true); - conditions.add(((Condition) constr.newInstance()).isTrue()); + if (!((Condition) constr.newInstance()).isTrue()) + continue rule; } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } } - - if (rule.condition().length == 0 || conditions.stream().allMatch(Boolean::valueOf)) - rules.put(parsed.name, parsed); + rules.put(parsed.name, parsed); } }