Fix NPE in CtbrecPreferencesStorage

This commit is contained in:
0xb00bface 2020-12-24 14:57:14 +01:00
parent 8b55e9d374
commit 51574b0b7a
1 changed files with 20 additions and 8 deletions

View File

@ -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<Integer> rangeProperty = (SimpleRangeProperty<Integer>) 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();
}));