From 51574b0b7accdd2aa832ba22e53a8b0b77e4fc26 Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Thu, 24 Dec 2020 14:57:14 +0100 Subject: [PATCH] Fix NPE in CtbrecPreferencesStorage --- .../ui/settings/CtbrecPreferencesStorage.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/client/src/main/java/ctbrec/ui/settings/CtbrecPreferencesStorage.java b/client/src/main/java/ctbrec/ui/settings/CtbrecPreferencesStorage.java index 3c84aa54..e330b56b 100644 --- a/client/src/main/java/ctbrec/ui/settings/CtbrecPreferencesStorage.java +++ b/client/src/main/java/ctbrec/ui/settings/CtbrecPreferencesStorage.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.util.List; import java.util.Objects; +import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +110,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { Field field = Settings.class.getField(setting.getKey()); field.set(settings, newV); if (setting.doesNeedRestart() && !Objects.equals(oldV, newV)) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); })); @@ -120,6 +121,16 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { return row; } + private void runRestartRequiredCallback() { + Optional.ofNullable(prefs).map(Preferences::getRestartRequiredCallback).ifPresent(r -> { + try { + r.run(); + } catch (RuntimeException e) { + LOG.warn("Error while calling \"restart required\" callback", e); + } + }); + } + @SuppressWarnings("unchecked") private Node createRangeSlider(Setting setting) { SimpleRangeProperty rangeProperty = (SimpleRangeProperty) setting.getProperty(); @@ -167,7 +178,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { if (!Objects.equals(path, oldValue)) { field.set(settings, path); if (setting.doesNeedRestart()) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); } @@ -187,7 +198,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { if (!Objects.equals(path, oldValue)) { field.set(settings, path); if (setting.doesNeedRestart()) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); } @@ -203,7 +214,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { Field field = Settings.class.getField(setting.getKey()); field.set(settings, newV); if (setting.doesNeedRestart() && !Objects.equals(oldV, newV)) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); })); @@ -223,7 +234,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { Field field = Settings.class.getField(setting.getKey()); field.set(settings, Integer.parseInt(ctrl.getText())); if (setting.doesNeedRestart() && !Objects.equals(oldV, newV) && prefs != null) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); } @@ -248,7 +259,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { Field field = Settings.class.getField(setting.getKey()); field.set(settings, value); if (setting.doesNeedRestart() && !Objects.equals(oldV, newV)) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); } @@ -264,7 +275,7 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { Field field = Settings.class.getField(setting.getKey()); field.set(settings, newV); if (setting.doesNeedRestart() && !Objects.equals(oldV, newV)) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); })); @@ -287,13 +298,14 @@ public class CtbrecPreferencesStorage implements PreferencesStorage { } } comboBox.valueProperty().addListener((obs, oldV, newV) -> saveValue(() -> { + LOG.debug("Saving setting {}", setting.getKey()); if (setting.getConverter() != null) { field.set(settings, setting.getConverter().convertFrom(newV)); } else { field.set(settings, newV); } if (setting.doesNeedRestart() && !Objects.equals(oldV, newV)) { - prefs.getRestartRequiredCallback().run(); + runRestartRequiredCallback(); } config.save(); }));