JAL-3878 Fix NullPointerExceptions caused by nulls in arrays
authorMateusz Warowny <mmzwarowny@dundee.ac.uk>
Fri, 25 Mar 2022 15:59:57 +0000 (16:59 +0100)
committerMateusz Warowny <mmzwarowny@dundee.ac.uk>
Fri, 25 Mar 2022 15:59:57 +0000 (16:59 +0100)
src/jalview/ws/params/simple/Option.java
src/jalview/ws2/client/slivka/SlivkaParamStoreFactory.java

index 78150cd..44f9f5d 100644 (file)
@@ -148,9 +148,18 @@ public class Option implements OptionI
     required = builder.required;
     defvalue = builder.defaultValue;
     value = builder.value;
-    possibleVals = new ArrayList<>(builder.possibleValues);
-    displayVals = new ArrayList<>(
-        requireNonNullElse(builder.displayValues, possibleVals));
+    if (builder.possibleValues != null)
+      possibleVals = new ArrayList<>(builder.possibleValues);
+    if (builder.displayValues != null)
+      displayVals = new ArrayList<>(builder.displayValues);
+    else
+      displayVals = possibleVals;
+    if (possibleVals == null && displayVals != null)
+      throw new IllegalArgumentException(
+          "cannot use displayValues if possibleValues is null");
+    if (possibleVals != null && possibleVals.size() != displayVals.size())
+      throw new IllegalArgumentException(
+          "displayValues size does not match possibleValues");
     fdetails = builder.detailsUrl;
   }
 
index 6ac21df..05e6f0c 100644 (file)
@@ -96,7 +96,11 @@ class SlivkaParamStoreFactory
       else if (param instanceof Parameter.ChoiceParameter)
       {
         Object ovalue = values.get(param.getId());
-        List<String> lvalue = param.isArray() ? (List<String>) ovalue : List.of((String) ovalue);
+        List<String> lvalue = null;
+        if (param.isArray())
+          lvalue = (List<String>) ovalue;
+        else if (ovalue != null)
+          lvalue = List.of((String) ovalue);
         args.addAll(createChoiceOptions((Parameter.ChoiceParameter) param, lvalue));
       }
       else if (param instanceof Parameter.FileParameter)