From 71320e2319cd0df3b53d8c120dbe3f7fda8497b6 Mon Sep 17 00:00:00 2001 From: Sam Carlberg Date: Tue, 20 Mar 2018 21:38:43 -0400 Subject: [PATCH] Fix null pointers in sendable chooser stuff (#449) Was caused by the combobox getting de-selected and setting the selected option to null instead of the default option --- .../plugin/base/data/SendableChooserData.java | 7 ++++--- .../base/widget/ComboBoxChooserWidget.java | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/data/SendableChooserData.java b/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/data/SendableChooserData.java index df2df63dd..1ff46416b 100644 --- a/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/data/SendableChooserData.java +++ b/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/data/SendableChooserData.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.Map; +import java.util.Objects; /** * Represents data options sent by the robot that may be selected by the drivers. @@ -32,9 +33,9 @@ public SendableChooserData(Map map) { @SuppressWarnings("JavadocMethod") public SendableChooserData(String[] options, String defaultOption, String selectedOption) { - this.options = options.clone(); - this.defaultOption = defaultOption; - this.selectedOption = selectedOption; + this.options = Objects.requireNonNull(options, "options").clone(); + this.defaultOption = Objects.requireNonNull(defaultOption, "defaultOption"); + this.selectedOption = Objects.requireNonNull(selectedOption, "selectedOption"); } public String[] getOptions() { diff --git a/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget/ComboBoxChooserWidget.java b/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget/ComboBoxChooserWidget.java index 271b263d3..d3625309f 100644 --- a/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget/ComboBoxChooserWidget.java +++ b/plugins/base/src/main/java/edu/wpi/first/shuffleboard/plugin/base/widget/ComboBoxChooserWidget.java @@ -1,13 +1,13 @@ package edu.wpi.first.shuffleboard.plugin.base.widget; +import edu.wpi.first.shuffleboard.api.widget.ComplexAnnotatedWidget; +import edu.wpi.first.shuffleboard.api.widget.Description; +import edu.wpi.first.shuffleboard.api.widget.ParametrizedController; import edu.wpi.first.shuffleboard.plugin.base.data.SendableChooserData; import edu.wpi.first.shuffleboard.plugin.base.data.types.SendableChooserType; import java.util.Map; -import edu.wpi.first.shuffleboard.api.widget.ComplexAnnotatedWidget; -import edu.wpi.first.shuffleboard.api.widget.Description; -import edu.wpi.first.shuffleboard.api.widget.ParametrizedController; import javafx.fxml.FXML; import javafx.scene.control.ComboBox; import javafx.scene.layout.Pane; @@ -37,7 +37,16 @@ private void initialize() { }); comboBox.getSelectionModel() .selectedItemProperty() - .addListener((__, oldValue, newValue) -> setData(getData().withSelectedOption(newValue))); + .addListener((__, oldValue, newValue) -> { + SendableChooserData currentData = getData(); + if (newValue == null) { + String defaultOption = currentData.getDefaultOption(); + setData(currentData.withSelectedOption(defaultOption)); + comboBox.getSelectionModel().select(defaultOption); + } else { + setData(currentData.withSelectedOption(newValue)); + } + }); } private void updateOptions(String... options) {